AES Cipher Usage

msdn link

Advanced Encryption Standard (AES) encryption is achieved in this protocol by using the AEAD-AES-256-CBC-HMAC-SHA512 cipher<80>, as specified in [AES-CBC]. In order to use an encryption key, AES encryption requires a shared secret between the server and the client. Create this encryption key as a content encryption key (CEK), as specified in following methods, as appropriate:

  • For the SamrSetInformationUser2 method (section with the UserInternal7Information (section or UserInternal8Information (section value, obtain the shared secret and CEK as the 16-byte user SMB session key, as specified in section

  • For the SamrUnicodeChangePasswordUser4 method (section, the shared secret is the plaintext old password and the CEK is generated as specified in section

  • For SamrUnicodeChangePasswordUser4 and SamrSetInformationUser2, the secret plaintext MUST be in the format specified in section

The data MUST be encrypted and decrypted using AEAD-AES-256-CBC-HMAC-SHA512 as follows:

  • Let IV be a random 16-byte number.

  • Then the encryption is done as follows:

    Let enc_key ::= HMAC-SHA-512(CEK, SAM_AES256_ENC_KEY_STRING)

    Let mac_key ::= HMAC-SHA-512(CEK, SAM_AES256_MAC_KEY_STRING)

    Let Cipher ::= AES-CBC(enc_key, IV, secret_plaintext)

    Let AuthData ::= HMAC-SHA-512(mac_key, versionbyte + IV + Cipher + versionbyte_length)

Note that enc_key is truncated to 32-bytes and the entire 64-byte mac_key is used.