到这些保证 。
但解密消息或验证消息鉴别码的一方不能确定另一方提供的盐实际上是随机产生
的 。例如,有可能盐是从另一个基于口令的操作中拷贝的,试图利用同一个密钥的多个
用户间的相互影响 。假设两个合法方交换一段加密过的消息,其中加密密钥是从一个共
享口令使用盐导出的80位的密钥 。对手能从密文中取出盐,并把它提供给另一方,尽
管它本来适用于40位的密钥 。假如一方用40位的密钥提示了解密的结果,对手可能解
出40位密钥 。在40位密钥是80位密钥头一半的情况下,对手然后能很轻易地解开80
位密钥的剩下40位 。
为了防止这样的攻击,或者应仔细分析同一个密钥的多个用户之间的相互影响,或
者盐应包含能明确区分不同操作的数据 。例如,盐可以有一个附加的、非随机的字节,
指定导出密钥是用于加密、消息认证,或一些其它操作 。
基于以上这些,对盐的选择作以下推荐:
1. 假如不考虑用支持一给定口令的基于口令的加密和认证技术的拥有同一
个密钥(或该密钥的一个前缀)的多个用户之间的相互影响的话,那么盐可
以随机产生,接收到盐的一方不必检查是否符合特定格式 。盐应至少八字
节(64位)长 。
2. 否则,除了至少八字节长的随机部分外,盐应包括能明确区分不同操作和
不同密钥长度的数据,而该数据应能被接收盐的一方检查或重新生成 。比
如,盐应包含一个附加的、非随机的字节指定导出密钥的用途 。另一种办
法是,它可以是指定有关导出密钥的具体信息的结构的编码,比如加密或
认证技术,以及在由口令导出的不同密钥中的序列号 。附加数据的非凡格
式留给应用定义 。
注重,假如没有随机数或伪随机数发生器,产生盐(或它的随机部分)的一个确定性
的替代法是对口令和待处理的消息M应用一个基于口令的密钥导出函数 。例如,盐可
用S=KDF(P,M)的密钥导出函数计算 。但假如已知消息M属于一个小的消息空间(例
如"Yes"或"No"),不推荐使用该方法,因为可能盐的数量很小 。
4.2迭代计数
迭代计数传统上用于增加从一口令生成密钥的代价,从而增加攻击的难度 。对于本
文档的方法,推荐最小1000迭代 。这将显著增加对口令穷举搜索的代价,但对导出单
个密钥的代价没有明显的影响 。
5密钥导出函数
密钥导出函数从一个基础密钥和其它参数产生一个导出密钥 。在基于口令的密钥导出
函数中,基础密钥是口令,其它参数是一盐值和一迭代次数,正如第3节描述的 。
这里定义的基于口令的密钥导出函数的主要应用在于第6节的加密策略和第7节的消息
验证策略 。由于这些函数的独立定义,其它的应用肯定是可能的 。
本节详述两个函数:PBKDF1和PBKDF2 。推荐新的应用使用PBKDF2;PBKDF1只为
同已有应用兼容,对新的应用不推荐使用 。
这里定义的密钥导出函数的一个典型应用可能包括以下几步:
1. 选择一个盐S和一个迭代次数c,如第4节所述 。
2. 选择导出密钥的字节长度,dkLen 。
3. 将密钥导出函数应用于口令、盐、迭代次数和密钥长度以生成一个导出密钥 。
4. 输出导出的密钥 。
通过改变盐可从一个口令导出任意数量的密钥,正如第3节描述的那样 。
5.1PBKDF1
PBKDF1应用一个散列函数导出密钥,散列函数可以是MD2、MD5或SHA-1 。导出密钥的
长度受散列函数输出的长度的限制,MD2和MD5是16字节,SHA-1是20字节 。PBKDF1同PKCS#5
- 基于MPLS的流量工程要求
- Linux下基于DNS的多机均衡负载的实现
- 光以太网基于LAN的WAN
- 支付宝吱口令怎么关闭 停用当前吱口令的方法介绍
- 微信中发语音口令红包具体操作方法
- 基于H.323标准的IP电话附加业务
- 基于VoIP技术的新一代话音业务
- 基于分组网的多媒体视听业务的发展
- 报花名绕口令 绕口令的相关知识
- 支付宝口令红包怎么领取
