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