ScaffoldBench

RunOpus 5.5repeat 2

Propose-select on OWASP vs NIST on password hashing

claude-opus-5-5__propose-select__research-password-hashing__r2

Score

1.000

passed
design ran as designed
Cost
$1.29
+ $0.103 judging
Latency
1m 51s
setup 0.0s, grading 5.1s
Turns
47
Tool calls
42
Subagents
3
Tokens in / out
441k / 25k
339,532 read from cache

Did the design run?

every check held
  • Run completed: heldharness.run-completedThe environment was built, the architecture returned and grading finished, none of them throwing.
  • No API failures: heldharness.apiNo model call failed at the API.
  • Every call ended: heldharness.calls-endedEvery call ended with a result, or was stopped by the run's own limits.
  • No harness tool denied: heldharness.harness-toolsThe sandbox guard never denied a harness tool, nor a tool the session itself offered.
  • Tool servers connected: heldharness.mcp-connectedEvery tool server the harness gave a call was connected when the session started.
  • No foreign tool servers: heldharness.mcp-hermeticNo call loaded a tool server the harness did not give it.
  • Builtin tools: heldharness.builtin-toolsA check recorded with the run.
  • Structured replies arrived: heldharness.structured-outputEvery call that asked for structured output and ran to the end got it.
  • No silent fallbacks: heldharness.not-degradedNo phase fell back on a default (an empty plan, a default winner) instead of its output.
  • Judge answered: heldharness.judgeAt least one grading call returned a usable verdict.
  • All three proposers ran: heldpropose-select.proposalsThree proposers ran in parallel, each from its own angle, and none was starved while another ran.
  • The selector chose: heldpropose-select.selectionThe selector picked a proposal by a valid number, read from its schema reply and not a default.
  • Each call was shown the right tools: heldpropose-select.toolsEach proposer was shown the read-only tools, the selector none, and the executor the full toolset.

Phases

Proposal 1 (policy-first): 0.0s to 54.3s, finished, 13 tool calls, $0.351
Proposal 2 (state-first): 0.0s to 58.3s, finished, 13 tool calls, $0.333
Proposal 3 (outcome-first): 0.0s to 1m 4s, finished, 16 tool calls, $0.370
Select: 1m 4s to 1m 51s, finished, 0 tool calls, $0.234

Drawn from the phase records: timing and cost per call, no tool calls or messages.

PhaseDurationCostTurnsToolsModel
Proposal 1 (policy-first)54.3s$0.3511413claude-opus-5-5
Proposal 2 (state-first)58.3s$0.3331413claude-opus-5-5
Proposal 3 (outcome-first)1m 4s$0.3701716claude-opus-5-5
Select46.7s$0.23420claude-opus-5-5

The call-by-call replay is not published for this run. Traces are large, so the repository keeps 9 of this run set’s 900 and leaves the rest out; the score, phases and final answer on this page come from the committed run record.

Runs you can replay

Record this cell yourself: npm run bench -- run --strategies propose-select --tasks research-password-hashing --models claude-opus-5-5 --repeats 1

Score breakdown

  • passStates that OWASP recommends Argon2id first, with a minimum configuration of 19 MiB of memory, an iteration count of 2 and 1 degree of parallelism.
    1.00weight 0.19

    met, backed by verified evidence E1. “Argon2id first: "Use Argon2id with a minimum configuration of 19 MiB of memory, an iteration count of 2, and 1 degree of parallelism."”

  • passStates OWASP's alternatives as conditions: scrypt if Argon2id is not available, bcrypt only for legacy systems, and PBKDF2 (at least 600,000 iterations with HMAC-SHA-256) if FIPS-140 compliance is required.
    1.00weight 0.13

    met, backed by verified evidence E2, E4. “scrypt if Argon2id isn't available.”

  • passStates that the current NIST SP 800-63B (revision 4) requires passwords to be salted and hashed with a suitable password hashing scheme that takes a cost factor, and says an approved scheme from the latest revision of SP 800-132 (or updated NIST guidelines) SHOULD be used.
    1.00weight 0.19

    met, backed by verified evidence E7, E8, E9, E12. “"An approved password hashing scheme published in the latest revision of [SP800-132] or updated NIST guidelines on password hashing schemes SHOULD be used."”

  • passStates that the superseded revision 3 named PBKDF2 and Balloon as example key derivation functions and said a memory-hard function SHOULD be used, and that revision 4 no longer contains that wording.
    1.00weight 0.13

    met, backed by verified evidence E18, E19, E20. “Rev. 3 named "PBKDF2 [SP 800-132] and Balloon" as examples, said "A memory-hard function SHOULD be used," and suggested "typically at least 10,000 iterations." Those sentences aren't in Rev. 4”

  • passExplains that for this team the two do not actually conflict: OWASP's own guidance is to use PBKDF2 (HMAC-SHA-256, at least 600,000 iterations) when FIPS-140 compliance is required, and NIST permits PBKDF2, so PBKDF2-HMAC-SHA-256 satisfies both; Argon2id remains OWASP's choice only where FIPS does not apply.
    1.00weight 0.25

    met, backed by verified evidence E2, E3. “OWASP and NIST don't conflict on this. OWASP's general first choice is Argon2id, but it names PBKDF2 for exactly this FIPS case, and PBKDF2 also meets NIST SP 800-63B-4.”

  • passStates at least one requirement both sources share, such as a unique salt for every password or a deliberately expensive hash with a tunable cost (work) factor instead of a fast general-purpose hash.
    1.00weight 0.13

    met, backed by verified evidence E8, E11, E12, E13. “Each password gets a unique salt of at least 32 bits.”

Penalties

No penalties were applied.

Scorer metadata

corpus
{"version":2,"snapshot":"2026-10-01","hash":"e12dc326c69a32d91f85f6355dc63e2a7d672b605685a1ffa1582a42bb1c561e","documents":5}
opened documents
["owasp-password-storage","nist-sp800-63b-4","nist-sp800-63b-3"]
opened by role
{"primary":["owasp-password-storage","nist-sp800-63b-4"],"superseded":["nist-sp800-63b-3"]}
displayed share
{"owasp-password-storage":1,"nist-sp800-63b-3":0.0501,"rfc9106":0.0171,"nist-sp800-63b-4":0.1329,"owasp-authentication":0.0271}
cited count
3
verified count
3
hallucinated count
0
citation integrity
1
hallucinated urls
[]
evidence block
true
evidence block repaired
false
evidence count
20
verified quote count
20
verified quote rate
1
evidence
[{"url":"https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html","claim":"OWASP's default recommendation is Argon2id with specific minimum parameters.","quote":"Use Argon2id with a minimum configuration of 19 MiB of memory, an iteration count of 2, and 1 degree of parallelism.","verified":true,"document":"owasp-password-storage"},{"url":"https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html","claim":"OWASP recommends PBKDF2-HMAC-SHA-256 at 600,000+ iterations when FIPS-140 compliance is required.","quote":"If FIPS-140 compliance is required, use PBKDF2 with a work factor of 600,000 or more and set with an internal hash function of HMAC-SHA-256.","verified":true,"document":"owasp-password-storage"},{"url":"https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html","claim":"OWASP says PBKDF2 should be preferred when NIST/FIPS requirements apply.","quote":"Since PBKDF2 is permitted by NIST SP 800-63B-4 and has FIPS-140 validated implementations, it should be the preferred algorithm when these are required.","verified":true,"document":"owasp-password-storage"},{"url":"https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html","claim":"OWASP restricts bcrypt to legacy systems.","quote":"The bcrypt password hashing function should only be used for password storage in legacy systems where Argon2 and scrypt are not available.","verified":true,"document":"owasp-password-storage"},{"url":"https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html","claim":"OWASP's iteration figures are dated December 2022 benchmarks.","quote":"These configuration settings are equivalent in the defense they provide. (Number as of december 2022, based on testing of RTX 4000 GPUs)","verified":true,"document":"owasp-password-storage"},{"url":"https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html","claim":"OWASP says a hash calculation should generally take less than one second.","quote":"As a general rule, calculating a hash should take less than one second.","verified":true,"document":"owasp-password-storage"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"SP 800-63B-4 supersedes the earlier SP 800-63B.","quote":"This publication supersedes NIST Special Publication (SP) 800-63B.","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"SP 800-63B-4 mandates salting and hashing passwords with a suitable password hashing scheme.","quote":"Passwords SHALL be salted and hashed using a suitable password hashing scheme.","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"SP 800-63B-4 recommends (SHOULD) an approved scheme from the latest SP 800-132 or updated NIST guidance.","quote":"An approved password hashing scheme published in the latest revision of [SP800-132] or updated NIST guidelines on password hashing schemes SHOULD be used.","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"The SP 800-132 referenced by 800-63B-4 is NIST's 2010 password-based key derivation recommendation.","quote":"[SP800-132] Turan M, Barker E, Burr W, Chen L (2010) Recommendation for Password-Based Key Derivation.","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"SP 800-63B-4 requires salts of at least 32 bits that minimize collisions.","quote":"The salt SHALL be at least 32 bits in length and chosen to minimize salt value collisions among stored hashes (i.e., to prevent multiple subscriber accounts from having the same hashed password).","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"SP 800-63B-4 says the cost factor should be as high as practical.","quote":"The chosen cost factor SHOULD be as high as practical without negatively impacting verifier performance.","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"SP 800-63B-4 recommends storing the scheme and cost factor per password to allow migration.","quote":"A reference to the password hashing scheme used, including the cost factor, SHOULD be stored for each password to allow migration to new algorithms and work factors.","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"SP 800-63B-4 recommends an additional keyed hashing step with a verifier-only secret key.","quote":"In addition, verifiers SHOULD perform an additional iteration of a keyed hashing or encryption operation using a secret key known only to the verifier.","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"SP 800-63B-4 requires the secret key to be stored apart from the hashes.","quote":"The secret key value SHALL be stored separately from the hashed passwords.","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"SP 800-63B-4 requires FIPS 140 validation for cryptography in federal-agency verifiers.","quote":"Cryptography used by verifiers operated by or on behalf of federal agencies at AAL1 SHALL be validated to meet the requirements of [FIPS140] Level 1.","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-4/sp800-63b.html","claim":"FIPS 140 requirements are satisfied by CMVP-validated implementations.","quote":"Throughout this document, [FIPS140] requirements are satisfied by security technologies, products, and services that utilize implementations of cryptography validated by the Cryptography Module Validation Program [CMVP].","verified":true,"document":"nist-sp800-63b-4"},{"url":"https://pages.nist.gov/800-63-3/sp800-63b.html","claim":"The superseded Rev. 3 named PBKDF2 and Balloon as suitable KDFs.","quote":"Examples of suitable key derivation functions include Password-based Key Derivation Function 2 (PBKDF2) [SP 800-132] and Balloon [BALLOON].","verified":true,"document":"nist-sp800-63b-3"},{"url":"https://pages.nist.gov/800-63-3/sp800-63b.html","claim":"Rev. 3 recommended memory-hard functions.","quote":"A memory-hard function SHOULD be used because it increases the cost of an attack.","verified":true,"document":"nist-sp800-63b-3"},{"url":"https://pages.nist.gov/800-63-3/sp800-63b.html","claim":"Rev. 3 gave an iteration guideline of typically at least 10,000, which Rev. 4 dropped.","quote":"Therefore, the iteration count SHOULD be as large as verification server performance will allow, typically at least 10,000 iterations.","verified":true,"document":"nist-sp800-63b-3"}]
judge unverified quotes
0
judge verdicts
[{"owasp-argon2id":{"status":"met","support":["E1"]},"owasp-conditions":{"status":"met","support":["E2","E4"]},"nist-current":{"status":"met","support":["E7","E8","E9","E12"]},"nist-revision":{"status":"met","support":["E18","E19","E20"]},"reconciliation":{"status":"met","support":["E2","E3"]},"common-ground":{"status":"met","support":["E8","E11","E12","E13"]}},{"owasp-argon2id":{"status":"met","support":["E1"]},"owasp-conditions":{"status":"met","support":["E2","E4"]},"nist-current":{"status":"met","support":["E8","E9"]},"nist-revision":{"status":"met","support":["E18","E19"]},"reconciliation":{"status":"met","support":["E2","E3"]},"common-ground":{"status":"partial","support":["E11","E12"]}},{"owasp-argon2id":{"status":"met","support":["E1"]},"owasp-conditions":{"status":"met","support":["E2","E4"]},"nist-current":{"status":"met","support":["E8","E9"]},"nist-revision":{"status":"met","support":["E18","E19","E20"]},"reconciliation":{"status":"met","support":["E2","E3"]},"common-ground":{"status":"met","support":["E11","E12","E13"]}}]
judge failures
0
grounded weight share
1

Final answer

The team should use PBKDF2 with HMAC-SHA-256 at 600,000 or more iterations, run inside a crypto module validated under FIPS 140. Each password gets a unique salt of at least 32 bits. Add a secret-key step on top (an HMAC, often called a "pepper") with the key kept apart from the database. OWASP and NIST don't conflict on this. OWASP's general first choice is Argon2id, but it names PBKDF2 for exactly this FIPS case, and PBKDF2 also meets NIST SP 800-63B-4.

What OWASP recommends

Source: https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html

  • General order of preference:

    • Argon2id first: "Use Argon2id with a minimum configuration of 19 MiB of memory, an iteration count of 2, and 1 degree of parallelism."
    • scrypt if Argon2id isn't available.
    • bcrypt only in legacy systems (work factor 10 or more, 72-byte input limit).
  • When FIPS applies:

    • "If FIPS-140 compliance is required, use PBKDF2 with a work factor of 600,000 or more and set with an internal hash function of HMAC-SHA-256."
    • PBKDF2 "should be the preferred algorithm when these are required," because it "is permitted by NIST SP 800-63B-4 and has FIPS-140 validated implementations."
  • Other settings:

    • Iteration counts: 600,000 for PBKDF2-HMAC-SHA256 and 220,000 for HMAC-SHA512. HMAC-SHA1 is "legacy only."
    • These counts are dated December 2022 (GPU benchmarks).
    • A pepper is something to "consider."
    • Store the algorithm and work factor with each hash (for example in the PHC string format) so hashes can be upgraded later.
    • As a rule of thumb, computing one hash should take less than a second.

What NIST SP 800-63B-4 requires

Source: https://pages.nist.gov/800-63-4/sp800-63b.html

This is the current revision. The page says it "supersedes NIST Special Publication (SP) 800-63B."

SHALL (mandatory):

  • Passwords "SHALL be salted and hashed using a suitable password hashing scheme."
  • The salt must be at least 32 bits and chosen so that different accounts rarely end up with the same salt.
  • The salt and the hash are stored for each password.
  • If a secret key is used, it must come from an approved random bit generator and be stored separately from the hashes.
  • Cryptography in verifiers run by or for federal agencies must be validated to FIPS 140, at least Level 1 at AAL1 and AAL2. "Validated" means the implementation is certified by NIST's Cryptographic Module Validation Program (CMVP).

SHOULD (recommended):

  • "An approved password hashing scheme published in the latest revision of [SP800-132] or updated NIST guidelines on password hashing schemes SHOULD be used." SP 800-132 is listed in the references as the 2010 "Recommendation for Password-Based Key Derivation."
  • Set the cost factor as high as practical and raise it over time.
  • Store a reference to the scheme and cost factor with each password.
  • Add an extra keyed hashing or encryption step, with the key ideally kept in an HSM or a TEE (secure hardware for keys).

What Rev. 4 does not say:

  • It doesn't name PBKDF2, Argon2 or bcrypt, and it gives no iteration count.
  • The PBKDF2 link comes from SP 800-132 and from the older Rev. 3 (https://pages.nist.gov/800-63-3/sp800-63b.html). Rev. 3 named "PBKDF2 [SP 800-132] and Balloon" as examples, said "A memory-hard function SHOULD be used," and suggested "typically at least 10,000 iterations." Those sentences aren't in Rev. 4, so don't quote Rev. 3's 10,000 figure as current NIST guidance.
  • I couldn't open SP 800-132 itself, so the PBKDF2 link rests on the Rev. 3 text and OWASP's statement.

Where the two sources differ

  • Algorithm: OWASP generally prefers memory-hard Argon2id. NIST Rev. 4 points to SP 800-132.
  • How firm the rule is: under Rev. 4, using an "approved" scheme is a SHOULD, so Rev. 4 alone doesn't forbid Argon2id. The push toward PBKDF2 comes from FIPS 140 validation, which Rev. 4 requires for federal-agency verifiers and which OWASP ties to PBKDF2's validated implementations. The sources I opened don't say whether Argon2id is FIPS-approved, so I make no claim either way.
  • Pepper: NIST makes the keyed step a SHOULD; OWASP only says "consider."
  • Iterations: NIST gives no number. The 600,000 figure is OWASP's own December 2022 benchmark.

Plan, in order

  1. Confirm whether the verifier is run by or for a federal agency. If so, its cryptography must be FIPS 140 / CMVP validated.
  2. Use PBKDF2-HMAC-SHA256 from a validated module at 600,000 or more iterations. Tune it on your own hardware so one hash stays under a second. Don't use HMAC-SHA1.
  3. Generate a unique random salt of at least 32 bits for each password. Store the salt, the hash, and the scheme and cost factor (for example as a PHC-style string).
  4. Add the keyed step: a separate HMAC whose key comes from an approved random bit generator and is kept in an HSM or TEE, away from the database.
  5. Plan to raise the cost over time by re-hashing passwords when users log in. Watch for any revision of SP 800-132.
  6. For parts of the system outside FIPS scope, OWASP's general choice is Argon2id. Rev. 4 doesn't ban it, but it isn't the "approved" scheme Rev. 4 points to.
{"evidence": [
{"claim": "OWASP's default recommendation is Argon2id with specific minimum parameters.", "quote": "Use Argon2id with a minimum configuration of 19 MiB of memory, an iteration count of 2, and 1 degree of parallelism.", "url": "https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html"},
{"claim": "OWASP recommends PBKDF2-HMAC-SHA-256 at 600,000+ iterations when FIPS-140 compliance is required.", "quote": "If FIPS-140 compliance is required, use PBKDF2 with a work factor of 600,000 or more and set with an internal hash function of HMAC-SHA-256.", "url": "https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html"},
{"claim": "OWASP says PBKDF2 should be preferred when NIST/FIPS requirements apply.", "quote": "Since PBKDF2 is permitted by NIST SP 800-63B-4 and has FIPS-140 validated implementations, it should be the preferred algorithm when these are required.", "url": "https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html"},
{"claim": "OWASP restricts bcrypt to legacy systems.", "quote": "The bcrypt password hashing function should only be used for password storage in legacy systems where Argon2 and scrypt are not available.", "url": "https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html"},
{"claim": "OWASP's iteration figures are dated December 2022 benchmarks.", "quote": "These configuration settings are equivalent in the defense they provide. (Number as of december 2022, based on testing of RTX 4000 GPUs)", "url": "https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html"},
{"claim": "OWASP says a hash calculation should generally take less than one second.", "quote": "As a general rule, calculating a hash should take less than one second.", "url": "https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html"},
{"claim": "SP 800-63B-4 supersedes the earlier SP 800-63B.", "quote": "This publication supersedes NIST Special Publication (SP) 800-63B.", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "SP 800-63B-4 mandates salting and hashing passwords with a suitable password hashing scheme.", "quote": "Passwords SHALL be salted and hashed using a suitable password hashing scheme.", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "SP 800-63B-4 recommends (SHOULD) an approved scheme from the latest SP 800-132 or updated NIST guidance.", "quote": "An approved password hashing scheme published in the latest revision of [SP800-132] or updated NIST guidelines on password hashing schemes SHOULD be used.", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "The SP 800-132 referenced by 800-63B-4 is NIST's 2010 password-based key derivation recommendation.", "quote": "[SP800-132] Turan M, Barker E, Burr W, Chen L (2010) Recommendation for Password-Based Key Derivation.", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "SP 800-63B-4 requires salts of at least 32 bits that minimize collisions.", "quote": "The salt SHALL be at least 32 bits in length and chosen to minimize salt value collisions among stored hashes (i.e., to prevent multiple subscriber accounts from having the same hashed password).", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "SP 800-63B-4 says the cost factor should be as high as practical.", "quote": "The chosen cost factor SHOULD be as high as practical without negatively impacting verifier performance.", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "SP 800-63B-4 recommends storing the scheme and cost factor per password to allow migration.", "quote": "A reference to the password hashing scheme used, including the cost factor, SHOULD be stored for each password to allow migration to new algorithms and work factors.", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "SP 800-63B-4 recommends an additional keyed hashing step with a verifier-only secret key.", "quote": "In addition, verifiers SHOULD perform an additional iteration of a keyed hashing or encryption operation using a secret key known only to the verifier.", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "SP 800-63B-4 requires the secret key to be stored apart from the hashes.", "quote": "The secret key value SHALL be stored separately from the hashed passwords.", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "SP 800-63B-4 requires FIPS 140 validation for cryptography in federal-agency verifiers.", "quote": "Cryptography used by verifiers operated by or on behalf of federal agencies at AAL1 SHALL be validated to meet the requirements of [FIPS140] Level 1.", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "FIPS 140 requirements are satisfied by CMVP-validated implementations.", "quote": "Throughout this document, [FIPS140] requirements are satisfied by security technologies, products, and services that utilize implementations of cryptography validated by the Cryptography Module Validation Program [CMVP].", "url": "https://pages.nist.gov/800-63-4/sp800-63b.html"},
{"claim": "The superseded Rev. 3 named PBKDF2 and Balloon as suitable KDFs.", "quote": "Examples of suitable key derivation functions include Password-based Key Derivation Function 2 (PBKDF2) [SP 800-132] and Balloon [BALLOON].", "url": "https://pages.nist.gov/800-63-3/sp800-63b.html"},
{"claim": "Rev. 3 recommended memory-hard functions.", "quote": "A memory-hard function SHOULD be used because it increases the cost of an attack.", "url": "https://pages.nist.gov/800-63-3/sp800-63b.html"},
{"claim": "Rev. 3 gave an iteration guideline of typically at least 10,000, which Rev. 4 dropped.", "quote": "Therefore, the iteration count SHOULD be as large as verification server performance will allow, typically at least 10,000 iterations.", "url": "https://pages.nist.gov/800-63-3/sp800-63b.html"}
]}

Provenance of the numbers on this page

run set
scaffold-or-scale-v1
models
Haiku 4.5, Sonnet 5.5, Opus 5.5
effort
high
repeats
2
fixtures
replay
runs
900 / 900
strategy cost
$354.44
judge cost
$9.19
wall clock
9h 48m
git
fce5807b2d

Cost excludes judge calls, which are tracked separately so a scoring model never flatters or penalises an architecture. Every figure on this site is read from results/ at build time.