web-dev-qa-db-fra.com

Comment savoir si un fichier texte a été édité ou falsifié?

Est-il possible de savoir si un fichier texte, par ex. au format XML, a été modifié ou modifié au fil du temps?

Le contexte de ma question est le suivant:

Je suis un scientifique de l'industrie utilisant une technologie appelée "spectrométrie de masse (MS)". La SEP est une technique analytique utilisée, par ex. dans l'analyse médico-légale pour déterminer si un composé particulier est présent dans un échantillon (par exemple, drogue abusive dans le sang ou l'urine).

Spécifications de masse. les fichiers de données sont généralement stockés au format de fichier plat dans la spécification binaire privée du vendeur de l'instrument - leur logiciel peut le traiter, mais rien d'autre ne le peut. Cependant, il existe des normes ouvertes pour les données MS et la plupart des fournisseurs prennent en charge l'exportation vers au moins une spécification ouverte. Ces normes ouvertes sont principalement basées sur XML de nos jours (par exemple mzML ) et permettent le traitement avec des applications open source, et permettent également le stockage à long terme (> 10 ans) des données dans un format qui ne le fait pas. exiger que nous maintenions un ordinateur archivé et le système d'exploitation (ou VM) et le logiciel de traitement pendant de longues périodes.

Le format binaire du fournisseur offre au moins une certaine sécurité contre la falsification des données, contrairement aux formats XML. D'où le problème - les formats ouverts sont très utiles pour fournir un accès aux données sur des échelles de temps d'archivage, mais la sécurité est un problème.

38
Drew Gibson

La solution par défaut serait d'utiliser des signatures cryptographiques. Demandez à chaque technicien de générer une paire de clés PGP, de publier la clé publique et de sécuriser la clé privée.

Lorsqu'un technicien effectue une analyse, il signe le fichier de résultats avec sa clé privée. Désormais, quiconque souhaite vérifier le fichier peut vérifier la signature à l'aide de la clé publique du technicien. Lorsque quelqu'un modifie le fichier, la signature ne sera plus correcte.

Considérations de sécurité: Si une clé privée d'un technicien est connue de quelqu'un d'autre, cette personne peut changer les fichiers et également changer la signature en une qui sera valide. Ce problème peut être atténué en demandant à plusieurs personnes de signer chaque fichier de résultats. Un attaquant aurait besoin de toutes les clés pour remplacer toutes les signatures par des signatures valides.

Solution alternative low-tech: Imprimez chaque fichier de résultats, demandez au technicien de le signer à l'ancienne (avec un stylo) et déposez le fichier dans une archive physiquement sécurisée.

Soit dit en passant: Ne présumez pas que le format binaire spécifique au fournisseur offre plus de sécurité contre la falsification que XML. Ce n'est pas parce que vous ne pouvez pas le lire et le modifier lorsque vous l'ouvrez avec un éditeur de texte que personne d'autre ne peut procéder à une rétro-ingénierie du format et créer un éditeur pour cela.

81
Philipp

N'importe quelle forme de signature numérique fera l'affaire. Voici quelques indications:

  • Pour les données XML, il existe une norme de signature numérique ( XMLSign ). Malheureusement, cette norme est plutôt médiocre et présente une faille de sécurité importante (les documents doivent être normalisés par une transformation XML avant de pouvoir être signés. Ceci est extrêmement difficile à faire en toute sécurité car la transformation elle-même devient une partie importante de la signature).

  • Vous pouvez également utiliser PGP ou S/MIME pour signer numériquement des documents, ceux-ci produiront de nouveaux textes, principalement lisibles mais documents encore infalsifiables.

  • Enfin, vous pouvez utiliser des signatures détachées. Fondamentalement, c'est un autre fichier qui contient la signature numérique liée à un autre document et peut être utilisé pour valider les données originales (quel que soit le format d'origine).

Permettez-moi d'ajouter quelques informations supplémentaires ici:

  • Choisir les bonnes propriétés pour la signature (algorithme, type et taille de clé, etc.) dépend très de la condition que vous définissez: combien de temps prévoyez-vous de sécuriser les données, contre quel type d'adversaire comptez-vous les protéger ( quelle est la valeur d'une contrefaçon? quelle serait la valeur d'une attaque qui briserait tous les documents signés avec la même clé?), y a-t-il une exigence réglementaire? Cela signifie que vous devriez consulter un spécialiste qui peut traduire ces exigences commerciales et les traduire en exigences techniques.
  • Je vous conseille fortement d'ajouter un horodatage sécurisé à votre signature. Cela vous permettra non seulement de prouver qu'un document n'a pas été falsifié, mais vous permettra également de prouver quand la signature a eu lieu.
27
Stephane

Je décrirai les trois principales options et avantages/inconvénients de chacun.

Stockez les sauvegardes des fichiers dans un emplacement sécurisé

Assez explicite. L '"emplacement sécurisé" peut être un support en lecture seule (comme les CD), ou un lecteur réseau que tout le monde peut lire, mais seul le superviseur peut écrire, ou un service de stockage en ligne (par exemple Dropbox) qui rend raisonnablement difficile la falsification de fichiers. dates de modification.

Avantages

  • Vous devriez quand même avoir un système de sauvegarde

Contre

  • Si les fichiers sont volumineux, leur téléchargement pour vérification peut prendre beaucoup de temps
  • Si le faussaire s'introduit dans un endroit sûr, il peut couvrir ses traces

Stockez les hachages dans un endroit sécurisé

Un hachage est une empreinte digitale d'un fichier qui ressemble à quelque chose 8f2e3f53aa90b27bda31dea3c6fc72f6; si deux fichiers sont légèrement différents, ils auront un hachage différent. Prenez un hachage du fichier d'origine et stockez-le en toute sécurité, puis pour vérifier qu'un fichier n'a pas été modifié, prenez-en un et comparez-le au hachage stocké.

Avantages

  • Vous devez stocker/vérifier en toute sécurité un code à ~ 32 chiffres au lieu d'un fichier entier

Contre

  • Vous devez toujours accéder à une ressource externe pour vérifier le fichier
  • Si le faussaire entre par effraction dans un endroit sûr, il peut couvrir ses traces

signatures cryptographiques

Dans ce cas, une ou plusieurs personnes peuvent "signer" le fichier et si des modifications sont apportées, ces signatures seront invalidées. Bien sûr, si toute personne qui doit signer le fichier est disposée à (ou trompée) à signer un fichier falsifié, vous pouvez vous en tirer avec le fichier falsifié.

Avantages

  • Les informations de sécurité peuvent être conservées dans le fichier lui-même , ou autrement sur le même lecteur, ce qui signifie une vérification plus facile.

Contre

  • Toute personne qui signe des fichiers doit être très très prudente pour empêcher quelqu'un de voler sa clé privée.
  • Quiconque signe des fichiers doit être très prudent, il sait ce qu'il signe .
6
Artelius

Prenez votre fichier xml et votre photo de vacances préférée. Concatène les fichiers et calcule plusieurs valeurs de hachage du fichier résultant.

L'image de vacances garantit qu'il est extrêmement difficile de produire une collision, même si le fichier photo de vacances est public. De plus, si vous utilisez plusieurs algorithmes de hachage, il est peu probable que tous ceux-ci soient brisés en moins de 10 ans.

2
Per Alexandersson

Aborder la sécurité du format de fichier du fournisseur, en développant ce que dit @Philipp dans les commentaires.

J'ai eu un coup de œil autour d'un format de fichier fournisseur (pas de spécifications de masse mais assez proche pour ces fins). Cela a été rendu beaucoup plus facile en installant le logiciel, mais je ne suis pas un expert en la matière. Je pourrais facilement changer les métadonnées (extraire les métadonnées était mon objectif en premier lieu) les données réelles auraient été plus difficiles mais nullement impossibles à modifier. Comme les métadonnées incluent des éléments comme l'ID de l'échantillon et la date du test, c'est une vulnérabilité suffisamment grande pour des choses comme "dont l'échantillon était propre et quand?" comme cela vous semble pertinent, ou "qui en premier découvert ce médicament? " dans d'autres domaines.

Certains logiciel fournit certains fonctionnalités anti-sabotage (par exemple, utilisation interne - pas nécessairement crypto-grade - de hachages; autorisations des utilisateurs lors de l'édition en utilisant leur logiciel). La rétro-ingénierie ne serait guère plus que triviale pour quelqu'un avec un peu de compétence dans la plupart des cas. Avec le logiciel installé, même en contournant les fonctionnalités intégrées, cela pourrait être aussi simple que d'écrire un frontal pour appeler les DLL du fournisseur, car ces fonctionnalités anti-sabotage sont normalement des modules complémentaires facultatifs (dans de nombreux domaines, ils ne sont pas requis ou obsolètes) ).

(Cela aurait pu être une séquence de commentaires, mais comme mon objectif était de rendre le problème du fichier fournisseur plus clair, il semblait préférable de l'écrire correctement).

2
Chris H

Que diriez-vous de demander aux techniciens de publier des paires d'identifiants de fichiers uniques et leurs hachages sur Twitter en utilisant leurs propres comptes?

Cela prouvera que:

  • Un fichier de données avec ledit identifiant et hachage existait au moment de la publication
  • La personne qui a accès au compte fait confiance au contenu du fichier à ce stade
  • Le fichier n'est pas modifié après coup car Twitter ne permet pas de modifier les tweets

Cette méthode offre une sécurité au moins comparable à de nombreuses réponses basées sur la signature numérique et à des avantages tels que:

  • Beaucoup plus simple à apprendre et à utiliser (pas de procédure compliquée de génération de clé privée, d'ouverture ou de sauvegarde)
  • Redondance élevée (grâce aux sauvegardes de Twitter et aux sites tiers de grattage de Twitter)
  • Horodatage intégré (qui se tiendra probablement dans une procédure judiciaire sans beaucoup d'explications)

Je recommande d'utiliser au moins SHA256 comme algo de hachage.

1
billc.cn

L'une des façons les plus simples consiste à créer un hachage du fichier et à le stocker ailleurs afin de savoir s'il est modifié. Les programmes de détection d'intrusion utilisent cette technique tout le temps pour vérifier l'intégrité (ou au moins indiquer si un attaquant a manipulé des fichiers système).

Regardez un programme tel que AIDE , vous pouvez l'exécuter sur le répertoire contenant les fichiers (et éventuellement l'exécuter à la demande lorsqu'un fichier est ajouté) à mettre à jour sa base de données de hachages. Tous les soirs, exécutez-le pour vérifier et vous envoyer par e-mail un rapport indiquant toutes les modifications de fichier.

Si vous avez besoin de connaître l'original, alors un système de fichiers versionné pourrait être une bonne idée. Chaque modification apportée à un fichier est enregistrée et les anciennes versions peuvent être extraites. Alternativement, un système de sauvegarde qui détecte les nouveaux fichiers et les sauvegarde dans un emplacement sécurisé peut être utilisé (et conserve toutes les anciennes versions - ou un attaquant pourrait simplement modifier le fichier à plusieurs reprises jusqu'à ce que l'original soit supprimé).

1
gbjbaanb