Use PBKDF2 with HMAC-SHA1 for master passphrase in clawsrc.
[claws.git] / doc / src / password_encryption.txt
index 76a8c9e..4709f55 100644 (file)
@@ -16,7 +16,6 @@ IV for the cipher is filled with random bytes.
 
 Encryption
 ----------
-
 We prepare a buffer 128+blocksize bytes long, with one block of random
 data at the beginning, followed by the password we want to encrypt,
 rest is padded with zero bytes.
@@ -40,8 +39,23 @@ with our password.
 
 Why the random block at the beginning?
 --------------------------------------
-
 We are taking advantage of property of CBC mode where decryption with
 a wrong IV results in only first block being garbled. Therefore we
 prepend a random block to our plaintext before encryption, and discard
 first block from plaintext after decryption.
+
+
+Master passphrase
+-----------------
+This can be any string user chooses. We store its 64 bytes long key
+derivation (KD), using PBKDF2 with HMAC-SHA1, and later check correctness
+of user-entered passphrase by making same KD from it and comparing it
+to the stored one. Only if the two KDs match, the passphrase is accepted
+and remembered for session, thus giving access to account or plugin
+passwords.
+
+Salt used for PBKDF2 is stored in 'master_passphrase_salt', encoded
+as base64. It consists of 64 randomly generated bytes.
+
+Number of rounds for PBKDF2 is stored in hidden preference
+'master_passphrase_pbkdf2_rounds'.