Question:
Un fichier peut-il contenir sa somme md5?
balki
2011-05-16 10:45:29 UTC
view on stackexchange narkive permalink

Je me demande simplement s'il est possible de créer un fichier qui contient sa somme md5 avec d'autres contenus.

Mon raisonnement ici est qu'il serait logiquement possible de le faire, mais ce ne serait pas si facile à comprendre. Ne serait-ce pas juste un * très * long jeu d'essais et d'erreurs? Je suis intéressé de savoir si c'est effectivement possible.
Vous feriez mieux de créer une section du fichier pour le md5 et une section pour le contenu. D'un autre côté, puisque n'importe qui peut recréer la partie de hachage, quelle valeur de sécurité obtiendriez-vous? Vous pouvez obtenir une protection contre les falsifications à partir d'une signature numérique (ou peut-être via HMAC), mais un simple hachage ne vous aidera pas. Ou essayez-vous de faire autre chose?
@AviD a raison, HMAC est exactement destiné à de telles situations.
J'ai juste essayé de changer la balise de "cryptage" à "hachage". MD5 concerne le hachage, ou peut-être la signature s'il est protégé (comme le disait @AviD). Il ne s'agit pas vraiment de chiffrement, surtout lorsqu'il s'agit de fichiers (que vous voudriez probablement pouvoir déchiffrer à un moment donné). La principale forme de «cryptage» avec MD5 est le stockage unidirectionnel des mots de passe.
Question éventuellement liée: http://cstheory.stackexchange.com/questions/4609/do-reflexive-hash-algorithms-exist/4629#4629.
Qu'en est-il d'une question plus générale, qui - étant donné que MD5 n'est pas conçu pour le but discuté - pourrait avoir plus de sens: ** Peut-il y avoir une bonne fonction de hachage F telle que HASH = F (concat (DATA, HASH )) $ et telle que la solution de cette équation HASH peut être calculé efficacement? **
J'ai en fait vu un fichier README qui a fait cela, mais je ne peux pas le trouver pour le moment. Donc, je pense que la réponse à votre question est oui. Mais je suis aussi assez curieux de savoir comment il a fait cela.
http://www.win.tue.nl/hashclash/Nostradamus/ est pertinent, ils ont créé 12 PDF dans lesquels ils ont prédit les résultats des élections américaines, qui ont tous haché à la même somme de contrôle MD5.
@flz Je suppose que le MD5 dans le README était pour un autre fichier. Ou c'était dans le nom du fichier.
Qu'en est-il de créer un fichier contenant UNIQUEMENT le hachage de lui-même .. que pensez-vous, serait-ce plus difficile ou plus facile ..? ;)
Douze réponses:
user185
2011-05-16 17:48:03 UTC
view on stackexchange narkive permalink

Considérez ceci: vous créez un fichier qui contient chaque membre de l'ensemble des séquences de 16 octets. Une somme de contrôle MD5 est une séquence de 16 octets, donc par définition ce fichier contient sa propre somme de contrôle MD5. Quelque part.

Joli. Pas vraiment une réponse, mais drôle.
@Iszi: Je ne suis pas d'accord. C'est une réponse, en ce sens que c'est une solution au problème proposé. Cela peut ne pas être utile, mais cela n'a jamais été dans les spécifications :-)
C'est un gros fichier. :)
@Jakob oui :). Mais il est probablement (à peu près) assez petit pour tenir dans un fichier sur un système de fichiers ZFS, bien que vous ayez besoin d'un disque dur avec une surface autour de la taille de la zone terrestre sur la planète.
@Graham: Selon mes calculs, en supposant que vous puissiez insérer des données sur un plateau avec une densité de 10 To par pouce carré (autour de la densité prototypique la plus élevée aujourd'hui), et en supposant qu'il y ait une méthode idéale pour enregistrer les sommes MD5 sur un disque (sans compression ), un tel disque aurait une superficie d'environ 47 millions de kilomètres carrés, soit environ 1/3 de la superficie terrestre de la Terre. (en supposant qu'il y ait une masse terrestre plate assez grande)
@hello71 ouais, c'est un peu plus gros que ce que j'ai imaginé, c'est bon de savoir que j'ai raison ou tort en bonne compagnie :-)
Bien que ce soit le cas extrême - aucune raison pour laquelle vous ne pouvez pas calculer 50% des hachages - alors il y a 50% de chances qu'il contienne le hachage.Remplacez le dernier hachage par un autre pas dans le fichier jusqu'à ce que vous ayez généré un fichier avec un hachage à l'intérieur.Cette méthode pourrait être utilisée pour 25%, 10% 1% etc.
Shadur
2011-05-16 11:47:09 UTC
view on stackexchange narkive permalink

Théoriquement? Oui.

Pratiquement, cependant, puisque / toute / modification du contenu d'un fichier, quelle que soit la minute, provoque un changement radical dans la somme de contrôle (c'est ainsi que les sommes de contrôle md5 fonctionnent, après tout), vous doivent être en mesure de prédire comment la somme de contrôle changera lorsque vous modifiez le fichier pour inclure la somme de contrôle - à toutes fins utiles, ce n'est pas très différent de pouvoir casser l'algorithme de hachage md5.

Il n'y a pas de "impossible" en cryptographie, mais la science reconnaît le concept de "pratiquement annulable" ou "statistiquement improbable" et c'est à peu près ce que vous traiter ici, pour le moment.

J'aimerais lire la preuve théorique. Avez-vous une?
Je voulais dire théoriquement comme dans "Il est théoriquement possible de créer un fichier contenant entre autres, une chaîne de 33 octets qui se trouve être exactement la même valeur que la somme de contrôle MD5 du fichier". Vos chances de le faire par accident sont légèrement pires que celles de gagner à la loterie avec le billet de la semaine dernière.
Les chances sont probablement bien pires que de gagner le billet de loterie de la semaine dernière. Vous devriez probablement penser davantage à un problème difficile de style TSP / NP sur 128 bits du fichier parent et enfant que vous essayez de générer (en supposant que vous ignorez la faiblesse de md5).
@JonBringhurst, Mais vous pouvez toujours le réessayer. Aka bruteforce. C'est comme essayer de gagner une loterie impossible mais vous pouvez avoir beaucoup de billets. Beaucoup. [Ou vous pouvez tricher] (http://security.stackexchange.com/a/89959/2379).
Thomas Pornin
2011-05-17 20:17:45 UTC
view on stackexchange narkive permalink

Mise à jour: en y repensant, j'ai trouvé une méthode qui devrait permettre la construction d'un fichier contenant son propre MD5 beaucoup plus rapidement que ce que j'expliquais au départ. Le nouveau coût devrait être d'environ 2 65 invocations élémentaires de MD5, soit beaucoup moins que les 2 119 dont je parlais; ce serait même techniquement faisable (avec un budget compté en millions de dollars - mais pas en milliards ). Voir à la fin une description de la nouvelle méthode.


Réponse originale:

Supposons que MD5 est un hachage "parfait" fonction qui peut être modélisée comme un oracle aléatoire. Un oracle aléatoire est une fonction pour laquelle vous ne savez rien de la sortie pour une entrée donnée avant de l'essayer une fois. Pour un oracle aléatoire, la meilleure méthode pour atteindre ce que vous recherchez est l'espoir: vous essayez des messages d'entrée aléatoires jusqu'à ce que vous en trouviez un qui contient son propre hachage. La question est alors: quelle taille de messages d'entrée devez-vous utiliser?

MD5 traite les données en ajoutant quelques bits de remplissage (au moins 65, au plus 576) de sorte que la longueur soit un multiple de 512; puis les données sont divisées en blocs de 512 bits. Le coût de hachage d'un message est directement proportionnel au nombre de tels blocs. C'est à dire. pour un message n bits, le coût est de ceil ((n + 65) / 512) . Un message n bits, par contre, offre des sous-séquences n-127 de 128 bits. Des messages plus longs rendent plus probable la réussite de chaque message (de manière linéaire) mais coûtent plus cher à traiter (linéairement aussi). La longueur du message est donc généralement neutre, sauf que la surcharge impliquée par le remplissage est plus grande lors de l'utilisation de messages courts. Dans l'ensemble, avec des messages aléatoires suffisamment volumineux (par exemple 8 ko), vous trouverez un message qui contient son propre MD5 au coût moyen d'environ 2119 évaluation élémentaire MD5. Une évaluation élémentaire de MD5 utilise quelques centaines de cycles d'horloge sur un processeur récent, et 2119 est totalement irréalisable avec la technologie d'aujourd'hui (et la technologie de demain aussi).

(Le "gros fichier avec toute la séquence de 128 bits" dont parle Graham Lee n'est qu'un cas particulier de cette méthode générique, avec un seul très gros message.)

Maintenant, MD5 est largement connu pour ne pas être un oracle aléatoire - ne serait-ce que parce que les collisions sur MD5 peuvent être calculées efficacement, ce qui n'est pas possible avec un oracle aléatoire. Il est donc concevable que des raccourcis exploitant les faiblesses de la structure MD5 existent. Cependant, je n'ai connaissance d'aucune attaque conduisant à un message contenant son propre MD5; cela ressemble à un problème proche de la résistance pré-image , quelque chose qui est considéré comme beaucoup plus difficile que les collisions.


Nouvelle méthode:

MD5, comme la plupart des fonctions de hachage (sinon toutes), est streamé : lorsqu'il traite une longue entrée, il le fait en un seul passage, en gardant un petit état de fonctionnement de taille fixe. Pour MD5 en particulier, l'état d'exécution a une taille de 128 bits (16 octets) et les données sont traitées par blocs de 512 bits (64 octets). Une conséquence importante est la suivante: si vous avez des entrées m et m || x ("||" indique la concaténation), et que vous voulez calculer à la fois MD5 ( m ) et MD5 ( m || x ), alors le surcoût nécessaire pour calculer le second est proportionnel à la taille de x , mais PAS à la taille de m . En d'autres termes, si vous avez une entrée de 1 gigaoctet m , calculez MD5 ( m ), puis voulez calculer le MD5 de m suivi par une bande-annonce de 20 octets x , alors ce deuxième MD5 peut réutiliser une grande partie du travail effectué pour le premier, et sera presque gratuit.

Cela conduit à l'algorithme suivant pour trouver un message m contenant son propre MD5:

  1. Commencez par une valeur m.
  2. Calculez MD5 ( m ). S'il fait partie de m , alors quittez (nous avons trouvé notre message).
  3. Remplacez m par m || x x est tel que la séquence des 128 derniers bits de m || x n'apparaît nulle part dans m .
  4. Boucle vers 2.

La recherche de la bonne valeur " x " à chaque étape peut être effectuée en utilisant une séquence De Bruijn. Utilisez B (2, 128) comme séquence de base si chaque x est un seul bit. Si vous voulez une solution orientée octets (le message m doit être composé d'un nombre entier d'octets, et MD5 ( m ) doit apparaître entre m à une limite d'octet), puis utilisez B (256, 16) .

Pour calculer le nombre moyen d'itérations nécessaires pour trouver un hit, considérez qu'à l'itération n , le message m contient n sous-séquences distinctes de 128 bits (ou 16 octets), le nombre total cumulé de comparaisons sera donc n ( n +1) / 2. En supposant que MD5 soit un oracle aléatoire, alors chaque comparaison a une probabilité 2 -128 d'être un hit, donc n devra, en moyenne, être tel que n ( n +1) / 2 = 2 128 - ce qui se traduit par n = 2 64,5 itérations.

Cependant, chaque itération implique le calcul d'un MD5 ( m || x ) où x est très petit (un bit ou un octet ) et MD5 ( m ) a été calculé; cela ne nécessitera généralement qu'un seul calcul MD5 élémentaire supplémentaire (traitement d'un seul bloc de 64 octets). (Si x sont des bits, une seule itération sur 512 nécessitera le traitement de deux blocs; si x sont des octets, cela devient une itération sur 64. )

Quoi qu'il en soit, le plus dur sera la recherche. Obtenir toutes les sous-séquences d'un index correctement triées pour une recherche rapide nécessitera énormément de RAM rapide, ce qui serait probablement beaucoup plus cher que de calculer le 2 64.5 MD5. Cependant, certaines séquences De Bruijn permettent un décodage rapide et sans stockage. Ainsi, avec cet algorithme, on peut trouver un message m contenant son propre MD5 pour un coût proche de 2 65 calculs de MD5. Le message résultant aura une longueur d'environ 3,3 * 10 18 octets, soit environ un million de disques durs modernes (huit fois plus si nous voulons une solution orientée octets).

Il On notera que l'algorithme peut être démarré avec un message arbitraire m , de toute taille. Ce point de départ apparaîtra au début du fichier self-MD5 produit par l'algorithme.

(Dans ma réponse initiale, l'erreur était dans cette phrase: "Les messages plus longs rendent plus probable la réussite de chaque message (de manière linéaire) mais coûtent plus cher à traiter (linéairement aussi)." Comme expliqué ci-dessus, plus les messages peuvent encore être traités très efficacement tant que nous les générons en réutilisant un préfixe commun, comme dans mon nouvel algorithme.)

john
2011-05-16 21:15:44 UTC
view on stackexchange narkive permalink

Sur le plan cryptographique, l'attaque que vous décrivez est en fait plus difficile que de trouver une première pré-image , peut-être même plus difficile que de trouver une deuxième pré-image .

Ce n'est pas possible étant donné la puissance de calcul d'aujourd'hui et les attaques cryptographiques d'aujourd'hui.

Les attaques actuelles sur MD5 ne sont même pas près de trouver des pré-images - nous parlons de quelque chose de complètement différent des diverses attaques par collisions qui ont été démontrées (et sont la raison pour laquelle MD5 est considéré comme quelque peu peu sûr). L'attaque qui serait nécessaire pour créer un fichier avec son MD5 n'a rien à voir avec des collisions.

Je dirais qu'une telle attaque, car comme je l'ai mentionné est encore plus difficile qu'une attaque de préimage, est très improbable de nos jours.

J'aime tout sauf ta dernière phrase. Je ne suis pas un expert, mais d'après ce que je me souviens des experts, la science du hachage est largement en retard, même la science de par exemple cryptage, et n'est pas suffisamment avancé pour en dire beaucoup avec confiance. Et rappelez-vous, la singularité est proche ...
Vous avez raison, c'est une déclaration assez audacieuse et je devrais les éviter. Je ne suis pas non plus un expert, même si j'ai étudié la cryptographie. Si nous parlons spécifiquement de MD5, un point qui peut être fait est qu'une attaque de pré-image (inversant le hachage) est si difficile, cela prendra probablement si longtemps que d'ici là, personne n'utilisera encore MD5, même de notre vivant. Aussi, je pense que l'informatique quantique est plus proche que la singularité ...;)
AviD
2011-05-16 17:33:47 UTC
view on stackexchange narkive permalink

(Copier mon commentaire d'origine comme réponse :)

Vous feriez mieux de créer une section du fichier pour le md5 / hachage, et une section séparée pour le contenu.

D'un autre côté, puisque n'importe qui peut recréer la partie de hachage, quelle valeur de sécurité obtiendriez-vous?
Vous pourriez obtenir une protection contre les falsifications à partir d'une signature numérique (ou peut-être via HMAC), mais un simple hachage ne vous aidera pas.
Ou essayez-vous de faire autre chose?

Une façon très courante de faire ce que vous avez dit est simplement de renommer le fichier pour inclure le hachage dans le nom de fichier ... comme `filename_ .ext` :) Puisque le nom d'un fichier n'est pas haché, le changer ne changera pas le Somme de contrôle MD5.
CesarB
2011-07-25 07:01:01 UTC
view on stackexchange narkive permalink

Ce que vous demandez, c'est l'existence d'un point fixe de la composition de deux fonctions: la fonction md5 , et une fonction ( appelons-le f , et appelons l'ensemble de toutes ces fonctions F ) qui prend un md5 et produit votre fichier. Autrement dit, X = f (md5 (X)) .

Comme le dit l'article de Wikipédia, toutes les fonctions n'ont pas de point fixe.

Pour certains triviaux fonctions dans F , la réponse est oui. Par exemple, une fonction qui rejette toujours l'entrée et sort toujours un fichier de zéro octet fera évidemment que sa composition avec md5 aura un point fixe. De toute évidence, ces cas ne sont pas ce que vous voulez - vous ne pouvez pas dire avec un visage impassible qu'il "contient sa somme md5 à l'intérieur". Alors, affinons notre définition.

Limitons pour l'instant notre ensemble F à toutes les fonctions qui produisent la concaténation d'un préfixe, l'entrée, et un suffixe. Autrement dit, f (X) = pre∥X∥post . Avec cela, la totalité de la somme md5 doit apparaître quelque part dans le fichier, intacte, en binaire et exactement une fois. C'est beaucoup plus restrictif que votre définition (qui autoriserait le md5sum sous forme de texte, divisé en parties, répété, voire prononcé sous forme de fichier .wav !), Mais cela évite les fonctions dégénérées qui inclure la somme md5 ou n'en inclure qu'une partie.

Il est également facile de voir que, si f (md5 (X)) a un point fixe, md5 (f (X)) a également un point fixe, et vice versa.

Maintenant, jetez un œil à cette question de stackoverflow: Y a-t-il un point fixe MD5 où md5 (x) == x ?. En particulier, jetez un œil à la réponse d'Adam Rosenfield. On y voit qu'il y a une probabilité de 63,21% que md5 (X) ait un point fixe (bien sûr, le point fixe existe ou n'existe pas; c'est une probabilité bayésienne, qui mesure notre conviction qu'il existe).

Le même argument utilisé dans cette réponse peut être appliqué à md5 (f (X)) , et donc à f (md5 (X)) . Il y a donc 63,21% de probabilité que, pour un préfixe et un suffixe donnés (c'est-à-dire pour une fonction f donnée), un fichier contenant sa propre somme md5 à l'intérieur existe, et 36,79% de probabilité qu'il n'existe le fichier existe. Encore une fois, c'est la probabilité bayésienne.

Il est facile de voir, comme mentionné dans cette réponse, que le même argument s'appliquera également à tout fichier qui dépend suffisamment de sa sortie md5. Pour les fichiers qui ne dépendent que de quelques bits de la sortie md5, ou qui n'en dépendent pas du tout (y compris celui de la réponse de @Graham Lee, qui dépend de 0 bits de la sortie md5), la réponse sera différente.

Euh, point mineur dans votre raisonnement, peut-être, mais il n'y a * pas * de fonction f où f (md5 (X)) donne X. MD5 est strictement à sens unique.
@Shadur: Oui, il n'y a pas de fonction f telle que, * pour chaque valeur X *, f (md5 (X)) donne X. Cependant, il existe de nombreuses fonctions f telles que, * pour au moins une valeur X *, f (md5 (X)) donne X (le point fixe) - CesarB donne déjà un exemple.
@CesarB: Pourriez-vous modifier votre réponse pour souligner qu'il est presque certainement possible de "créer un fichier qui contient sa somme md5 à l'intérieur" - pour n'importe quel suffixe, nous avons une probabilité de 63% que l'on répète "simplement" tous les postfixes possibles ( d'où il y a un nombre infini)
@CesarB: Pourriez-vous modifier votre réponse pour souligner qu'il est presque certainement théoriquement possible de "créer un fichier contenant sa somme md5 à l'intérieur", même si c'est pratiquement impossible avec la technologie actuelle? Pour tout suffixe donné, nous avons une probabilité de 63% qu'un tel fichier soit possible; pour 7 suffixes donnés différents, nous avons une probabilité de 99,9% qu'un tel fichier soit possible pour au moins un de ces postfixes. Puisqu'il existe un nombre infini de postfixes possibles, il est presque certain que des millions de postfixes différents ont au moins un point fixe md5.
Iszi
2011-05-16 19:46:35 UTC
view on stackexchange narkive permalink

Vous pouvez le faire en utilisant un flux de données alternatif, même si les informations peuvent ne pas être transférées correctement entre certains systèmes de fichiers ou OS. Certaines applications peuvent également gérer (ou ne pas les gérer) différemment.

En bref, les flux de données alternatifs sont une forme de métadonnées attachées à des fichiers dans certains systèmes de fichiers (NTFS en est un) qui n'apparaissent pas facilement lors de la visualisation le contenu d'un répertoire. Même avec le système configuré pour afficher les "fichiers cachés" et ces "fichiers du système d'exploitation protégés" toujours critiques, vous ne verrez toujours pas de "fichier" ADS dans la plupart des gestionnaires de fichiers.

De plus, le "hôte" le fichier lui-même n'apparaîtra pas du tout modifié. La taille du fichier restera la même, et même le hachage MD5 (ou tout autre, d'ailleurs) sera le même. Vous pouvez même stocker un "fichier" ADS plus volumineux que son fichier hôte - bien que vous ne puissiez bien sûr pas en stocker un si grand qu'il dépasse la capacité physique de votre disque.

Dans les systèmes Windows avec NTFS , Les fichiers ADS sont plus facilement accessibles via la ligne de commande. Donc, pour File1.ext, si vous souhaitez stocker le hachage MD5 dans un ADS, procédez comme suit:

  • Calculez le MD5 de File1.ext avec l'outil de votre choix.
  • Ouvrez une fenêtre CMD et accédez au dossier contenant File1.ext
  • Exécutez le bloc-notes sur le fichier, mais ajoutez un ADS à la fin avec un séparateur deux-points (aucun espace de chaque côté des deux-points ) comme ceci:
    • notepad File1.ext: MD5.txt
    • (Assurez-vous de le faire à partir de l'invite de commande et en travaillant dans le même dossier comme fichier - ou indiquez le chemin complet du fichier.)
  • Le bloc-notes avertira que File1.ext: MD5.txt n’existe pas. Dites au Bloc-notes que oui, vous voulez créer un nouveau fichier.
  • Collez votre hachage MD5 dans MD5.txt, fermez et enregistrez le fichier.
  • Relancez votre hachage MD5 contre File1.ext pour vérifier qu'il n'a pas changé.
  • Relancez le Bloc-notes comme ci-dessus, pour vérifier la présence de l'ADS.

Encore une fois, les ADS sont gérés différemment par différents systèmes d'exploitation et systèmes de fichiers. Il est donc peu probable qu'ils traversent très bien Internet (ou même certains LAN ou sneakernets). Mais c'est une façon de faire ce que vous semblez vouloir faire.

Pour plus de détails, instructions ou utilitaires, consultez Google.

Vous pouvez également utiliser le nom de fichier pour stocker le hachage, qui est plus simple que ADS et traversera Internet.
Bruno
2011-05-16 16:42:58 UTC
view on stackexchange narkive permalink

Dans le cas général, non, car l'ajout de la somme MD5 modifierait le fichier lui-même et donc sa somme MD5, la plupart du temps ...

Cependant, pour les fichiers spécialement conçus, cela pourrait être possible, en utilisant une attaque par collision.

Il y a un exemple d'attaques par collision où deux fichiers PostScript sont conçus pour avoir la même somme MD5 ici (il y a aussi des références papier): http: // th .informatik.uni-mannheim.de / people / lucks / HashCollisions /

Vous pourrez peut-être utiliser la même approche pour générer un deuxième fichier qui contiendrait le contenu original, sa somme MD5 , et du contenu supplémentaire pour faire la collision.

cela ne me semble pas juste. Je pense que vous confondez les attaques par collision avec les attaques pré-image. Il y a des attaques par collision sur MD5, mais aucune attaque de pré-image connue sur MD5. Pour trouver un fichier qui contient son propre hachage, vous avez probablement besoin d'une sorte d'attaque de pré-image (je ne vois aucun moyen qu'une attaque de recherche de collision le fasse).
@D.W. Vous avez raison, ma formulation était probablement un peu forte. Je suggérais simplement qu'une approche similaire pourrait fonctionner, puisque les problèmes sont similaires dans une certaine mesure, mais je dois admettre que je ne l'ai pas examiné plus que cela.
paan
2011-05-16 17:00:57 UTC
view on stackexchange narkive permalink

Vous pourriez avoir quelque chose comme un format wrapper avec le MD5 dans une partie du fichier et le contenu réel dans une autre partie de celui-ci.

Cela serait inutile car si l'attaquant peut changer le contenu, il peut également changer le MD5 pour qu'il corresponde au nouveau contenu.

C'est pourquoi vous cryptez ensuite le hachage de la somme de contrôle MD5 avec votre clé privée - puisque vous seul pouvez avoir été celui qui a crypter cette somme de contrôle, si la somme de contrôle correspond au message, il est raisonnablement sûr de supposer que vous êtes celui qui a signé le message (et donc, qui l'a écrit)
@Shadur, juste un détail, mais vous _sign_ (pas _encrypt_) avec la clé privée.
@bruno Pour être précis, ladite «signature» est en fait un condensé de hachage - MD5 ou autre - de votre message * chiffré * avec la clé privée.
@Shadur, _signing_ a message se réfère en effet à _signing_ son résumé, mais vous ne le _cryptez_ (c'est-à-dire le rendez illisible). "Brouiller" ne signifie pas chiffrer. Cela n'a tout simplement aucun sens d'utiliser le verbe _encrypt_ avec une clé privée (qui sert à déchiffrer / déchiffrer et à signer). Il n'y a pas de secret dans la signature et son résumé.
KnightHawk
2015-04-09 20:23:21 UTC
view on stackexchange narkive permalink

En pensant un peu en dehors de la boîte, vous pouvez coder une variable pour stocker le md5 d'un fichier (le fichier exact) et ainsi, tandis que le md5 réel du fichier dans le texte plan ne sera pas inclus dans le fichier lui-même, si le fichier était du code exécutable qu'il pouvait être programmé pour stocker une valeur de son propre md5 en tant que variable.

Pour améliorer encore une telle idée (afin de lui donner une sorte de valeur utilisable), vous pouvez stocker le md5 dans un fichier séparé (créé à la fin) et sécurisez ce second fichier de telle manière que seul le premier fichier contienne une méthode raisonnable pour y accéder et pour le comparer avec la variable md5 précédemment calculée.

Le réel L'utilité d'une telle idée est probablement limitée uniquement à la capacité de vérifier que le fichier lui-même n'a pas été modifié et d'alerter d'une faille de sécurité qui s'est déjà produite plutôt que d'en empêcher une de se produire en premier lieu.

Pacerier
2015-05-23 22:27:34 UTC
view on stackexchange narkive permalink

Si vous n'avez pas besoin que les bits soient en séquence , alors bien sûr, c'est assez simple.

Ce fichier fonctionnera:

  1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 00 1 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 00 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 0 10 1 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0  

(Le fichier est affiché en binaire.)

Le md5sum de celui-ci est 5FADE2F41E1B9759DB92E54DB9519365 , ou en binaire:

  0 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 0 0 0 1 0 1 1 1 1 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 0 1 0 1 1 1 0 1 0 1 1 0 0 11 1 0 1 1 0 1 1 1 0 0 1 0 0 1 0 1 1 1 0 0 1 0 1 0 1 0 0 1 1 0 1 1 0 1 1 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 0 0 1 1 0 1 1 0 0 1 0 1  

La somme md5 est à l'intérieur du fichier (mais pas dans l'ordre). C'est le même fichier que ci-dessus, avec le md5sum affiché tel quel, tandis que les autres contenus sont remplacés par -:

  - 0 - 1 0 1 1 - 1 - 1 - 1 - - 1 - 0 1 0 - 1 - 1 0 1 - 1 1 - 1 0 0 - 0 1 - 0 1 - - 1 - 1 - 1 - 0 1 0 - 0 0 - - 0 - 0 - 1 1 - 1 - 1 - 0 0 - - 0 - 0 1 - - 1 - 0 1 - - 1 1 0 - 0 1 0 1 - - 1 1 0 - 1 - 0 1 - - 1 0 - 0 1 1 - - 1 - 0 1 - 1 0 - 1 1 - - 1 - 0 - 0- 1 0 - - 0 - 1 0 1 1 - - 1 0 - - 0 1 0 1 0 1 0 - 0 1 - 1 0 - 1 1 0 1 - 1 - - 1 - 0 - 0 - 1 - 0 - 1 0 1 - 0 0 - - 0 1 - 1 0 0 10 - 0 1 1 0 1 - - 1 - 0 0 1 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

Bien sûr, ce fichier fonctionnerait aussi:

  0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1  

La somme md5 est DB4C2CAB0A3E4320AB6CA03127F20937 . En binaire:

  1 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 1 1 0 0 0 0 1 0 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 01 0 1 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 1  

Et voici le md5sum vu dans le fichier:

  - 1 - 1 0 1 - 1 0 1 - 1 0 1 0 - 0 1 - 1 0 - 0 - 0 - 0 1 0 1 - 1 0 - 0 1 0 1 0 1 0 1 - 1 0 - 0 - 0 - 0 1 0 1 0 - 0 - 0 1 - 1 - 1- 1 - 1 0 - 0 1 0 - 0 - 0 - 0 1 - 1 0 - 0 1 0 - 0 - 0 - 0 - 0 1 0 1 0 1 0 1 - 1 0 1 - 1 0 1 - 1 0 - 0 1 0 1 0 - 0 - 0 - 0 - 0 - 0 - 0 1 - 1 0 - 0 - 0 1 0 - 0 1 0 - 0 1 - 1 - 1 - 1 - 1 - 1 - 1 0 - 0 1 0 - 0 - 0 - 0 - 0 1 0 - 0 1 0 - 0 1 - 1 0 1 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
S'ils ne doivent pas non plus être en ordre, alors `0000000 ... 00011111111 ... 111` fonctionne également.
@immibis, Oui, c'est le même que le deuxième exemple illustré, 128 "0" et 128 "1".
@Pacerier "Si vous n'avez pas besoin que les bits soient en séquence" Vous pouvez tout obtenir à partir d'un fichier, c'est génial!Si vous avez un gros fichier, vous pouvez extraire la discographie complète des Beatles et les œuvres complètes de Shakespeare!(faisant évidemment une cueillette parfaite de ses morceaux).Vous bascule!
JesseM
2017-07-27 03:52:58 UTC
view on stackexchange narkive permalink

[Est-il] possible de créer un fichier qui a sa somme md5 à l'intérieur ainsi que d'autres contenus.

Oui, et il est trivialement prouvable.

MD5 produit un espace fini [16 octets, ou 128 bits] de hachages de sortie possibles. Il prend, en entrée, un ensemble potentiellement infini de documents possibles contenant des valeurs de hachage MD5 potentielles, chacun produisant une valeur de hachage dans cet espace fini.

Par le principe de casier, il doit être un nombre infini de collisions [plusieurs documents avec la même valeur de hachage], et certains d'entre eux doivent contenir ce hachage.

Comme d'autres l'ont souligné, ce n'est pas pratique mais c'est possible.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...