Argon2.pod
作为 CocaPod 的 Argon2 密钥派生函数。
尽管存在所有弊端,密码仍然是各种网络服务中主要的身份验证形式。密码通常以散列形式存储在服务器数据库中。这些数据库通常会被对手捕获,此时由于密码往往具有低熵,他们就会进行词典攻击。协议设计者使用各种技巧来减轻这些问题。从20世纪70年代末开始,密码就会与随机盐值一起散列,以防止在不同用户和服务间检测到相同的密码。由于摩尔定律,散列函数的计算速度越来越快,现在通常需要多次计算以增加攻击者密码试探的成本。
同时,密码破解工具迁移到了新的架构,例如 FPGA、多核 GPU 和专用 ASIC 模块,在这些模块中多次迭代散列函数的平均成本要低得多。很快人们发现,这些新环境非常适合几乎无内存成本的运算,但它们在处理大量记忆时遇到困难。防御者通过设计内存硬函数来回应,这些函数计算需要大量的内存,在使用的内存较少时还会施加计算上的惩罚。密码散列方案
scrypt
是此类函数的一个实例。[...]
我们的解决方案 我们提供了一个名为 Argon2 的散列方案。Argon2 概括了内存硬函数设计的最先进技术。它是一个简洁明了的设计。它旨在达到最高的内存填充率和多计算单元的有效利用,同时仍然提供针对折中攻击的防御。Argon2 对 x86 架构进行了优化,并利用了最近 Intel 和 AMD 处理器的缓存和内存组织。
Argon2是一个可选键派生函数,于2015年7月被选为获胜者,参加了密码散列竞赛。它由亚历克斯·比里尤科夫、丹尼尔·迪努和德米特里·赫弗洛托维奇设计,他们来自卢森堡大学
Argon2采用Creative Commons CC0许可证发布,并提供三个相关版本
- Argon2d最大化了对GPU破解攻击的抵抗力。
- Argon2i针对抵抗旁路攻击进行了优化。
- Argon2id是Argon2d和Argon2i的一个混合版本。
所有三个版本都允许通过三个参数进行指定,这控制着
- 执行时间
- 内存需求
- 并行程度