PBKDF2

✍ dations ◷ 2025-10-25 11:24:59 #PBKDF2

在密码学中, PBKDF1和PBKDF2 (基于密码的密钥派生函数 1和2 ,英语:Password-Based Key Derivation Function 1 and 2)是具有可变计算成本的密钥派生函数,可以降低面对蛮力攻击的脆弱性。

PBKDF2是RSA 实验室的公钥密码学标准(PKCS)系列的一部分,即 PKCS #5 v2.0,同时也作为互联网工程任务组的 RFC 2898发布。它取代了只能生成最长160位派生密钥的PBKDF1。2017年发布的RFC 8018(PKCS #5 v2.1)推荐使用PBKDF2进行密码哈希处理。

PBKDF2 将伪随机函数(英语:Pseudorandom function family)(例如基于散列的消息身份验证码,HMAC)与盐值一起应用于输入密码或密码词组,并多次重复该过程以生成派生密钥,然后可以将其用作后续过程的加密密钥。增加的计算工作使密码破解(英语:Password cracking)变得更加困难,这被称为密钥延伸 。

在2000年编写的标准建议最小迭代次数为1,000次,但随CPU性能的提高,该参数会随着时间的推移而增加。2005年的Kerberos标准推荐4,096次迭代;据报道,苹果公司在iOS 3中使用了2,000次,在iOS 4中使用了10,000次;而LastPass在2011年对JavaScript客户端使用了5,000次迭代,对服务器端哈希使用了100,000次迭代。 2023 年,OWASP建议PBKDF2-HMAC-SHA256使用600,000次迭代,PBKDF2-HMAC-SHA512使用210,000 次迭代。

在密码中添加盐会降低使用预计算的哈希值(彩虹表)进行攻击的能力,并且意味着必须单独测试多个密码,而不是一次测试所有密码。该标准建议盐长度至少为64位。美国国家标准与技术研究所推荐的长度为128位。

PBKDF2密钥推导函数有五个输入参数:

其中

派生密钥DK的每个hLen位的块Ti计算如下(使用+表示字符串拼接):

函数F是链式PRF的次迭代的异或( ^ )。PRF的第一次迭代使用作为PRF密钥,并将与编码为大端序32位整数的i(索引从1开始)拼接,作为输入。 PRF的后续迭代使用作为 PRF 密钥,并将先前PRF计算的输出作为输入:

其中

例如, WPA2使用:

PBKDF1过程更简单:初始 (在这个版本中称为 )由PRF(Password + Salt)创建,后面只是将上一轮的作为下一轮PRF的输入,即PRF(Uprevious) 。最后提取最终哈希的前位作为密钥。因此PBKDF1存在大小限制。

当使用 HMAC 作为其伪随机函数时,PBKDF2 有一个有趣的特性。可以简单地构造任意数量的不同密码对,并且每对密码对都存在冲突。如果提供的密码长于底层HMAC散列函数的块大小,则密码首先被预散列为摘要,然后该摘要用作密码。例如,以下密码太长:

因此,在使用 HMAC-SHA1 时,使用 SHA-1 将其预散列为:

可以用 ASCII 表示为:

这意味着无论盐或迭代次数如何,PBKDF2-HMAC-SHA1 都会为下列密码生成相同的密钥字节:

例如,使用:

下面两个函数调用:

PBKDF2-HMAC-SHA1("plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd", ...)PBKDF2-HMAC-SHA1("eBkXQTfuBqp'cTcar&g*", ...) 

将生成相同的派生密钥字节 ( 17EB4014C8C461C300E9B61518B9A18B )。这些派生密钥冲突并不代表存在安全漏洞,因为仍然必须知道原始密码才能生成密码的哈希值。利用这一性质,对于一些ZIP格式的加密压缩文件,可能存在两个可行的密码。

PBKDF2 的一个缺点是,尽管可以通过改变迭代次数来任意调整所需的计算时间,但它可以用一个小电路和很少的RAM来实现,这使得使用特殊应用集成电路(ASIC)或图形处理器(GPU)进行暴力攻击相对低廉。Bcrypt密码散列函数需要更大的RAM(但仍然不能单独调整,由给定的CPU时间决定)并且对此类攻击的抵抗力稍强, 而更现代的Scrypt密钥派生函数可以任意使用大量内存,因此更能抵抗ASIC和GPU攻击。

2013年举行的密码哈希竞赛(英语:Password Hashing Competition)(PHC)鼓励开发一种更具抵抗力的密码哈希方法。2015年7月20日,Argon2(英语:Argon2)被选为最终的获胜者,PHC还特别表彰了其他四种密码哈希方案:Catena、Lyra2(英语:Lyra2)、yescrypt和Makwa。另一种替代方法是气球哈希(英语:Balloon hashing),这是NIST密码指南(英语:Password_policy#NIST guidelines)中推荐的方法。

相关

  • 三位一体三位一体(拉丁语:Trinitas,又译为三一真神、天主圣三、三一神、圣三一、三一神论),基督教神学术语,是基督宗教神YHWH(新教常汉译为上帝或耶和华,天主教常汉译为天主雅威)的神学理论,建
  • 胡吉伐二世哈巴(Khaba)是埃及古王国时期的一位法老,一般认为其统治期接近于埃及第三王朝末期。他被认为是塞汉赫特的王位继承者。其统治期为四年,大概位于公元前2643年至2637年之间。 由于
  • 机会成本机会成本(Opportunity Cost, OC)是指决策过程中面临多项选择,当中被放弃而价值最高的选择(Highest-valued Option Forgone),又称为“替代性成本(Alternative Cost)”,就是俗语的“世
  • 长隆旅游度假区广州长隆旅游度假区位于中国广东省广州市番禺区大石街道,经营者是广东长隆集团。目前拥有长隆欢乐世界、香江野生动物世界、长隆水上乐园、长隆国际大马戏、长隆飞鸟乐园五个
  • 马尼乌斯·阿基利乌斯 (前101年执政官)马尼乌斯·阿基利乌斯(拉丁语:Manius Aquillius,?-前88年)是公元前101年的罗马执政官。他可能为前129年执政官马尼乌斯·阿基利乌斯之子,还是盖乌斯·马略的忠实拥护者。在马略第四
  • 2,4-二硝基苯酚2,4-二硝基苯酚(英语:2,4-Dinitrophenol,简称DNP),分子式C6H4N2O5,是一种细胞代谢毒素。DNP能够通过运送质子通过线粒体膜使氧化磷酸化解偶联化,使得能量被大量消耗却不被用来制造A
  • 叶夫根尼·列昂诺夫叶夫根尼·列昂诺夫(俄语:Евгений Павлович Леонов;1926年9月2日-1994年1月29日)是一个著名的俄罗斯演员。他参加了许多著名的苏联电影的演出工作。他被称
  • 大维斯巴赫峰坐标:47°9′25″N 12°45′18″E / 47.15694°N 12.75500°E / 47.15694; 12.75500大维斯巴赫峰(德语:Großes Wiesbachhorn),是奥地利的山峰,位于该国西部,由萨尔兹堡州负责管辖,
  • 卡瓦耶斯让·卡瓦耶斯(法语:Jean Cavaillès,法语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000
  • 赵鹏程 (万历进士)赵鹏程(1576年-?年),字伯翔,号翀南,山东登州府莱阳县人,民籍,治《书经》,年三十四岁中式万历三十八年庚戌科第三甲第二百十四名进士。丙子正月初九日生,行一,曾祖赵文祥;祖赵金福;父赵启思,庠生赠文林郎□□□□;母任氏(赠孺人)。永感下,妻李氏(封孺人),兄一举(儒官),弟鹏化;一祥;鹏翮;鹏翼;鹏抟;鹏徙;鹏运,子锡㣧;锡衮;锡极;锡圭;锡诰。由增生中式丁酉乡试六十九名举人,会试中式二百八十五名。授通政司观政,辛亥授山西太原县知县,壬子本省同考,本年调繁阳曲县,丙辰行取,丁巳授刑部河南主事。