On Sunday, 27 May 2018 at 10:27:45 UTC, Adam Wilson wrote:
struct cryptoHeader {
    ubyte hdrVersion;   // The version of the header
    ubyte encAlg;       // The encryption algorithm used
    ubyte hashAlg;      // The hash algorithm used
    uint  kdfIters;     // The number of PBKDF2 iterations
    ubyte authLen;      // The length of the authentication value
    ubyte saltLen;      // The length of the PBKDF2 salt
    ubyte ivLen;        // The length of the IV
    ulong encLen;       // The length of the encrypted data
    ulong adLen;        // The length of the additional data
}

Should there be any kind of key identifier, or do you consider that a separate issue?

- MacKey = PBKDF2 over EncKey once using same inputs as EncKey

How about this?

Use PBKDF2 to generate a key-derivation-key (KDK), then use HKDF-Expand (https://tools.ietf.org/html/rfc5869) to derive the encryption key and MAC key separately.

I think that's more standard. I don't know how much it matters in practice, but a lot of cryptographers don't like generating MAC/encryption keys from each other directly.

Also, it's probably safer to use HKDF-Extract instead of using raw keys directly when not using PBKDF2.


Reply via email to