2009-10-20 10 views
2

J'ai une application qui enregistre les données d'un processus de fabrication sur une base périodique (différentes fréquences d'échantillonnage, minimum de 1 sec, le maximum habituel est de 10 min ou plus). Le client souhaite savoir si les données ont été modifiées (modifiées sur place, ajoutées à des enregistrements ou supprimées).Signer numériquement les données telles qu'elles sont archivées

Les données sont enregistrées sous la forme d'un enregistrement binaire. Il peut y avoir plusieurs flux de données, chacun allant à son propre fichier, et chacun avec son propre format de données. Les données sont écrites un enregistrement à la fois, et si le PC ou le processus de surveillance tombe en panne, la fabrication ne s'arrête pas nécessairement, donc je ne peux pas garantir que le processus d'archivage restera. Évidemment, je ne peux authentifier que ce que j'enregistre réellement, mais l'enregistrement pourrait commencer et s'arrêter.

Quelles méthodes peuvent être utilisées pour authentifier ces données? Je préférerais utiliser un fichier 'logging' distinct pour valider les données afin de maintenir la compatibilité ascendante, mais je ne suis pas sûr que ce soit possible. À moins de réponses directes, y a-t-il des suggestions de termes de recherche pour trouver des suggestions?

Merci!

Répondre

1

Je ne pense pas que vous ayez nécessairement besoin de signatures numériques, des hachages sécurisés (disons, SHA-256) devraient suffire.

Lorsque chaque enregistrement est écrit, calculez un hachage sécurisé et stockez la valeur de hachage dans votre fichier de journalisation. S'il y a une sorte d'identifiant d'enregistrement, stockez-le également. Vous avez besoin d'un moyen de faire correspondre le hachage avec l'enregistrement correspondant. Maintenant, tant que personne ne falsifie le fichier de journalisation, toute altération des enregistrements sera détectable. Pour rendre la falsification difficile, hachez régulièrement votre fichier journal et envoyez ce hachage et le nombre d'enregistrements dans le fichier journal à un endroit sûr. Idéalement, envoyez-le plusieurs endroits, chacun sous le contrôle d'une personne différente.

Une approche légèrement plus sophistiquée consiste à utiliser un arbre Merkle, essentiellement un arbre de hachage binaire, plutôt qu'un simple hachage du fichier journal. Ensuite, stockez l'arbre entier (qui n'est pas très grand) et envoyez le hachage "root" à différents endroits. Le hachage racine vous permet de vérifier l'intégrité de l'arborescence et l'arborescence vous permet de vérifier l'intégrité du fichier journal. Si la vérification d'intégrité échoue, elle vous permet également de déterminer quels enregistrements ont été modifiés.

+0

C'est essentiellement ce que j'ai fait, merci! J'ai un enregistrement qui spécifie l'emplacement de départ dans le fichier de données et la longueur des données, puis le hachage de ces données (et démarrer/len). (la longueur de l'enregistrement et le hachage sont également spécifiés - oh et si le fichier est corrompu: quelqu'un a légitimement édité un fichier altéré). Le .digest est juste une liste de ces enregistrements. –

0

Vous pouvez plutôt utiliser l'horodatage numérique. GuardTime a la technologie pour supporter l'horodatage de précision 1sec massivement extensible qui garantit l'intégrité de l'information.

+0

Intéressant. Un peu d'overkill pour mon application, mais une utilisation intelligente de l'ancienne édition de l'arbre mort. –

Questions connexes