Scrypt:修订间差异
创建页面,内容为“'''scrypt'''(念作“ess crypt”)<ref>X 上的 Colin Percival [https://x.com/cperciva/status/734613598383841281 For the record, "scrypt" is pronounced "ess crypt". Like bcrypt, except with an S instead of the B. It is NOT pronounced "script".”]</ref>,是加拿大计算机科学家暨计算机安全研究人员科林·珀西瓦尔(Colin Percival)于2009年所发明的密钥派生函数,当初设计用在他所创立的Tarsnap服务上<ref>Tarsnap…” |
无编辑摘要 |
||
第1行: | 第1行: | ||
'''scrypt'''(念作“ess crypt”)<ref>X 上的 Colin Percival [https://x.com/cperciva/status/734613598383841281 For the record, "scrypt" is pronounced "ess crypt". Like bcrypt, except with an S instead of the B. It is NOT pronounced "script".”]</ref>,是加拿大计算机科学家暨计算机安全研究人员科林·珀西瓦尔(Colin Percival)于2009年所发明的密钥派生函数,当初设计用在他所创立的Tarsnap服务上<ref>Tarsnap - [https://www.tarsnap.com/scrypt.html The scrypt key derivation function and encryption utility]</ref>。设计时考虑到大规模的客制硬件攻击而刻意设计需要大量记忆体运算。2016年,scrypt算法发布在RFC 7914。scrypt的简化版被用在数个密码货币的工作量证明(Proof-of-Work)上。 | '''scrypt'''(念作“ess crypt”)<ref>X 上的 Colin Percival [https://x.com/cperciva/status/734613598383841281 For the record, "scrypt" is pronounced "ess crypt". Like bcrypt, except with an S instead of the B. It is NOT pronounced "script".”]</ref>,是加拿大计算机科学家暨计算机安全研究人员科林·珀西瓦尔(Colin Percival)于2009年所发明的密钥派生函数,当初设计用在他所创立的Tarsnap服务上<ref>Tarsnap - [https://www.tarsnap.com/scrypt.html The scrypt key derivation function and encryption utility]</ref>。设计时考虑到大规模的客制硬件攻击而刻意设计需要大量记忆体运算。2016年,scrypt算法发布在RFC 7914。scrypt 的简化版被用在数个密码货币的[[工作量证明(PoW)|工作量证明(Proof-of-Work)]]上,首次由一位匿名程序员 ArtForz 在 Tenebrix 中实现,随后 Fairbrix 和 Litecoin 也很快采用了该方案。 | ||
== 概述 == | == 概述 == | ||
Scrypt 需要使用大量记忆体的原因来自于产生大量伪随机性(英语:pseudorandom)资料作为算法计算的基础。一旦这些资料被产生后,算法将会以伪随机性的顺序读取这些资料产生结果。因此最直接的实做方式将会需要大量记忆体将这些资料储存在记忆体内供算法计算。 | |||
另外一方面,由于伪随机性资料是透过算法产生,在实做上也可以在需要存取时再计算以降低记忆体使用量。但由于计算成本很高,这个实做方法将大幅降低算法的速度。 | 另外一方面,由于伪随机性资料是透过算法产生,在实做上也可以在需要存取时再计算以降低记忆体使用量。但由于计算成本很高,这个实做方法将大幅降低算法的速度。 | ||
这就是scrypt设计时考虑到的时空权衡,攻击者可以使用后者的方法但计算速度很慢,或是用前者的方法但因记忆体成本而难以大规模平行化。 | 这就是scrypt设计时考虑到的时空权衡,攻击者可以使用后者的方法但计算速度很慢,或是用前者的方法但因记忆体成本而难以大规模平行化。 | ||
基于密码的密钥派生函数(密码基 KDF)通常设计为计算密集型的,以便计算过程需要相对较长的时间(例如几百毫秒)。合法用户每次操作(例如身份验证)只需执行一次该函数,因此所需的时间可以忽略不计。然而,暴力破解攻击可能需要执行数十亿次操作,在这种情况下,所需的时间变得显著,并且理想情况下,应该是禁止性的。 | |||
之前的基于密码的 KDF(例如 RSA 实验室的流行 PBKDF2)资源需求相对较低,这意味着它们不需要复杂的硬件或大量内存来执行。因此,它们可以轻松且廉价地在硬件中实现(例如在 ASIC 或甚至 FPGA 上)。这使得攻击者可以利用足够的资源,通过在硬件中构建数百甚至数千个该算法的实现,并让每个实现搜索密钥空间的不同子集,从而发起大规模并行攻击。这种方法通过可用实现的数量将完成暴力破解攻击所需的时间分摊,可能将其缩短到合理的时间范围。 | |||
scrypt 函数的设计旨在通过提高算法的资源需求来阻碍这种攻击。具体而言,该算法设计为使用大量内存,相较于其他基于密码的 KDF,使硬件实现的大小和成本大大增加,从而限制了攻击者在给定财务资源的情况下可以使用的并行性。 | |||
== 密码货币上的使用 == | == 密码货币上的使用 == | ||
Scrypt 被用在数个密码货币的工作量证明算法上。首先被 Tenebrix 所使用(2011年9月),而后被[[莱特币(Litecoin)]]与[[狗狗币(Dogecoin)]]所采用。因GPU在计算使用scrypt的密码货币较CPU有效率,这导致了高阶显卡在2013年年底的短缺<ref>[https://www.extremetech.com/internet/172381-massive-surge-in-litecoin-mining-leads-to-radeon-shortage Massive surge in Litecoin mining leads to graphics card shortage] | Extremetech</ref>。 | Scrypt 被用在数个密码货币的工作量证明算法上(更准确地说,是作为 Hashcash 工作量证明算法中的哈希函数)。首先被 Tenebrix 所使用(2011年9月),而后被[[莱特币(Litecoin)]]与[[狗狗币(Dogecoin)]]所采用。因GPU在计算使用scrypt的密码货币较CPU有效率,这导致了高阶显卡在2013年年底的短缺<ref>[https://www.extremetech.com/internet/172381-massive-surge-in-litecoin-mining-leads-to-radeon-shortage Massive surge in Litecoin mining leads to graphics card shortage] | Extremetech</ref>。 | ||
2014年起,市场上已经有使用ASIC计算scrypt算法的挖矿机<ref>[https://www.ccn.com/zeusminer-delivers-lightning-thunder-cyclone-scrypt-asics-litecoin-dogecoin-mining/ Zeusminer Delivers Lightning, Thunder, and Cyclone Scrypt ASICs For Litecoin And Dogecoin Mining] Last Updated March 28, 2023 By Guest Writer</ref>。 | 2014年起,市场上已经有使用ASIC计算scrypt算法的挖矿机<ref>[https://www.ccn.com/zeusminer-delivers-lightning-thunder-cyclone-scrypt-asics-litecoin-dogecoin-mining/ Zeusminer Delivers Lightning, Thunder, and Cyclone Scrypt ASICs For Litecoin And Dogecoin Mining] Last Updated March 28, 2023 By Guest Writer</ref>。 |
2024年12月16日 (一) 06:02的最新版本
scrypt(念作“ess crypt”)[1],是加拿大计算机科学家暨计算机安全研究人员科林·珀西瓦尔(Colin Percival)于2009年所发明的密钥派生函数,当初设计用在他所创立的Tarsnap服务上[2]。设计时考虑到大规模的客制硬件攻击而刻意设计需要大量记忆体运算。2016年,scrypt算法发布在RFC 7914。scrypt 的简化版被用在数个密码货币的工作量证明(Proof-of-Work)上,首次由一位匿名程序员 ArtForz 在 Tenebrix 中实现,随后 Fairbrix 和 Litecoin 也很快采用了该方案。
概述[编辑 | 编辑源代码]
Scrypt 需要使用大量记忆体的原因来自于产生大量伪随机性(英语:pseudorandom)资料作为算法计算的基础。一旦这些资料被产生后,算法将会以伪随机性的顺序读取这些资料产生结果。因此最直接的实做方式将会需要大量记忆体将这些资料储存在记忆体内供算法计算。
另外一方面,由于伪随机性资料是透过算法产生,在实做上也可以在需要存取时再计算以降低记忆体使用量。但由于计算成本很高,这个实做方法将大幅降低算法的速度。
这就是scrypt设计时考虑到的时空权衡,攻击者可以使用后者的方法但计算速度很慢,或是用前者的方法但因记忆体成本而难以大规模平行化。
基于密码的密钥派生函数(密码基 KDF)通常设计为计算密集型的,以便计算过程需要相对较长的时间(例如几百毫秒)。合法用户每次操作(例如身份验证)只需执行一次该函数,因此所需的时间可以忽略不计。然而,暴力破解攻击可能需要执行数十亿次操作,在这种情况下,所需的时间变得显著,并且理想情况下,应该是禁止性的。
之前的基于密码的 KDF(例如 RSA 实验室的流行 PBKDF2)资源需求相对较低,这意味着它们不需要复杂的硬件或大量内存来执行。因此,它们可以轻松且廉价地在硬件中实现(例如在 ASIC 或甚至 FPGA 上)。这使得攻击者可以利用足够的资源,通过在硬件中构建数百甚至数千个该算法的实现,并让每个实现搜索密钥空间的不同子集,从而发起大规模并行攻击。这种方法通过可用实现的数量将完成暴力破解攻击所需的时间分摊,可能将其缩短到合理的时间范围。
scrypt 函数的设计旨在通过提高算法的资源需求来阻碍这种攻击。具体而言,该算法设计为使用大量内存,相较于其他基于密码的 KDF,使硬件实现的大小和成本大大增加,从而限制了攻击者在给定财务资源的情况下可以使用的并行性。
密码货币上的使用[编辑 | 编辑源代码]
Scrypt 被用在数个密码货币的工作量证明算法上(更准确地说,是作为 Hashcash 工作量证明算法中的哈希函数)。首先被 Tenebrix 所使用(2011年9月),而后被莱特币(Litecoin)与狗狗币(Dogecoin)所采用。因GPU在计算使用scrypt的密码货币较CPU有效率,这导致了高阶显卡在2013年年底的短缺[3]。
2014年起,市场上已经有使用ASIC计算scrypt算法的挖矿机[4]。
参考链接[编辑 | 编辑源代码]
- ↑ X 上的 Colin Percival For the record, "scrypt" is pronounced "ess crypt". Like bcrypt, except with an S instead of the B. It is NOT pronounced "script".”
- ↑ Tarsnap - The scrypt key derivation function and encryption utility
- ↑ Massive surge in Litecoin mining leads to graphics card shortage | Extremetech
- ↑ Zeusminer Delivers Lightning, Thunder, and Cyclone Scrypt ASICs For Litecoin And Dogecoin Mining Last Updated March 28, 2023 By Guest Writer