SHA1 / PBKDF2-HMAC-SHA1 è indissociabile dai dati casuali?

3

Voglio assicurarmi che il risultato di PBKDF2-HMAC-SHA1 sia indissociabile da dati casuali (dati parametri casuali). Fondamentalmente, PBKDF2-HMAC-SHA1 ha l'aspetto di un hash di SHA-1 più grande, il che è normale dato che la funzione pseudocasuale usata è SHA-1 come suggerisce il nome.

./pkcs5 -i 1 -s RANDOM_SALT -p RANDOM_PAYLOAD -l 20
c8ddde91936a728445e238badde1ef7e94de5b36

Strumento utilizzato: dzmitryk / pkcs5.c

Si noti che è stampato in formato HEXADECIMAL, quindi l'output appare come dati binari casuali. C'è qualche prova scientifica che SHA-1 possa difficilmente essere differenziato dai dati casuali?

& stessa domanda per SHA-256.

Perché lo sto chiedendo?

Perché Plain dm-crypt ha diversi svantaggi rispetto a LUKS:

  • La password non è modificabile senza ricodificare l'intero disco
  • È possibile utilizzare una sola password
  • La chiave di crittografia del disco è derivata dalla password senza sale
  • Una semplice partizione dm-crypt può sembrare casualmente un filesystem non criptato e ha la possibilità di essere scritta accidentalmente.

Ma LUKS ha un grosso difetto: è non deniabile . Quindi, cercando di raggiungere questo obiettivo, le persone utilizzano le chiavi USB con file di chiavi non crittografati (orribili) o con l'intestazione LUKS scollegata (non negabile se l'avversario trova la chiave USB ...). C'è qualcosa di sbagliato in questi approcci.

Quindi sto cercando di mantenere il meglio dell'intestazione LUKS e di creare "No NO Intestazione " LUKS che sarebbe indissociabile da dati casuali (quindi DENIABLE), contenente solo:

  • I keyload della chiave cifrati di chiavi LUKS - risultato di AES in modo casuale
  • I sali LUKS - puro casuale
  • Il sommario masterkey LUKS - risultato di su PBKDF2-HMAC-SHA1

Tutto il resto (modalità di crittografia, lunghezza della chiave, ecc.) utilizza i valori predefiniti come hardcoded nel comando GRUB cryptomount o facilmente parametrizzabile dalla riga di comando.

EDIT: domande correlate sulla crittografia StackExchange:

posta KrisWebDev 02.04.2016 - 01:04
fonte

1 risposta

4

Esistono prove scientifiche, il che significa che le informazioni sono sicure? No, tuttavia non esiste un modo noto per distinguere l'output di un buon hash crittograficamente sicuro da dati casuali della stessa lunghezza. Qualcuno può probabilmente intuire che qualcosa è SHA-1 se è 160 bit, perché la maggior parte dei blocchi di 160 bit dall'aspetto casuale tendono a essere diger SHA-1, o talvolta RIPEMD-160, ma non ha nulla a che fare con il contenuto del digerire, solo la dimensione.

Si noti che in futuro potrebbero esserci nuove tecniche matematiche scoperte (inventate?) che trovano un pregiudizio nei digest SHA-1 o SHA-256. Potrebbe essere così accademico da sembrare quasi sciocco ("dopo 10 91 testi in chiaro, quindi con 10 91 operazioni e 10 91 memoria, puoi calcolare quale sarà il sesto bit con una probabilità più alta del 0.05% rispetto al caso ") a assolutamente devastante (" un attacco preimage in SHA-256 può essere ottenuto con un hardware di consumo di 5000 $ e un programma di 300 linee C in un paio di settimane "). Mentre ovviamente quest'ultimo è molto meno probabile, entrambi possono accadere. Non possiamo sapere quale sarà, e non abbiamo modo di prevederlo. Tuttavia puoi probabilmente stare tranquillo sapendo che per la stragrande maggioranza degli attacchi di distinzione della casualità (la capacità di dire quando i dati pseudocasuali non sono casuali) richiede un vero vasto numero di campioni, probabilmente molto più di quanto mai crittografato nella tua vita.

Ci sono alcune eccezioni, come RC4 che ha un bias nei primi bit, cifrate con blocchi di 64 bit come Blowfish e CAST5 che mostrano la distinguibilità dopo diversi gigabyte e cifrano i blocchi in xts-plain mode che prendono un pochi terabyte di dati crittografati con la stessa chiave per causare problemi, ma non sono la regola.

Se sei ancora preoccupato, dovresti sapere che il kernel Linux, che è invocato per sicurezza in miliardi di dispositivi in tutto il mondo, genera casualità mescolando un pool usando SHA-1 ed esportando i valori hash in /dev/random e /dev/urandom , che producono entrambi dati casuali di eccezionale qualità. Se lo SHA-1 non fosse estremamente affidabile, non sarebbe usato in modo così onnipresente (si noti che l'SHA-1 che finisce alla fine della sua vita per proteggersi dalle collisioni nei certificati non ha alcun effetto sulla sua capacità di apparire casuale). Nel caso ti stia chiedendo, non c'è alcun motivo di sicurezza che stia usando il mix hash invece di un codice di streaming. Ha usato SHA-1 per aggirare le leggi sulle restrizioni delle esportazioni ormai obsolete, e si è appena bloccato. Altri sistemi come OSX e FreeBSD usano Yarrow, OpenBSD usa ChaCha20, ecc, ma SHA-1 è altrettanto sicuro, per quanto ne sappiamo. Molto più lento da mixare!

Perché non usi solo TrueCrypt? Supporta la negabilità plausibile, che sembra essere ciò che si cerca, e sia cryptsetup che cryptomount di GRUB2 lo supportano. Cryptsetup lo converte nativamente in mapping dm-crypt, proprio come LUKS.

    
risposta data 02.04.2016 - 02:20
fonte

Leggi altre domande sui tag