Pourquoi la sortie de l'algorithme MacTripleDes dans PowerShell n'est-elle pas stable?

14

Je vérifie les hachages de fichiers en utilisant plusieurs algorithmes différents dans PowerShell. Lorsque j'utilise MacTripleDes, j'obtiens toujours des hachages différents. Tous les autres, tels que SHA256 ou MD5 donnent toujours des réponses fiables. Vous pourrez peut-être reproduire le problème sur votre propre ordinateur:

"this is a test" | out-file test.txt
get-filehash test.txt -algorithm sha256
get-filehash test.txt -algorithm sha256
get-filehash test.txt -algorithm mactripledes
get-filehash test.txt -algorithm mactripledes

J'obtiens les mêmes valeurs de hachage pour les deux premiers hachages, mais des valeurs différentes pour les deux seconds hachages. MacTripleDes est-il censé être utilisé différemment?

Algorithm       Hash                                                                   Path                                                                                                                      
---------       ----                                                                   ----                                                                                                                      
SHA256          3F8CB2CDF03347329CAB0C80A6CE3B01EF3B17AF02E0F6E101FA67CE63729F51       C:\temp\test.txt                                                                                                          
SHA256          3F8CB2CDF03347329CAB0C80A6CE3B01EF3B17AF02E0F6E101FA67CE63729F51       C:\temp\test.txt                                                                                                          
MACTRIPLEDES    904D74A529C7A739                                                       C:\temp\test.txt                                                                                                          
MACTRIPLEDES    AF720778A2C878A2                                                       C:\temp\test.txt   
user6722022
la source
3
MACTripleDES est un algorithme de hachage à clé . L' Get-FileHashapplet de commande ne semble pas prendre en charge un paramètre clé.
jscott
Cela ressemble à un bug. Ce commentaire semble donc être la meilleure réponse. Mais je ne vois pas comment le marquer comme tel.
user6722022

Réponses:

18

MACTripleDES est différent des autres algorithmes proposés par l' Get-FileHashapplet de commande. Pour être honnête, je ne sais pas pourquoi il a été inclus dans l'applet de commande. Ça ne correspond pas aux autres, OMI.

SHA1, SHA256, MD5, RIPEMD, etc., ce sont toutes des fonctions de hachage normales. Ils prennent des données de longueur arbitraire et créent un condensé de longueur fixe qui représente ces données. MACTripleDES est différent cependant, en ce qu'il ne s'agit pas seulement d'un algorithme de hachage. Il a TripleDES dans le nom et 3DES est un algorithme de cryptage, pas un algorithme de hachage. La plus grande différence entre les fonctions de hachage et les fonctions de cryptage est que le cryptage peut être inversé avec une clé. Les hachages sont des fonctions à sens unique.

Et MAC signifie code d'authentification de message. C'est un code utilisé pour authentifier un message. Pour vérifier qu'il n'a pas été altéré. Les MAC sont conçus pour être éphémères ou uniques d'un message à l'autre.

Découvrez le constructeur :

 public MACTripleDES() {
        KeyValue = new byte[24]; 
        Utils.StaticRandomNumberGenerator.GetBytes(KeyValue);

        // Create a TripleDES encryptor 
        des = TripleDES.Create();
        HashSizeValue = des.BlockSize; 

        m_bytesPerBlock = des.BlockSize/m_bitsPerByte;
        // By definition, MAC-CBC-3DES takes an IV=0.  C# zero-inits arrays,
        // so all we have to do here is define it. 
        des.IV = new byte[m_bytesPerBlock];
        des.Padding = PaddingMode.Zeros; 
        ...

StaticRandomNumberGenerator génère des nombres aléatoires ... des nombres aléatoires signifient que le résultat sera différent à chaque exécution.

Ryan Ries
la source
Oui, c'est assez inutile ici. Dans une utilisation appropriée, vous passeriez soit une clé connue dans le constructeur, soit vous récupérez la clé aléatoire de l' KeyedHashAlgorithmobjet. Mais il n'y a aucun moyen de faire non plus avec Get-FileHash...
Bob
1
Si Get-FileHashne vous permet pas de spécifier la clé à utiliser et génère à la place une clé aléatoire qu'il n'expose jamais à l'utilisateur, cela semble être un bogue (selon le titre original de la question) car vous ne pouvez pas réellement utiliser pour rien. (Pas que je comprenne pourquoi vous choisiriez MACTripleDES en premier lieu si vous vouliez un MAC.)
Håkan Lindqvist
@ HåkanLindqvist Je vois votre point, mais cela dépend de votre définition d'un bug. Si le code fait ce qu'il était censé faire, même s'il fait quelque chose de complètement inutile , ce n'est toujours pas un bug dans mon livre. Il s'agit d'une demande de modification de conception, c'est-à-dire "Veuillez modifier l'applet de commande afin qu'elle fasse réellement quelque chose d'utile." :)
Ryan Ries
@RyanRies Même alors, est-il vraiment raisonnable de supposer que cela est prévu? Y a-t-il autre chose que le code lui-même et son comportement qui soutiennent l'idée que l'option de l'algorithme MACTripleDES Get-FileHashdevrait être une forme de RNG alambiqué?
Håkan Lindqvist