skip to content

Why can a stolen NT hash authenticate an attacker without ever being cracked?

level: juniorimportance: must knowfreq 72%

answer

  1. ask what actually crosses the wire
  2. the password is never transmitted
  3. stored value equals client-side input
  4. possession of the derivative is the proof
  5. cracking only helps a plaintext-demanding verifier

basics

~20 s

The protocol never sends a password. The client proves it holds the NT hash itself, so the hash is the credential. Anyone holding it authenticates directly, and cracking would only recover a plaintext that nothing in that path asks for.

solid answer

~40 s

NTLM authentication never carries a password. The client computes its response from the NT hash, and the verifier checks that response against the NT hash it stores for the account. The stored derivative and the client-side input to the proof are the *same object*, so possession of the hash is possession of the credential — that is the whole idea behind pass-the-hash (`T1550.002`). Cracking it back to a plaintext buys nothing on that path; it is only worth doing where some other verifier genuinely demands typed text — a portal login, an SSH password prompt, a vault — or where the person reused the same string elsewhere. For an operator paid per completed intrusion, an hour of cracking is a loss, not a cost, so they simply reuse the derivative.

go deeper

for a junior

Be ready to say plainly that the password is never sent, so the stored hash is what the protocol consumes, and holding it is enough. Do not describe cracking as a required step.

for a middle

Explain where the hash enters the exchange on each side and why the stored value and the client-side input being the same object is what makes reuse possible at all.

for a senior

Show that password entropy, complexity policy and lockout sit outside this path entirely, and be able to say what does bound it: the material's lifetime and how many systems one copy reaches.

for a principal

Own the framing that this is a property of what the verifier accepts, not a defect to patch, so the only durable answer is changing the accepted proof rather than hardening the secret behind it.

## The property that makes this work Authentication protocols differ in **what the verifier accepts as proof of possession**. That single design choice decides whether a stolen stored value is a login or merely a puzzle. In NTLM authentication, the password itself is never transmitted and never compared. The account's password is turned into a fixed 16-byte value — the **NT hash**, `MD4(UTF-16LE(password))`, unsalted — and that value is what both ends work from. The client derives its response from the NT hash; the verifier recomputes the expected response from the NT hash it stores for that account. Neither side needs, sees, or checks the plaintext. Call this **verifier equality**: the thing stored at the verifier and the thing the client must supply are the same object. Once that is true, whoever obtains the object can authenticate. There is nothing left to break. ## Why cracking is the wrong instinct The reflex answer — "they still have to crack it, and our passwords are strong" — imagines a different protocol, one where a human types a secret that gets re-derived and compared. That is how an application password store works, and there cracking is mandatory because the stored value cannot be submitted. Here it is not mandatory, and it is usually not even worth doing: - **Time is the operator's scarcest resource.** A criminal contractor paid per completed intrusion loses money on every hour spent on a GPU. Reuse is instant; cracking is speculative. - **Success is not guaranteed.** A genuinely random 24-character service account password will not fall. But the hash of that password works exactly as well as the hash of `Summer2026!`. Password strength is simply not in the path. - **The plaintext adds only side value.** It is worth having when some *other* verifier demands typed text — a web SSO form, an SSH password prompt, a password manager, a helpdesk identity check — or when the human reused the same string on systems that have nothing to do with the domain. That is a bonus, not the objective. So the correct mental model is: the hash is not "an encrypted password you must undo". It is **the credential, in the form the protocol actually consumes**. ## The same property, one layer up: issued tickets Kerberos moves the accepted proof around but does not remove the property. The account's long-term key is derived from its password, and on a Linux fleet that key is commonly written to a **keytab** so services can authenticate unattended. Reading a keytab therefore yields the same kind of object: material the protocol accepts directly, with no plaintext anywhere in the story. A cached **ticket** is the same idea with a shorter life. A ticket is already-minted proof; presenting it is accepted because the issuer vouched for it, not because the presenter demonstrated knowledge of anything (`T1550.003`). So an operator on one compromised host can end up authenticated as a service identity across dozens of hosts having never learned, guessed, or cracked a single password — and that access ends on the ticket's own clock rather than when anybody decides it should. ## What the answer is *not* Be precise about direction, because the common wrong statements are all reversals: - It is **not** that the hashing is weak. Substituting a modern, salted, slow function for MD4 in that position would change the cracking economics and change nothing about reuse — the new value would still be what the protocol accepts. - It is **not** that the attacker "logged in with a hash instead of a password" through some flaw. The verifier behaved exactly as specified. There is no bug being exploited; the design accepts a static long-lived derivative. - It is **not** universal. "A hash leaked, therefore a login" is wrong just as often as the reflex it corrects. Whether a stolen digest is reusable depends entirely on whether the verifier accepts it as input, and plenty do not. ## The consequence worth stating in an interview Because the accepted proof is static, every control aimed at the *plaintext* misses. Length, complexity, character classes, lockout after failed guesses, and a stronger storage function all address guessing — and no guessing is occurring. What bounds this class of reuse is the lifetime of the accepted material, how widely one copy of it reaches, and ultimately whether the verifier can be moved to a proof it cannot store and an attacker cannot replay.

  • So when is cracking an NT hash actually worth an operator's time?
    Only where some verifier genuinely demands typed text: a web portal, an SSH password prompt, a vaulted secret, a helpdesk identity check. And where the human reused the same string on unrelated systems. For domain authentication that accepts the derivative, cracking adds nothing the operator does not already have.
  • Does a computer account's hash behave the same way?
    Yes. A machine account is an account: its NT hash authenticates as that host identity exactly as a user's does. The mitigating detail is that machine account passwords rotate automatically on a roughly 30-day cycle by default, so the stolen derivative has a bounded life — but until that rotation lands, it is accepted.
  • What does an operator lose by holding the hash rather than the password?
    Every path that collects typed text. A browser SSO form, an SSH password prompt, a password manager, an identity check over the phone. The derivative is accepted only by verifiers built to accept it, so the operator's reach is exactly the set of those verifiers, not the person's whole digital life.

It is the difference between a lock that checks your fingerprint against a stored template and a lock that opens for anyone holding the template. Stealing the template defeats only the second kind — and no amount of reconstructing the finger is needed.

saying these in an interview costs you the question

  • Says the attacker must crack the hash before they can log in
  • Claims a strong password protects against reuse of its hash
  • Calls the hash an encrypted password that gets decrypted
  • Assumes any leaked hash anywhere is an authentication bypass
  • Thinks a stronger hashing algorithm would remove the reuse

context