it-swarm.dev

Quali sono le crittografie realistiche e più sicure per le cifre del codice di autenticazione simmetrica, asimmetrica, hash, dei messaggi?

Sono interessato ad aggiornare questa domanda a due punte per il 2011:

  1. Quale crittografia è più appropriata per i dispositivi a bassa potenza (come un cellulare), ma ancora efficace?

  2. Quale crittografia è più sicura per uno sviluppatore .NET?

Nel novembre del '08 Rasmus Faber ha risposto questo simile domanda Stack Overflow con questa risposta:

  • Cifra simmetrica: AES-256

  • Cifra asimmetrica: RSA con chiave a 4096 bit (credo che sia il massimo in .NET) o ECDSA con chiave a 571 bit (ma è supportato solo in .NET 3.5)

  • Hash: SHA-512

  • Codice di autenticazione del messaggio: HMAC con SHA-512

Detto questo, quelli sono eccessivi per la maggior parte delle applicazioni e dovresti fare bene usando AES-128, RSA con chiave a 2048 bit, SHA-256 e HMAC con SHA-256.

Queste raccomandazioni sono ancora vere oggi?

24

I consigli che citi sono un po 'esagerati. Un punto da tenere in considerazione è che al di là di un certo livello (ad es. Sulla dimensione della chiave o sulla dimensione dell'output della funzione hash), tutte le funzioni sono "infrangibili con la tecnologia prevedibile" ed è un po 'delicato confrontarle. Affermare che SHA-512 è "più robusto" di SHA-256 significa che stai immaginando che SHA-256 potrebbe essere rotto, il che, per quanto possiamo dire per ora e per i prossimi 40 anni, non è vero (oltre 40 anni , cercare di immaginare quale tecnologia potremmo avere è rischioso; 40 anni fa, nessuno immaginava Internet come è oggi, ma la maggior parte delle persone ha ipotizzato che entro il 2010 avremmo guidato tutte le macchine volanti).

AES-128 è già abbastanza sicuro e meno costoso (AES-256 utilizza 14 round, mentre AES-128 utilizza 10 round).

La chiave RSA attualmente più grande rotta è un modulo a 768 bit, e ci sono voluti enormi sforzi (quattro anni e cervelli davvero grandi). Le chiavi a 1024 bit sono considerate utilizzabili per la sicurezza a breve termine, sebbene siano incoraggiate chiavi più grandi. Le chiavi a 2048 bit sono appropriate. L'uso di una chiave due volte più grande significa 8 volte più lavoro per la firma o la decrittazione, quindi non si vuole esagerare. Vedi questo sito per un sondaggio su come la lunghezza della chiave RSA può essere correlata alla sicurezza.

L'ECDSA su una curva a 256 bit raggiunge già un livello "indistruttibile" di sicurezza (ovvero all'incirca allo stesso livello di AES con una chiave a 128 bit o SHA-256 contro le collisioni). Nota che ci sono curve ellittiche sui campi primi e curve sui campi binari; quale tipo è più efficiente dipende dall'hardware interessato (per curve di dimensioni simili, un PC preferirà le curve su un campo primo, ma l'hardware dedicato sarà più facile da costruire con campi binari; il CLMUL le istruzioni sui più recenti processori Intel e AMD potrebbero cambiarlo).

SHA-512 utilizza operazioni a 64 bit. Questo è veloce su un PC, non così veloce su una smart card. SHA-256 è spesso un affare migliore su hardware di piccole dimensioni (comprese architetture a 32 bit come router domestici o smartphone).

Al momento, i sistemi RFID a basso costo sono troppo a basso consumo per utilizzare uno dei precedenti (in altre parole, i sistemi RFID che non possono essere così economici come potrebbero essere). I sistemi RFID utilizzano ancora algoritmi personalizzati di sicurezza spesso discutibile. I cellulari, d'altra parte, hanno abbastanza potenza della CPU sufficiente per eseguire una corretta crittografia con AES o RSA (sì, anche telefoni non intelligenti a basso costo).

38
Thomas Pornin

La risposta citata è la mia risposta a ciò che è il più sicuro cripto in .NET.

Il mio raccomandazioni (sia per dispositivi ad alta che a bassa potenza):

  • Cifra simmetrica: AES-128

  • Cifra asimmetrica: RSA con chiave a 2048 bit o ECDSA/ECDH con chiave a 256 bit

  • Hash: SHA-256

  • Codice di autenticazione del messaggio: HMAC con SHA-256

  • Crittografia stream: AES-128 in modalità CTR

11
Rasmus Faber

In termini di sicurezza, queste raccomandazioni sono ancora valide e lo stesso che farei.

Per le cifre asimmetriche, ci sono davvero tre cose che ti interessano: crittografia, scambio di chiavi e firme. RSA può essere sia uno schema di crittografia che una firma, mentre ECDSA è specificamente una firma. Tuttavia, esistono anche versioni con curva ellittica di crittografia e scambio di chiavi (non sono sicuro di cosa sia di dominio pubblico). Detto questo, le dimensioni dei parametri sono le stesse per tutti e tre.

L'unico altro cavet è che SHA-256/512 sarà presto sostituito ma "presto" in questo caso sarà il 2012.

Per quanto riguarda la bassa potenza, dipende davvero da quanto a bassa potenza. Se per cellulare, intendi uno smartphone, tutti questi sono appropriati. Per una smartcard, RFID, rete di sensori, ecc. È una storia diversa. Inoltre, la maggior parte degli algoritmi a bassa potenza non si troveranno in una libreria standard. Tuttavia, ti indirizzerei verso le dimensioni dei parametri nell'ultima frase "non eccessivo".

6
PulpSpy

Per sicurezza fino all'anno 2030, gli esperti di NIST raccomandano di utilizzare almeno SHA-224, 2048 bit per RSA o DSA, EDCSA a 224 bit e AES-128 o 3-triple a 3 tasti.

Sulla base del loro lavoro, alla fine del 2010, il governo degli Stati Uniti deprezza questi algoritmi: SHA-1, RSA o DSA a 1024 bit, ECDSA a 160 bit (curve ellittiche), 2TDEA a 80/112-bit (tripla DES a due chiavi )

Per maggiori informazioni, vedi questo post e i documenti NIST a cui fa riferimento: http://securitymusings.com/article/1587/algorithm-and-key-length-deprecation

6
nealmcb

Cryptographic Right Answers di Colin Percival nel 2009 è ancora abbastanza aggiornato IMHO e copre la domanda e altro ancora.

5
Bruno Rohée

Per le cifre simmetriche, potrebbe essere meglio usare AES-128 invece di AES-256 a causa di possibili punti deboli nel programma chiave per AES-256: http://www.schneier.com/blog/archives/2009/ 07/another_new_aes.html

2
Justin Clarke

Quello che abbiamo fatto è stato selezionare diversi metodi di crittografia e hash e convertire tutto l'output in un formato esadecimale comune. I nostri dati più sensibili stanno usando SHA-256 e DES-3, mentre i dati meno sensibili che possono essere indovinati facilmente stanno usando MD5 e RC4 e stiamo usando anche una conversione diretta XOR per alcune cose. Ogni cifra simmetrica ha la propria password e tutti i dati crittografati sono codificati con un check-sum. Affidarsi a una crittografia per tutto è pericoloso.

0
Dave