Perché l'output dell'algoritmo MacTripleDes in PowerShell è stabile?


14

Sto verificando gli hash dei file usando diversi algoritmi in PowerShell. Quando uso MacTripleDes, ottengo sempre hash diversi. Tutti gli altri, come SHA256 o MD5, danno sempre risposte affidabili. Potresti riuscire a replicare il problema sul tuo computer:

"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

Ottengo gli stessi valori di hash per i primi due hash, ma valori diversi per i secondi due hash. MacTripleDes dovrebbe essere usato in modo diverso?

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   

3
MACTripleDES è un algoritmo di hashing con chiave . Il Get-FileHashcmdlet non sembra supportare un parametro chiave.
jscott,

Sembra un bug. Quindi questo commento sembra essere la risposta migliore. Ma non vedo come contrassegnarlo come tale.
user6722022

Risposte:


18

MACTripleDES è diverso dagli altri algoritmi offerti dal Get-FileHashcmdlet. Non sono sicuro del perché sia ​​stato incluso nel cmdlet, a dire il vero. Non si adatta agli altri, IMO.

SHA1, SHA256, MD5, RIPEMD, ecc., Sono tutte funzioni hash regolari. Prendono alcuni dati di lunghezza arbitraria e creano un digest di lunghezza fissa che rappresenta quei dati. MACTripleDES è diverso però, in quanto non è solo un algoritmo di hash. Ha TripleDES nel nome e 3DES è un algoritmo di crittografia, non un algoritmo di hashing. La più grande differenza tra le funzioni hash e le funzioni di crittografia è che la crittografia può essere invertita con una chiave. Gli hash sono funzioni a senso unico.

E MAC sta per codice di autenticazione dei messaggi. È un codice utilizzato per autenticare un messaggio. Per verificare che non sia stato manomesso. I MAC sono progettati per essere effimeri o unici da un messaggio all'altro.

Dai un'occhiata al costruttore :

 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 genera numeri casuali ... numeri casuali indicano che il risultato sarà diverso ad ogni corsa.


Sì, è abbastanza inutile qui. Se usato correttamente, passeresti una chiave nota nel costruttore o recupereresti la chiave casuale KeyedHashAlgorithmdall'oggetto. Ma non c'è modo di fare neanche con Get-FileHash...
Bob,

1
Se Get-FileHashnon ti consente di specificare la chiave da utilizzare e genera invece una chiave casuale che non espone mai all'utente, questo sembra essere un bug (secondo il titolo originale della domanda) in quanto non puoi effettivamente utilizzare per qualsiasi cosa. (Non che io capisca perché dovresti scegliere MACTripleDES in primo luogo se volessi un MAC.)
Håkan Lindqvist,

@ HåkanLindqvist Vedo il tuo punto, ma dipende dalla tua definizione di bug. Se il codice fa quello che doveva fare, anche se fa qualcosa di assolutamente inutile , non è ancora un bug nel mio libro. È una richiesta di modifica del design, ad esempio "Modifica il cmdlet in modo che faccia effettivamente qualcosa di utile." :)
Ryan Ries il

@RyanRies Anche allora, è davvero ragionevole presumere che ciò sia inteso? C'è nient'altro che il codice stesso e il suo comportamento che supportano l'idea che l'opzione dell'algoritmo MACTripleDES Get-FileHashdovrebbe essere una qualche forma di RNG contorto?
Håkan Lindqvist,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.