Differenza tra la crittografia MD4 e MD5

0

Durante la codifica, ho utilizzato entrambe le tecniche di crittografia MD4 e MD5. Ma non c'è stata alcuna differenza di sicurezza evidente tra nessuno di loro. Eppure, molti preferiscono MD5, in effetti lo specificano. MD5:

System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();

byte[] TDESKey = null;

TDESKey = HashProvider.ComputeHash(UTF8.GetBytes("CXPUB001"));  // ASYNC PRIVATE KEY CODE FOR DATA ENCRYPTION

//DATA ENCRYPTION 
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey; //SENDER KEY APPENDED
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] DataToEncrypt = UTF8.GetBytes(Message);

Quindi, qual è la differenza, per quanto riguarda la sicurezza, tra l'uso di MD4 e MD5?

    
posta SandyShores 27.10.2014 - 10:53
fonte

2 risposte

17

MD4 e MD5 sono non algoritmi di crittografia . Sono hash unidirezionale funzione progettato per la crittografia . È importante che tu capisca la differenza.

MD5 è una versione leggermente modificata di MD4 che alquanto migliora la sua sicurezza .

Un'altra cosa che è importante capire è che nessuna di queste funzioni è considerata sicura per l'uso in crittografia: MD4 è stato considerato molto insicuro dall'inizio degli anni '90 e MD5 è noto per non essere sicuro dall'inizio del del 2000.

A meno che tu non debba utilizzare queste funzioni per motivi di compatibilità, non usarle nel tuo codice, specialmente MD4 .

Se puoi, utilizza una delle varianti SHA-2 (il .NET Framework completa tutti loro ) o, se puoi 't, almeno usa SHA-1 temporaneamente, che è teoricamente vulnerabile ma per il quale non esiste ancora un attacco pratico . Tuttavia, è necessario capire che il supporto per SHA-1 sta andando via in molti sistemi molto presto.

    
risposta data 27.10.2014 - 11:16
fonte
5

most of them prefer MD5, in fact specify it

Bene, MD5 è semplicemente una funzione di hash crittografica gravemente spezzata, mentre MD4 è una funzione di hash crittografica comicamente, egregiamente mega-rotta. (3DES è un po 'rotto anche FWIW.)

Tuttavia, oltre allo sfondo nella risposta di Stephane:

TDESKey = HashProvider.ComputeHash(UTF8.GetBytes("CXPUB001"));

Nel tuo caso la differenza tra MD4 e MD5 probabilmente non ha importanza perché non sembra che tu stia usando l'hash per scopi crittografici. Lo stai solo utilizzando come funzione di derivazione della chiave di utilità per ottenere da una password di lunghezza variabile a un array di byte a larghezza fissa adatto per l'uso come materiale chiave.

In questo caso non ci sarebbe alcuna misura di sicurezza fornita dall'hash che potrebbe essere compromessa dalla debolezza dell'hash. Se vuoi che questa sia una misura di sicurezza (ad esempio, anticipi che un utente malintenzionato potrebbe avere TDESKey e non vuoi che sia in grado di ricavare il "CXPUB001" da esso rapidamente), allora ti occorrerebbe molto più strong / forma più lenta di hash rispetto a MD4 o MD5.

TDESAlgorithm.Mode = CipherMode.ECB;

Sì, non sembra promettente, e nemmeno l'apparente mancanza di firma. Se questa è una vera applicazione, dovresti probabilmente prendere in considerazione l'utilizzo di alcuni criptosistemi già conosciuti. Vedi il spesso citato Se stai digitando le lettere AES nel tuo codice. .. , il cui esempio "cattivo" è quasi esattamente quello che stai facendo.

    
risposta data 27.10.2014 - 19:51
fonte

Leggi altre domande sui tag