Ho scoperto che uno strumento di crittografia crittografa e memorizza la passphrase immessa dall'utente e utilizzata per generare la chiave AES oltre al payload crittografato.
Pseudocodice:
key = md5(passphrase)
iv = 0
cipher = Cipher(key, "AES/CBC/PKCS7", iv)
encryptedpayload = cipher.encrypt(payload)
cipher = Cipher(key, "AES/CBC/PKCS7", iv)
encryptedpassphrase = cipher.encrypt(passphrase + chr(0))
// Write encryptedpayload and encryptedpassphrase Base64 encoded to file
Il motivo per archiviare la frase crittografata è che lo strumento lo utilizza per decidere se la passphrase specificata per la decrittografia è quella corretta, quindi l'utente può essere avvisato se la passphrase è sbagliata.
Se AES è un modo sicuro per crittografare qualsiasi informazione, non ci dovrebbero essere problemi per crittografare la passphrase, tuttavia ho un brutto presentimento.
Soprattutto perché non c'è sale usato e IV è sempre impostato su 0.
E la lunghezza della passphrase cifrata fornisce alcune informazioni sulla lunghezza della passphrase (se è lunga 16 byte, la passphrase non può essere più lunga di 15 byte a causa del byte 0 aggiunto prima della crittografia).
Quindi mi piacerebbe sapere se questo schema di crittografia è valido o dovrebbe essere evitato questo strumento?
E qual è la procedura migliore per rilevare se la passphrase inserita è quella corretta per decrittografare il testo cifrato?