Skip to content

Encryption Types

Five Kerberos encryption types have been used in Active Directory. How each one derives its key determines what you're cracking and how fast.

flowchart LR
    P["Password"] --> DES_PATH & RC4_PATH & AES_PATH

    subgraph DES_PATH["DES (etype 1, 3)"]
        direction TB
        D1["+ Salt: REALMusername"]
        D2["DES string-to-key"]
        D3["56-bit DES key"]
        D1 --> D2 --> D3
    end

    subgraph RC4_PATH["RC4 (etype 23)"]
        direction TB
        R1["UTF-16LE encode"]
        R2["MD4 hash"]
        R3["128-bit NT hash = key"]
        R1 --> R2 --> R3
    end

    subgraph AES_PATH["AES (etype 17, 18)"]
        direction TB
        A1["+ Salt: REALMusername"]
        A2["PBKDF2-SHA1<br/>4096 iterations"]
        A3["128 or 256-bit AES key"]
        A1 --> A2 --> A3
    end

    style RC4_PATH fill:#4a2020,stroke:#ff6b6b
    style DES_PATH fill:#4a4a20,stroke:#ffd93d
    style AES_PATH fill:#1a3a1a,stroke:#6bcb77

RC4 has no salt and uses a single fast hash (MD4). AES uses a salt and 4096 PBKDF2 iterations. DES uses a salt but has a tiny 56-bit keyspace.


DES (etypes 1 and 3)

DES-CBC-CRC (etype 1) and DES-CBC-MD5 (etype 3) came from MIT Kerberos and shipped with Windows 2000. Both use 56-bit DES; they differ only in the integrity check (CRC32 for etype 1, MD5 for etype 3).

Both etypes produce the same key from the same password. 56 bits is brute-forceable no matter what the password is. A 50-character passphrase and a 3-character password both reduce to the same 56-bit key. You're attacking the key, not the password, so password policy doesn't matter.

DES was disabled by default in Server 2008 R2 (2009), re-enableable via GPO or the USE_DES_KEY_ONLY account flag. Removed entirely in Server 2025. Legacy environments in healthcare, manufacturing, and government still run it.

Property Value
Key size 56 bits effective (8 bytes with parity)
Key derivation MIT DES string-to-key (password + salt)
Salt REALM + username (e.g., CONTOSO.COMAdmin)
Introduced Windows 2000
Disabled by default Server 2008 R2
Removed Server 2025

RC4-HMAC (etype 23)

Microsoft added RC4-HMAC in Windows 2000 to bridge NTLM and Kerberos. Key derivation: take the password, encode as UTF-16LE, MD4 hash it. Done. The result is the NT hash, and the NT hash is the RC4 key.

There is no salt. Same password, same key, regardless of username or domain. An NT hash pulled from one machine works as a Kerberos key on any DC in the domain. Pass-the-hash and overpass-the-hash both work because of this. The NT hash is completely portable.

Hashcat only has to compute MD4(UTF-16LE(candidate)) per guess. No salt means one attempt applies to every RC4 hash in your file at once.

Property Value
Key size 128 bits (16 bytes)
Key derivation MD4(UTF-16LE(password)) = NT hash
Salt None
Introduced Windows 2000
Deprecated RFC 8429 (2018), CVE-2022-37966 patches
Being removed Server 2025+ (phased rollout through 2026)

AES128 and AES256 (etypes 17 and 18)

AES128-CTS-HMAC-SHA1-96 (etype 17) and AES256-CTS-HMAC-SHA1-96 (etype 18) shipped with Vista and Server 2008. Key derivation uses PBKDF2-HMAC-SHA1 with 4096 iterations over a salted password. Much slower to crack than RC4.

Same derivation for both, just different output length (16 bytes for AES128, 32 for AES256). AES256 is the default on modern domains.

Property AES128 (etype 17) AES256 (etype 18)
Key size 16 bytes (128 bits) 32 bytes (256 bits)
Key derivation PBKDF2-HMAC-SHA1, 4096 iterations Same
Salt REALM + username Same
Introduced Server 2008 / Vista Same

AES is slower to crack, not impossible

The 4096 PBKDF2 iterations make AES roughly 600x slower to crack than RC4 per candidate password. But weak passwords are still weak. Password1! falls in seconds even with AES.


Salt computation

Salt gets concatenated with the password during key derivation. Same password on two different accounts = different keys. Computation varies by etype:

flowchart TD
    A{Which etype?} -->|"RC4 (23)"| B["No salt needed<br/>Key = MD4(UTF-16LE(password))"]
    A -->|"DES (1, 3) or AES (17, 18)"| C{Account type?}

    C -->|"User account<br/>(e.g., Admin)"| D["Salt = REALM + username<br/>CONTOSO.COMAdmin"]
    C -->|"Machine account<br/>(e.g., DC01$)"| E["Salt = REALM + host + hostname.realm<br/>CONTOSO.COMhostdc01.contoso.com"]

    D & E --> F["Key = string-to-key(password, salt)"]
    B --> G["Key ready"]
    F --> G

    style B fill:#4a2020,stroke:#ff6b6b
    style G fill:#1a3a1a,stroke:#6bcb77
Etype Salt Example
DES (1, 3) REALM (uppercase) + username (case-preserved) CONTOSO.COMAdmin
RC4 (23) None — the key is just MD4(UTF-16LE(password))
AES (17, 18) REALM (uppercase) + username (case-preserved) CONTOSO.COMAdmin

For machine accounts (sAMAccountName ending with $), the salt changes:

Etype Machine account salt Example
DES / AES REALM + host + hostname.realm (all lowercase) CONTOSO.COMhostdc01.contoso.com

The salt matters because hashcat needs it to derive the key. For AES hashes, the username and realm in the hash string aren't just labels; they're cryptographic inputs. Wrong username or realm = wrong key = cracking silently fails even with the right password.

RC4 has no salt, which is why it cracks fast and why pass-the-hash works. One NT hash candidate applies to every RC4 hash in your file at once.


msDS-SupportedEncryptionTypes

Each account's supported etypes are stored in the msDS-SupportedEncryptionTypes AD attribute. The KDC checks this bitmask when issuing tickets.

block-beta
    columns 5
    b4["Bit 4<br/>AES256<br/>0x10"]:1
    b3["Bit 3<br/>AES128<br/>0x08"]:1
    b2["Bit 2<br/>RC4<br/>0x04"]:1
    b1["Bit 1<br/>DES-MD5<br/>0x02"]:1
    b0["Bit 0<br/>DES-CRC<br/>0x01"]:1

    style b4 fill:#1a3a1a,stroke:#6bcb77
    style b3 fill:#1a3a1a,stroke:#6bcb77
    style b2 fill:#4a4a20,stroke:#ffd93d
    style b1 fill:#4a2020,stroke:#ff6b6b
    style b0 fill:#4a2020,stroke:#ff6b6b
Bit Value Encryption type
0 0x01 DES-CBC-CRC
1 0x02 DES-CBC-MD5
2 0x04 RC4-HMAC
3 0x08 AES128
4 0x10 AES256

Common values you'll see:

Value Meaning
0 (not set) KDC uses domain default — historically RC4+AES, now AES-only on newer DCs
0x04 RC4 only
0x18 AES128 + AES256 (the "AES required" checkbox in ADUC)
0x1C RC4 + AES128 + AES256
0x1F All five encryption types

kw-roast --ldap queries for accounts with servicePrincipalName set. The KDC picks the etype for the ticket based on this bitmask. On Server 2019+, the DC uses the strongest etype the service supports and ignores your RC4 request, so you might pass -e rc4 and still get an AES256 ticket back.


Windows version timeline

gantt
    title Windows Kerberos Encryption Type Support
    dateFormat YYYY
    axisFormat %Y

    section DES-CBC (1, 3)
    Enabled by default            :des1, 2000, 2009
    Disabled by default (GPO)     :des2, 2009, 2024
    Removed entirely              :milestone, 2024, 0d

    section RC4-HMAC (23)
    Default and preferred         :rc41, 2000, 2008
    Available, AES preferred      :rc42, 2008, 2022
    Deprecated (CVE-2022-37966)   :rc43, 2022, 2026
    Planned removal               :milestone, 2026, 0d

    section AES128/256 (17, 18)
    Introduced (Server 2008)      :aes1, 2008, 2026
Version Year Supported etypes Key change
Windows 2000 2000 DES-CBC-CRC, DES-CBC-MD5, RC4-HMAC Kerberos introduced to Windows. RC4 is the default.
Server 2003 2003 DES, RC4 Last version without AES support.
Server 2008 2008 DES, RC4, AES128, AES256 AES introduced. All five etypes available.
Server 2008 R2 2009 RC4, AES (DES disabled) DES disabled by default. GPO to re-enable.
Server 2012 R2 2013 RC4, AES Protected Users group forces AES-only.
Server 2019 2018 RC4, AES Kerberoast mitigation: DC honors service's strongest etype, not attacker's request.
Server 2022 2021 RC4, AES CVE-2022-37966: default session key changed from RC4 to AES.
Server 2025 2024 AES (RC4 being phased out) DES removed entirely. RC4 phase-out begins (AES-only default planned for 2026).