Argon2是一个密钥导出函数(KDF),并提供了几个改进的版本:
- Argon2d最大限度地提高了对GPU破解攻击的抵抗力。它以密码相关的顺序访问存储器阵列,这降低了时间 - 存储器权衡(TMTO)攻击的可能性,但是引入了可能的侧面信道攻击。
- Argon2i优化了抵御侧向通道攻击的能力。它以密码无关的顺序访问内存阵列。
- Argon2id是一个混合版本。它遵循Argon2i方法进行第一次通过内存,Argon2d方法用于后续通过。Internet-Draft建议使用Argon2id,除非有理由选择其他两种模式之一。
上述三种模式允许通过三个参数来进行控制:
- 执行时间处理时间
- 需要记忆
- 并行度
虽然没有适用于Argon2d的公共密码分析,但对Argon2i功能有两次发布的攻击。
第一次攻击表明,可以使用四分之一到五分之一的所需空间来计算单遍的Argon2i函数,而没有时间损失,并且仅使用N / e < N / 2.71空间计算多遍Argon2i 没时间害处。
第二次攻击表明,Argon2i可以通过对于参数σ(空间成本),τ(时间成本)和线程计数的所有选择具有复杂度O(n 7/4 log(n))的算法来计算,使得n = σ * τ。Argon2作者声称,如果Argon2i使用三次或更多次通过,则此攻击效率不高。然而,JoëlAlwen和Jeremiah Blocki改进了攻击,并表明为了使攻击失败,Argon2i 需要超过10次通过记忆。