Sfondo: il comando scrypt
di Tarsnap utilizza la crittografia AES implementata dal proprio libcperciva . L'algoritmo scrypt viene utilizzato come funzione di derivazione della chiave .
Il bello: l'algoritmo di scrypt è una delle funzioni di derivazione della chiave, se non la più crittograficamente sicura, che conosciamo. Ciò significa che durante un attacco di tipo brute-force, il calcolo della chiave dalle possibili password sarà molto costoso. scrypt
usa anche un sale di 32 byte durante la creazione della chiave. Da scryptenc.c :
crypto_entropy_read(salt, 32)
Offre protezione contro le tabelle arcobaleno.
L'insolito: scrypt
L'implementazione di AES avviene tramite il proprio libcperciva . Questa è un'implementazione personalizzata scritta da, e nominata per, Colin Percival, il fondatore di Tarsnap e autore dell'algoritmo scrypt . Mentre le implementazioni di crittografia homegrown sono generalmente considerate meno sicure, un'implementazione di scrypt da parte dell'autore, un autore piuttosto famoso, può essere un controesempio. Quindi è necessario confrontare i vantaggi che l'autore porta all'implementazione per il fatto che la libreria non è comunemente usata (ad esempio: ha una bassa statistiche Github , mancanza di visibilità in OpenHUB e solo 1K hit in Google ).
Riepilogo: È chiaro che l'utilizzo dell'algoritmo scrypt con un strong salt come funzione di derivazione chiave è una strategia crittograficamente sicura. Esiste il rischio di utilizzare l'implementazione di AES per uso domestico, sebbene ciò sia in qualche modo mitigato dall'abilità del suo autore. Ti rimangono tre opzioni che sembrano tutte scelte ragionevoli:
-
Se si desidera uno strumento di crittografia AES a riga di comando che utilizza la funzione scrypt per la derivazione delle chiavi, si può considerare di scrivere il proprio utilizzando un'implementazione AES ben testata.
-
Puoi utilizzare l'algoritmo di allungamento della chiave bcrypt , rendendolo più sicuro aumentando la lunghezza della password casuale che usi. Ciò significa che c'è di più da ricordare, ma fornisce una quantità nota e misurabile di sicurezza (rispetto alle incognite di libcperciva
).
-
Puoi fidarti dell'attuazione di Colin Percival e usarla così com'è. Non mi sognerei di suggerire questo per la maggior parte delle persone, ma non stiamo parlando della maggior parte delle persone.
Nota: grazie a @StephenTouset per aver segnalato la notorietà di Colin Percival.