跳转到内容

Lyra2

来自BitcoinWiki
Lyra2 内存矩阵图
Lyra2 内存矩阵示意图。

Lyra2 是一种内存硬密码散列方案,还可以导出加密密钥材料。它是由圣保罗大学的 Marcos A. Simplicio Jr.、Leonardo C. Almeida、Ewerton R. Andrade、Paulo C. F. dos Santos 和 Paulo S. L. M. Barreto 设计的。[1]

Lyra2 入围 2013-2015 年密码哈希竞赛决赛并获得特别认可。 Argon2,而不是 Lyra2,被选为比赛的获胜者。[2]

目的

人为选择的密码通常包含比加密密钥更少的熵。如果获得了密码数据库或加密文件,攻击者就可以离线测试猜测。密码散列方案需要可配置的计算,并且对于内存硬设计,需要大量内存,从而提高了每次猜测的成本。

Lyra2 属于更广泛的基于密码的分支 Key derivation function 家庭。它接受密码、盐、所需的输出长度和成本参数。其输出可以存储为密码验证器或用作密钥材料,具体取决于应用程序。[1] 盐分隔使用相同密码的记录;这通常不是秘密。

设计

Lyra2 是由密码学构建的 海绵,一种具有吸收输入并随后挤出伪随机输出的内部状态的结构。该算法将中间值存储在内存矩阵中,并在处理过程中重新访问它们。丢弃该矩阵的部分内容以节省内存会迫使评估器重新计算值,这样做的目的是使时间与内存的权衡成本高昂。[1]

该规范将评估分为三个主要阶段:

  1. 引导和设置 吸收密码、盐和参数,然后初始化内存矩阵。
  2. 流浪 根据从不断演变的海绵状态导出的值重新访问并修改矩阵的行。时间成本参数控制重复工作。
  3. 包起来 吸收最终的矩阵值并从海绵中挤压所需的输出。

主要成本参数是徘徊通道的数量(时间)和内存矩阵的维度:行()和列(C)。海绵比特率为 ,矩阵占据 b×R×C 位。输出长度和海绵的底层排列、比特率、旋转和缩减轮数设置也是规范的一部分。[1] 这种可配置性使实施者能够提高处理时间,而不必增加内存,或者为具有更多内存的平台选择更大的矩阵。

该论文描述了两个命名扩展。 Lyra2-δ 更改漫游期间重新访问的矩阵单元的比例,以调整内存带宽使用。 Lyra2p 在共享矩阵的切片上运行多个同步海绵实例,以便合法的多核平台可以增加内存使用或工作,而不会增加相同的延迟。[1] 这些是研究设计的参数化变体,而不是独立标准。

安全理由

Lyra2 的作者设计了不断变化的内存访问模式和重复的行更新,以惩罚保留的内存少于配置数量的攻击者。被丢弃的行可能必须从早期状态重建,然后在稍后更新后再次重建,因此减少峰值内存会带来额外的工作。 作者还试图平衡对侧通道观察的抵制与对使用廉价、速度较慢的存储的实现的抵制,以及增加专用 FPGA 或 ASIC 实现的成本。[1] 这些是论文中的设计目标和分析;他们不保证每个实现或参数集都是安全的。

设置阶段使用可预测的访问模式,而漫游阶段从不断变化的内部状态中选择行。这种区别反映了一种权衡:依赖于数据的访问可能会增加对某些低内存策略的阻力,但可能会通过缓存或其他侧通道泄露信息。 该论文的替代方案和变体让实施者可以在权衡中选择不同的点,这意味着确切的版本和配置是任何安全声明的一部分。[1]

密码散列仍然受到密码质量和操作选择的限制。较低的内存或时间设置可降低攻击成本,而过多的设置可能会导致拒绝服务。实现还需要独特的盐、经过验证的参数存储、适当的恒定时间比较、有限的输入大小以及更强设置的迁移计划。

密码哈希竞赛

密码哈希竞赛邀请公众提出现代密码哈希标准的提案。 Lyra2 进入了最后一轮,并且是获得特别认可的四个方案之一(与 Ca​​tena、Makwa 和 yescrypt 一起)。 2015 年 7 月,评审团选出 Argon2 作为总冠军。[2]

特殊认可使 Lyra2 成为一项值得注意的研究设计,而不是普遍的部署建议。当前协议或平台指南可能会指定其他功能。例如,RFC 9106 为 Argon2id 提供了面向实施者的规范和推荐配置文件。[3]

用于工作量证明

带有 Lyra2 名称的修改结构已包含在某些加密货币使用的链式工作量证明算法中,包括 Lyra2RE 和 Lyra2REv2。这些挖掘算法结合了多种功能,可能会改变Lyra2的参数或角色。它们的使用不应被视为原始密码散列方案适合每个挖掘或密码存储应用程序的证据。

实施情况

作者随竞赛提交内容发布了参考材料和代码。应用程序应识别它们实现的确切版本和参数。从辅助伪代码复制算法、省略验证或选择过时的设置可能会破坏互操作性并使预期成本假设无效。

参考

外部链接