Quali sono le crittografie realistiche e più sicure per le cifrature Symmetric, Asymmetric, Hash, Message Authentication Code?

21

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), e tuttavia ancora efficace?

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

Nel novembre del 2008 Rasmus Faber ha risposto questa domanda Stack Overflow simile con questa risposta:

  • Symmetric cipher: AES-256

  • Asymmetric cipher: RSA with 4096 bit key (I believe that is the maximum in .NET) or ECDSA with 571 bit key (but that is only supported in .NET 3.5)

  • Hash: SHA-512

  • Message Authentication Code: HMAC with SHA-512

That being said, those are overkill for most applications, and you should do fine using AES-128, RSA with 2048 bit key, SHA-256 and HMAC with SHA-256.

Queste raccomandazioni sono ancora vere oggi?

    
posta random65537 19.01.2011 - 23:40
fonte

7 risposte

35

I consigli che citi sono una specie di eccessivo. Un punto da tenere in considerazione è che oltre un certo livello (ad esempio, sulla dimensione della chiave o sulla dimensione dell'output della funzione hash), tutte le funzioni sono "indistruttibili con la tecnologia prevedibile" ed è un po 'delicato confrontarle. Dichiarando 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 , cercando di immaginare quale tecnologia potremmo avere è rischiosa: 40 anni fa nessuno immaginava Internet come è oggi, ma la maggior parte della gente pensava che entro il 2010 avremmo tutti guidato su macchine volanti).

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

La chiave RSA attualmente più grande è un modulo a 768 bit e ci sono voluti alcuni sforzi enormi (quattro anni e un cervello davvero grande). Le chiavi da 1024 bit sono considerate utilizzabili per la sicurezza a breve termine, sebbene siano consigliate chiavi più grandi. Le chiavi da 2048 bit sono appropriate. L'uso di una chiave due volte più grande significa 8 volte più lavoro per la firma o la decrittografia, 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 di sicurezza "indistruttibile" (ossia all'incirca allo stesso livello di AES con una chiave a 128 bit, o SHA-256 contro le collisioni). Si noti che esistono curve ellittiche su campi primi e curve su campi binari; il tipo più efficiente dipende dall'hardware coinvolto (per curve di dimensioni simili, un PC preferirà le curve su un campo primario, ma l'hardware dedicato sarà più facile da costruire con i campi binari; il CLMUL le istruzioni sui nuovi processori Intel e AMD potrebbero cambiare).

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

In questo momento, i sistemi RFID a basso costo sono troppo bassi per utilizzare uno dei sistemi sopra citati (in altre parole, i sistemi RFID che non sono 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 per fare la crittografia corretta con AES o RSA (sì, anche telefoni non intelligenti economici).

    
risposta data 20.01.2011 - 00:29
fonte
10

La risposta citata è la mia risposta a quella che è la crittografia più sicura in .NET.

I miei consigli (sia per dispositivi ad alta e bassa potenza):

  • Codice simmetrico: AES-128

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

  • Hash: SHA-256

  • Codice di autenticazione dei messaggi: HMAC con SHA-256

  • Codifica stream: AES-128 in modalità CTR

risposta data 20.01.2011 - 10:39
fonte
5

In termini di sicurezza, queste raccomandazioni sono ancora valide e lo stesso vorrei fare.

Per i cifrari asimmetrici, ci sono davvero tre cose che ti riguardano: crittografia, scambio di chiavi e firme. RSA può essere sia uno schema di crittografia e firma, mentre ECDSA è specificamente una firma. Tuttavia ci sono anche versioni di curve ellittiche di crittografia e scambio di chiavi (non sono sicuro di ciò che è nel pubblico dominio). Detto questo, le dimensioni dei parametri sono le stesse per tutti e tre.

L'unica altra cavità è che SHA-256/512 sarà presto sostituito ma "presto" in questo caso sarà il 2012.

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

    
risposta data 20.01.2011 - 00:09
fonte
5

Per motivi di sicurezza durante l'anno 2030, gli esperti del NIST raccomandano almeno SHA-224, 2048 bit per RSA o DSA, 224 bit EDCSA e AES-128 o 3-triple triple DES.

Sulla base del loro lavoro, a partire dalla fine del 2010, il governo statunitense deprezza questi algoritmi: SHA-1, RSA a 1024 bit o DSA, ECDSA a 160 bit (curve ellittiche), 80/112-bit 2TDEA (due tasto triplo DES)

Per maggiori informazioni, vedi questo post e i documenti del NIST a cui fa riferimento: link

    
risposta data 20.01.2011 - 17:03
fonte
4

Risposte critiche crittografiche di Colin Percival nel 2009 è ancora carino molto aggiornato IMHO e copre la domanda e altro ancora.

    
risposta data 07.04.2011 - 17:47
fonte
1

Per i cifrari simmetrici, potrebbe essere meglio utilizzare AES-128 anziché AES-256 a causa di possibili punti deboli nella pianificazione delle chiavi per AES-256: link

    
risposta data 20.01.2011 - 00:16
fonte
0

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

    
risposta data 20.01.2011 - 00:56
fonte

Leggi altre domande sui tag