From 6a9a073126aa858fce87c614fabb0be8511f8870 Mon Sep 17 00:00:00 2001 From: mmorrissette-devolutions Date: Mon, 19 Oct 2026 14:11:33 -0400 Subject: [PATCH] feat(argon2): raise default memory cost to OWASP minimum (19 MiB) The default Argon2id parameters used 4 MiB / t=2 / p=1, which is below the OWASP Password Storage Cheat Sheet minimum (m=19 MiB, t=2, p=1). Raise the default memory to 19456 KiB and make `Argon2Parameters::default()` read the `defaults` constants instead of duplicating them. Existing data is unaffected: parameters are serialized with every derivation and read back from there. Password hashing (V2) already uses 64 MiB / t=3 and is unchanged. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 4 ++++ python/CHANGELOG.md | 4 ++++ src/argon2parameters.rs | 16 ++++++++-------- wrappers/csharp/tests/unit-tests/TestManaged.cs | 2 +- .../derive-encrypt/derive-encrypt.component.html | 4 ++-- .../key-derivation/key-derivation.component.html | 4 ++-- 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee7528ba..ec097f0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## [Unreleased] - +### Breaking Changes + +- The default Argon2id parameters (`Argon2Parameters::default()`, `Argon2::new()`, `derive_key` / `encrypt_with_password` with `Latest`) now use 19 MiB of memory (19456 KiB) instead of 4 MiB, matching the OWASP Password Storage Cheat Sheet minimum (m=19 MiB, t=2, p=1). Existing data is unaffected: the parameters are serialized alongside every derivation and are read back from there. Callers that rebuild parameters from the defaults instead of persisting the serialized `Argon2Parameters` / `DerivationParameters` must pin `memory = 4096` to keep deriving the same keys. + ## [0.10.2] - 2026-09-14 - Fix a double free in the C# wrapper diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md index 35f8ba6e..1c2fe08f 100644 --- a/python/CHANGELOG.md +++ b/python/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## [Unreleased] +### Breaking changes + +- The default Argon2id parameters now use 19 MiB of memory (19456 KiB) instead of 4 MiB, matching the OWASP minimum. Existing data is unaffected since the parameters are serialized with each derivation. + ## [2026.6.16] - 2026-06-16 ### Breaking changes diff --git a/src/argon2parameters.rs b/src/argon2parameters.rs index df256387..cfe2e2cc 100644 --- a/src/argon2parameters.rs +++ b/src/argon2parameters.rs @@ -23,7 +23,7 @@ pub mod defaults { pub const LENGTH: u32 = 32; pub const LANES: u32 = 1; - pub const MEMORY: u32 = 4096; + pub const MEMORY: u32 = 19456; pub const ITERATIONS: u32 = 2; pub const VARIANT: Variant = Variant::Argon2id; pub const VERSION: Version = Version::Version13; @@ -105,13 +105,13 @@ impl Default for Argon2Parameters { Argon2Parameters { associated_data: Vec::new(), secret_key: Vec::new(), - length: 32, - lanes: 1, - memory: 4096, - iterations: 2, - variant: Variant::Argon2id, - version: Version::Version13, - dc_version: 1, + length: defaults::LENGTH, + lanes: defaults::LANES, + memory: defaults::MEMORY, + iterations: defaults::ITERATIONS, + variant: defaults::VARIANT, + version: defaults::VERSION, + dc_version: defaults::DC_VERSION, salt, } } diff --git a/wrappers/csharp/tests/unit-tests/TestManaged.cs b/wrappers/csharp/tests/unit-tests/TestManaged.cs index 507aedba..fc214790 100644 --- a/wrappers/csharp/tests/unit-tests/TestManaged.cs +++ b/wrappers/csharp/tests/unit-tests/TestManaged.cs @@ -349,7 +349,7 @@ public void GetDefaultArgon2ParametersSizeNative_Default() Argon2Parameters defaultArgon2Parameters = Managed.GetDefaultArgon2Parameters(); Assert.IsTrue(defaultArgon2Parameters != null); - Assert.IsTrue(defaultArgon2Parameters.Memory == 4096); + Assert.IsTrue(defaultArgon2Parameters.Memory == 19456); } [TestMethod] diff --git a/wrappers/wasm/demo/src/app/derive-encrypt/derive-encrypt.component.html b/wrappers/wasm/demo/src/app/derive-encrypt/derive-encrypt.component.html index c2490426..61bcc568 100644 --- a/wrappers/wasm/demo/src/app/derive-encrypt/derive-encrypt.component.html +++ b/wrappers/wasm/demo/src/app/derive-encrypt/derive-encrypt.component.html @@ -79,8 +79,8 @@

Derive and Encrypt

Argon2 Parameters (optional)
- - + +
diff --git a/wrappers/wasm/demo/src/app/key-derivation/key-derivation.component.html b/wrappers/wasm/demo/src/app/key-derivation/key-derivation.component.html index a679d605..3d200d67 100644 --- a/wrappers/wasm/demo/src/app/key-derivation/key-derivation.component.html +++ b/wrappers/wasm/demo/src/app/key-derivation/key-derivation.component.html @@ -44,8 +44,8 @@

Key Derivation

@if (algorithm === 'argon2') {
- - + +