2010-05-13 18 views
8

Sto cercando di implementare la crittografia SHA-2 anziché SHA-1.Crittografia SSL, SHA-1 e SHA-2

Per questo, so che il numero di bit tra questi due algoritmi di hash è diverso e mi confonde.

Come è possibile ottenere questo e in quali parti è necessario apportare le modifiche richieste?

Posso usare qualsiasi libreria open source da Java, Python e qualsiasi altro linguaggio di programmazione principale.

+0

Quali SHA-2 algoritmo ti interessano? –

+0

In realtà non importa finché si tratta di un algoritmo SHA-2 :) Riguarda – Hellnar

+0

Che cosa ha a che fare questo con SSL? –

risposta

30

Prima di tutto, né SHA-1 né qualsiasi cosa correlata a SHA-2 è un algoritmo di "crittografia". Sono funzioni hash. In SSL, le funzioni di hash sono utilizzate principalmente per l'integrità, non la riservatezza, attraverso la costruzione HMAC. Una funzione di hash prende un input di lunghezza arbitraria e produce un output con una lunghezza fissa, che è una sorta di "digest" dei dati di input; l'operazione è destinata a non essere reversibile.

Una funzione di hash è "pubblica": non ci sono dati riservati, nessuna chiave; tutti possono calcolare l'output della funzione hash su ogni dato input. Un "codice di autenticazione del messaggio" (MAC) è un tipo di "hash con chiave": una chiave segreta (cioè un numero arbitrario di bit) viene anche inserita nel processo, in modo tale che la conoscenza della chiave sia necessaria per (ri) calcolare l'uscita MAC. Viene usato per i controlli di integrità (il mittente usa la chiave per calcolare il MAC, il ricevitore usa la chiave per ricalcolare il MAC, se il MAC corrisponde, allora i dati sono corretti, perché un utente malintenzionato, non conoscendo la chiave, non poteva avere alterato i dati e calcolato un MAC valido sui dati modificati).

HMAC è una costruzione che trasforma una funzione di hash (come SHA-1) in un MAC. TLS (che è il nome standard corrente di SSL) utilizza HMAC. L'output di HMAC, se utilizzato con una determinata funzione di hash h, ha la stessa dimensione dell'output di h. Tale output può essere convenzionalmente troncato: HMAC/SHA-1 produce nominalmente un output a 160 bit, ma è consuetudine, in alcuni protocolli, mantenere solo i primi 96 bit. Tale troncamento non si verifica in SSL.

Lo standard FIPS 180-3 definisce cinque funzioni di hash, denominate SHA-1, SHA-224, SHA-256, SHA-384 e SHA-512, con lunghezze di uscita rispettivamente di 160, 224, 256, 384 e 512 bit. Le funzioni SHA-224, SHA-256, SHA-384 e SHA-512 sono colloquialmente denominate "SHA-2", quindi "SHA-2" non è una funzione, ma una famiglia di quattro funzioni hash.

La specifica definisce TLSsuite di cifratura. Una suite di crittografia è un insieme di algoritmi crittografici che il client e il server concordano durante la fase iniziale della connessione (la "stretta di mano"). Tra gli algoritmi c'è il MAC da utilizzare per garantire l'integrità dei dati. Alcune delle suite di crittografia standard specificano che il MAC deve essere "HMAC con SHA-256", cioè qualcosa che utilizza una delle funzioni SHA-2.

Quindi la risposta alla tua domanda è: "basta configurare il client e il server per utilizzare uno dei pacchetti di crittografia con HMAC/SHA-256". Se la tua implementazione SSL non supporta tali suite di cifrari, dovrai modificarla, il che implicherà la comprensione abbastanza completa di come funziona SSL; sarà necessario leggere e comprendere l'intera RFC 5246.

+3

Mi sono appena un po 'male pensando alla RFC 5246. Non credo che sia una notte di lettura facile e divertente? –

1

Per quanto posso vedere, tutto ciò che è necessario sapere per implementare SHA256 in SSL è trattato in RFC 5246.

Ma ho il sospetto che tu non abbia mai capito abbastanza crittografia per farlo ... SHA 2 non esiste, stai cercando SHA256, SHA384 o SHA512, e non è un algoritmo di crittografia, ma piuttosto un funzione di hash crittografica.

Quindi, cosa stai cercando di fare?

1

Sono sicuro che vedrete sempre più questa domanda. GoDaddy ora ha un'opzione quando si invia una richiesta di firma del certificato, per specificare se si sta utilizzando SHA1 o SHA2.

Questa è stata una lettura interessante qui però. Sapevo praticamente cosa stava chiedendo e come forzare il mio server a usare un cifrario che usava l'uno o l'altro. Non sono sicuro di sapere esattamente quale fosse la differenza o perché sarebbe meglio usare l'una o l'altra però.

0

provare questo, funziona per WebLogic SQL Authenticator

public static void main(String args[]) throws NoSuchAlgorithmException { 
String password="abcdef"; 
System.out.println("{SHA-1}" + new sun.misc.BASE64Encoder().encode(java.security.MessageDigest.getInstance("SHA1").digest(password.getBytes()))); 
}