security(auth): raise Argon2id calibration minimums to OWASP thresholds (SEC-ARGON2)

- Increase minimum iterations from 2 to 3 (OWASP minimum)
- Increase minimum memory from 16MB to 19MB (19456KB, OWASP minimum)
- Update comments to document the OWASP rationale

Fixes: SEC-ARGON2
This commit is contained in:
2026-05-08 10:24:10 +08:00
parent 2a18a6fb47
commit d4ec8a13e4

View File

@@ -42,8 +42,8 @@ func NewPassword() *Password {
// 校准策略(优先保留 memory其次降低 iterations
// 1. 用默认参数64MB/5iter测量一次哈希耗时。
// 2. 若耗时 ≤ budget直接返回默认参数已安全。
// 3. 若耗时 > budget先尝试降低 iterations最低 2)。
// 4. 若仍超预算,再二分降低 memory最低 16MB
// 3. 若耗时 > budget先尝试降低 iterations最低 3OWASP 最低要求)。
// 4. 若仍超预算,再二分降低 memory最低 19MB = 19456KBOWASP 最低要求)。
// 5. 若仍超预算,打印 warn 但不更改参数(避免参数过弱)。
//
// 建议在 main() 启动阶段调用一次,结果会更新全局 defaultPasswordManager。
@@ -73,8 +73,8 @@ func CalibrateArgon2id(budget time.Duration) {
return
}
// Step 1尝试降低 iterations最低 2低于 2 不满足 OWASP 最低要求)
for iter > 2 {
// Step 1尝试降低 iterations最低 3OWASP 最低要求)
for iter > 3 {
iter--
elapsed = probe(mem, iter, par)
log.Printf("argon2id calibration: trying m=%dKB t=%d p=%d → %v", mem, iter, par, elapsed)
@@ -83,9 +83,9 @@ func CalibrateArgon2id(budget time.Duration) {
}
}
// Step 2若仍超预算二分降低 memory最低 16MB = 16*1024 KiB
// Step 2若仍超预算二分降低 memory最低 19MB = 19456 KiBOWASP 最低要求
if elapsed > budget {
const minMem = 16 * 1024
const minMem = 19 * 1024
for mem > minMem && elapsed > budget {
mem /= 2
if mem < minMem {