rfc2898:PKCS #5:基于密码的密码系统说明书版本 2.0.B

组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:陶志荣(dick_hw jerrytaowx@263.net)
译文发布时间:2002-1-9
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保留本文档的翻译及版权信息。

Network Working Group
Request for Comments: 2898
Category: Informational

B. Kaliski
RSA Laboratories
September 2000

本备忘录的状态

本文档为Internet社区提供信息。 它并未定义任何Internet标准。本备忘录的发布不受任何限制。

版权声明

Copyright (C) The Internet Society (2000). All Rights Reserved.

摘要

本备忘录代表源自RSA实验室的公钥密码系统标准(PKCS)系列的PKCS #5 v2.0的再版,
变更控制仍保留在PKCS过程。该文档的主体,除了安全性考虑一节,都是直接从那个规范
中获得的。

本文档提供基于口令的密码系统的实现建议,覆盖密钥导出函数,加密方案,消息鉴别方案,及与该技术等同的ASN.1语法。

建议的意图是供计算机和通信系统的一般程序使用,因此包括了相当数量的灵活性。它们特别为敏感信息的保护设计,例如PKCS #8[25]中的私钥。期望有基于这些规范的应用标准和实现轮廓可能包括附加的约束。

其它基于口令的密码技术,例如基于口令的密钥实体认证和密钥建立协议[4][5][26]不在本文档范围。口令的选取原则也不在本文档范围。

1.介绍

本文档为基于口令的密钥系统的实现提供建议,包括了下列的方面:

  • 密钥导出函数
  • 加密方案
  • 消息鉴别方案
  • 与该技术等同的ASN.1语法

建议的意图是供计算机和通信系统的一般程序使用,照此包括了相当数量的灵活性。它们特别为敏感信息的保护设计,例如PKCS #8[25]中的私钥。期望有基于这些规范的应用标准和实现轮廓可能包括附加的约束。

其它基于口令的密码技术,例如基于口令的密钥实体认证和密钥建立协议[4][5][26]不在本文档范围。口令的选取原则也不在本文档范围。本文档取代PKCS #5 v1.5[24],但包含的技术是与之兼容的。

2.记法

  • C 密文,一个字节串
  • c 迭代次数,一个正整数
  • DK 导出密钥,一个字节串
  • DkLen 导出密钥的字节长度,一个正整数
  • EM 编码,一个字节串
  • Hash 基础的哈希函数
  • HLen 伪随机函数输出的字节长度,一个正整数
  • l 导出密钥的块长度,一个正整数
  • IV 初始向量,一个字节串
  • K 加密密钥,一个字节串
  • KDF 密钥导出函数
  • M 消息,一个字节串
  • P 口令,一个字节串
  • PRF 基础的伪随机函数
  • PS 填充串
  • psLen 填充串的字节长度,一个正整数
  • S 盐,一个字节串
  • T 消息鉴别码,一个字节串
  • T_1,…,T_1,U_1,…,U_c 中间数,一个字节串
  • 01,02,…,08 值为1,2,…,8的字节
  • /xor 两个字节串的按位异或
  • || || 字节长度操作符
  • || 级联操作符
  • <i..j> 子串抽取操作符:抽取字节i到j,0 <= i <= j

3.概览

在公钥密钥学的许多应用中,用户安全性最终取决于一个或多个秘密文本值或口令。口令不是直接可用作任何传统密码系统的密钥,相反,需要对口令进行一些处理才能用它进行密码操作。此外,由于口令通常是从一个相对小的空间选取的,处理中要求特殊的考虑以防止搜索攻击。

基于口令的密码术的一个通用方法,由Morris和Thompson描述,用于口令表的保护,是把口令与盐结合以产生密钥。可把盐看作是对从口令导出的一个大密钥集合的索引,不需要保密。尽管攻击者有可能构造一个可能口令表(称作“字典攻击”),但构造一个可能密钥表是很困难的,因为每个口令将有许多可能的密钥。对手将不得不为每一个盐单独搜索口令。

基于口令的密码术的另一个方法是构建相对昂贵的密钥导出技术,由此增加穷举搜索的代价。作法之一是在密钥导出技术中包括一个迭代次数,指示迭代多少次密钥导出的一些基本函数。一个适度的迭代次数,比如说1000,对合法方来说不可能是计算密钥时的负担,但对对手来说是一个很大的负担。
盐和迭代次数构成了PKCS #5 v1.5中基于口令加密的基础,在这里同样为各种密码操作所采用。这样,这里定义的基于口令的密钥导出是口令、盐和迭代次数的一个函数,其中后两个量不需要保密。

从基于口令的密钥导出函数,定义基于口令的加密和消息鉴别方案就简单了。正如PKCS #5 v1.5中,这里的基于口令的加密方案是基于一个基本的、传统加密方案,传统方案的密钥是从口令导出的。相似地,基于口令的消息鉴别方案也基于一个基本的传统方案。这两个层次的方法使基于口令的技术按照基于的基础技术模块化。期待基于口令的密钥导出函数找到除了这里定义的加密和消息鉴别方案以外的其它应用。比如,用密钥导出函数的一个单个应用导出一个密钥集合。集合中的密钥作为密钥导出函数的输出的子串得到。该方法可在面向会话的协议中用作密钥建立的一部分。另外一个应用是口令检查,密钥导出函数的输出被存储(同盐和迭代次数一道)用于后续的验证口令的目的。

在本文档中,口令被视作一个任意长度的字节串,对其作为文本串的解释不作指定。但为了互操作性,建议应用遵循某些通用的文本编码规则。ASCII和UTF-8[27]是两种可能的选择。(ASCII是UTF-8的一个子集。)

尽管口令的选择不在本文档的范围,已有指导原则发布[17],可供考虑。

4.盐和迭代次数

由于盐和迭代次数是本文档定义的技术的中心,有理由进行一些深入的讨论。

4.1盐

基于口令的密码技术中的盐传统上用于产生对应于一给定口令的一个大集合的密钥,依据该盐值从中随机选取一个密钥。运用一密钥导出函数选择集合中的一个密钥,即:

DK = KDF(P, S)

其中DK是导出密钥,P是口令,S是盐。这有两个好处:

1. 预计算和口令字典相对应的所有密钥甚至最相像密钥是困难的。例如,如果盐是64位长,对每个口令来说,将有多达2^64个密钥。在基于口令的操作被执行并且得知盐后,对手只有搜索口令。

2. 同一个密钥不可能被选择两次。再者,如果盐是64位长,依据生日悖论,在大约2^32个密钥已被产生之前,密钥间“碰撞”的机率并不大。这解决了对相同密钥的多个用户之间相互影响的顾虑,可能适用于某些加密和认证技术。在基于口令的的加密中,加密消息的一方只需在从一口令导出加密密钥时选择一个
大的、足够随机的盐就能保证获得这些好处。产生消息鉴别码的一方能以类似的方式得到这些保证。

但解密消息或验证消息鉴别码的一方不能确定另一方提供的盐实际上是随机产生的。例如,有可能盐是从另一个基于口令的操作中拷贝的,试图利用同一个密钥的多个用户间的相互影响。假设两个合法方交换一段加密过的消息,其中加密密钥是从一个共享口令使用盐导出的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.1 PBKDF1

PBKDF1应用一个散列函数导出密钥,散列函数可以是MD2、MD5或SHA-1。导出密钥的长度受散列函数输出的长度的限制,MD2和MD5是16字节,SHA-1是20字节。PBKDF1同PKCS#5 v1.5的密钥导出过程相兼容。

建议PBKDF1只用于同已有应用的兼容,因为它产生的密钥对某些应用来说不够大。

PBKDF1 (P, S, c, dkLen)

可选项: Hash 基本散列函数

输入
P 口令,字节串
S 盐,一八字节串
c 迭代次数,正整数

dkLen 导出密钥的意定字节长度,正整数,MD2或MD5最多16,SHA-1最多20

输出: DK 导出密钥,dkLen字节

步骤:

1. 如果对于MD2和MD5,dkLen>16,或对于SHA-1,dkLen>20,(即dkLen大于散列函数的输出长度),输出“derived key too long”并停止。

2. 对口令P和附加盐S的串联应用基本散列函数,重复c次,然后抽取第一个dkLen字节以产生一导出密钥DK:

T_1 = Hash (P || S) ,
T_2 = Hash (T_1) ,
...
T_c = Hash (T_{c-1}) ,
DK = Tc<0..dkLen-1>

3. 输出导出密钥DK。

5.2 PBKDF2

PBKDF2应用一个伪随机函数(例子见附录B.1)以导出密钥。导出密钥的长度本质上是没有限制的。(但是,导出密钥的最大有效搜索空间受限于基本伪随机函数的结构。进一步的讨论参见附录B.1。)对新的应用推荐使用PBKDF2。

PBKDF2(P,S,c,dkLen)

可选项: RPF 基本伪随机函数(hLen表示伪随机函数输出的字节长度)

输入: 
P 口令,一字节串
S 盐,字节串c 迭代次数,正整数dkLen 导出密钥的意定字节长度,正整数,最大约(2^32-1)*hLen

输出: DK 导出密钥,长度dkLen字节

步骤:

1. 如果dkLen>(2^32-1)*hLen,输出“derived key too long”并停止。
2. 假设l是导出密钥的hLen个字节块的个数,r表示最后一个块的字节数。

l = CEIL (dkLen / hLen) ,
r = dkLen - (l - 1) * hLen .

这里,CEIL(x)是“ceiling”函数,即,大于或等于x的最小整数。

4. 对于导出密钥的每一块,运用函数F于口令P、盐S、迭代次数c和块索引以计算块:

T_1 = F (P, S, c, 1) ,
T_2 = F (P, S, c, 2) ,
...
T_l = F (P, S, c, l) ,

这里函数F定义为基本伪随机函数PRF应用于口令P和盐S的串联和块索引i的前c次循环的异或和。

F (P, S, c, i) = U_1 /xor U_2 /xor ... /xor U_c

其中

U_1 = PRF (P, S || INT (i)) ,
U_2 = PRF (P, U_1) ,
...
U_c = PRF (P, U_{c-1}) .

这里,INT(i)是整数i的四字节编码,高字节在先。

3. 串联各块,抽取前dkLen字节以产生导出密钥DK:

DK = T_1 || T_2 || ... || T_l<0..r-1>

4. 输出导出密钥DK。

注意:函数F的构造遵循“belt-and-suspenders”方法。U_i次循环被递归计算以消除敌手的并行度;它们被异或到一起以减少有关递归退化到一个小的值集的担忧。

6.加密程序

在对称设置中,加密程序包括加密操作的解密操作,其中加密操作在一个密钥作用下从一个消息产生密文,而解密操作在同一个密钥作用下从密文恢复消息。在基于口令的加密 策略中,密钥就是口令。

基于口令的加密方法的一个典型应用是私钥保护方法,其中消息包括私钥信息,如PKCS#8中的那样。这里定义的加密策略在那种情况下是合适的加密算法。本节详述的两个策略是PBES1和PBES2。PBES2推荐给新的应用,PBES1只为了同已有应用的兼容。

6.1 PBES1

PBES1结合了PBKDF1函数和一个基础的块加密,可以是CBC模式下的DES或RC2?。PBES1同PKCS#5 v1.5中加密策略相兼容。

6.1.1 加密操作

在口令P作用下加密消息M以产生密文C,包括以下步骤:

1.导出函数(5.1节)到口令、附加盐S和迭代次数,以产生长度为16字节的导出密钥DK:

DK = PBKDF1 (P, S, c, 16) .

3. 分割导出密钥DK成由DK的前8字节组成的加密密钥K,和一包含下8 个字节的初始化向量IV:

K = DK<0..7> ,
IV = DK<8..15> .

4. 连接M和一填充串PS,以形成一编码消息EM:

EM = M || PS ,

其中填充串PS由8-(||M|| mod 8) 个字节组成,每个的值是8-(||M|| mod 8).填充串PS满足以下的表达式:

PS = 01, if ||M|| mod 8 = 7 ;
PS = 02 02, if ||M|| mod 8 = 6 ;
...
PS = 08 08 08 08 08 08 08 08, if ||M|| mod 8 = 0.

编码消息的字节长度将是8的倍数,从编码消息中可以无歧义地恢复出消息M。(填充规则来自于RFC 1423。

5.在加密密钥K和初始向量IV下,用基本块密码算法以CBC模式加密编码消息EM,以产生密文C。对于DES,密钥K应被看作一56位DES密钥并且奇位忽略的64位编码。对于 RC2,“有效密钥位“应为64位。

6.输出密文C。

盐S和迭代次数c应以一AlgorithmIdentifier值传递给执行解密的一方。(见附录A.3)

6.1.2 解密操作

PBES1的解密操作包括以下步骤,在口令P的作用下解密密文C以恢复消息M:

1. 获取八字节盐S和迭代次数c。

2. 应用PBKDF1密钥导出函数(5.1节)于口令P、附加盐S和迭代次数以产生长度为16字节的导出密钥:

DK = PBKDF1 (P, S, c, 16)

3. 分割导出密钥DK,由DK的前8 字节组成一加密密钥K, 和由下8字节组成的初始向量IV:

K = DK<0..7> ,
IV = DK<8..15> .

4. 在加密密钥K和初始向量IV作用下,用基本块密码算法(DES或RC2)以CBC模式解密密文,以恢复编码消息EM。如果密文的字节长度不是8的倍数,输出“解密错”并停止。

5. 把编码消息EM分割成一消息M和一填充串PS:

EM = M || PS ,

其中填充串PS由psLen个字节组成,每个的值是psLen,其中psLen介于1和8之间。如果不可能以这种方式分割编码消息EM,输出“解密错”并停止。

6. 输出恢复的消息M。

6.2 PBES2

PBES2结合一个基于口令的密钥导出函数,在PKCS#5的本版本中应为PBKDF2(5.2节)和一基本的加密策略(例子见附录B.2)。基本加密策略的密钥长度和任何其它参数依赖于策略。新的应用推荐使用PBES2。

6.2.1加密操作

PBES2的加密操作包括以下步骤,应用一选择的密钥导出函数KDF和一选择的基本加密策略,以在口令P的作用下加密消息M以产生密文C:

  1. 如第4节所述,选择一盐S和一迭代次数c。
  2. 为基本加密方法的导出密钥选择字节长度dkLen。
  3. 应用选择的密钥导出函数于口令P、盐S和迭代次数c,以产生长度dkLen字节的导出密钥。
  4. 在导出密钥K的作用下用基本加密方法加密消息M以产生密文C(依赖于基本策略,这一步可能包括诸如初始向量和填充等参数的选择)。
  5. 输出密文C。
  6. 盐S和迭代次数、密钥长度dkLen、密钥导出函数的标识符和基本的加密策略可以一AlgorithmIdentifier值传给执行解密的一方(见附录A.4)。

6.2.2 解密操作

PBES2的解密操作包括以下步骤,在口令的作用解密密文C以恢复消息M:

  1. 获取该操作所用的盐S。
  2. 为密钥导出函数获取迭代次数。
  3. 获取基本加密方法的导出密钥的字节长度dkLen。
  4. 应用选择的密钥导出函数于口令P、盐S和迭代次数以产生长度为dkLen字节的导出密钥DK:DK = KDF (P, S, c, dkLen)。
  5. 用基本加密方法在导出密钥DK的作用下解密密文C以恢复消息M。如果解密函数输出“解密错”,那么输出“解密错”并停止。
  6. 输出恢复的消息M。

7.消息验证方式

消息验证策略包括一个MAC(消息验证码)产生操作和一个MAC验证函数操作,其中MAC产生操作在一个密钥作用下从一个消息产生一个消息验证码,MAC验证操作在同一个密钥下验证MAC。在基于口令和消息验证策略中,密钥就是口令。该节详述的一个策略是:PBMAC1。

7.1 PBMAC1

PBMAC1结合了一个基于口令的密钥导出函数,对于PKCS#5的本版本中应为PBKDF2(5.2节),和基本的消息验证策略(例子见附录B.3)。基本消息验证策略的密钥长度和任何其它参数都依赖于策略。

7.1.1 MAC生成

PBMAC1的MAC生成操作应用一选择的密钥导出函数KDF和一选择的基本消息验证策略,在口令P下处理消息M以产生一消息验证码T,包括以下步骤:

  1. 如第4节所述,选择一盐S和一迭代次数c。
  2. 为基本消息验证函数的导出密钥选择字节长度dkLen。
  3. 应用选择的密钥导出函数于口令P、盐S和迭代次数c,以产生一长度为dkLen字节的导出密钥DK:DK = KDF (P, S, c, dkLen)。
  4. 在导出密钥DK作用下,用基本消息验证策略处理消息M,以产生一消息验证码T。
  5. 输出消息验证码T。

盐S、迭代次数c、密钥长度L、密钥导出函数的标识符,和基本消息验证策略可以一AlgorithmIdentifier值传递给执行验证的另一方。

7.1.2 MAC验证

PBMAC1的MAC验证操作在口令P的作用下处理消息M以验证一消息验证码T,包括以下步骤:

  1. 获取盐S和迭代次数c。
  2. 为基本消息验证方式的导出密钥获取密钥的字节长度dkLen.
  3. 应用选择的密钥导出函数于口令P、盐S和迭代次数c,以产生长度为dkLen字节的导出密钥DK:DK = KDF (P, S, c, dkLen) .
  4. 在导出密钥DK下用基本消息验证方式处理消息M以产生一消息验证码T。
  5. 如果消息验证码证实,输出“correct”,否则输出“incorrect”。

8.安全考虑

基于口令密码术在它能提供的安全上通常受限,特别在本文档定义的那些方法,离线口令搜索是可能的情况。在盐和迭代次数的使用能增加攻击的复杂度的同时,很好地选择口令是基本的,应把相应的指导原则考虑进去。如果口令存储的话,口令被很好地保护也是重要的。

通常,从不同用户的一个口令导出的密钥也应不同,以减少意料之外的干扰的可能性。对于使用同一算法的基于口令的加密方法,随机盐已足够确保产生不同的密钥。在某些其它情况正如第4节所述的,结构化的盐是必须的。当选择盐值时第4节中的建议就加以考虑。

9.作者地址

Burt Kaliski
RSA Laboratories
20 Crosby Drive
Bedford, MA 01730 USA
EMail: bkaliski@rsasecurity.com

附录A ASN.1语法

该节定义密钥导出函数的ASN.1语法,加密方法、消息认证方法和支撑技术。这些定义的意定应用包括PKCS#8和密钥管理、加密数据和集成保护数据的其它语法。

对象标识符pkcs-5标识OID树的弧,本节中PKCS#5特有的OID从中导出:

rsadsi OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840) 113549}
pkcs OBJECT IDENTIFIER ::= {rsadsi 1}
pkcs-5 OBJECT IDENTIFIER ::= {pkcs 5}
A.1 PBKDF1

PBKDF1没有给出对象标识符,PBES1的对象标识符对已有应用已足够,对新的应用推荐使用PBKDF2。

A.2 PBKDF2

对象标识符id-PBKDF2标识PBKDF2密钥导出函数(5.2节)。

id-PBKDF2 OBJECT IDENTIFIER ::= {pkcs-5 12}

在AlgorithmIdentifier中,同该OID相关联的参数域应有类型PBKDF2-params:

PBKDF2-params ::= SEQUENCE {
salt CHOICE {
specified OCTET STRING,
otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}
},
iterationCount INTEGER (1..MAX),
keyLength INTEGER (1..MAX) OPTIONAL,
prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1 }

类型PKDF2-params域有以下含义:

- salt指定盐值,或盐值的来源。它应是一字节串,或是其OID在集合PBKDF2-SaltSources的一算法ID,被PKCS#5保留给将来的版本。

Salt-Source方法被设计用于指示如何产生盐值,作为算法ID中的参数和应用数据,或两者皆有。例如,它可能指示盐值产生于从指定有关导出密钥的详细信息的结构的编码,如第4节所建议的。有些信息可能被带到别处,比如在加密算法ID。但是,这些功能被延迟到PKCS#5的将来版本。

在该节中,一应用可能通过在指定的选择中选择盐值的特殊解释,达到节4.1提到的好处。

PBKDF2-SaltSources ALGORITHM-IDENTIFIER ::= { ... }

  • iterationCount指定迭代次数。允许的最大迭代次数依赖于实现。期待实现轮廓(profile)进一步约束范围。
  • keyLength,可选项,是导出密钥的字节长度。允许的最大密钥长度依赖于实现;期待实现轮廓(profile)进一步约束范围。提供该域只为了方便使用。如果顾虑一盐值用不同密钥长度的操作的相互干扰 ???
  • prf标识下层的伪随机函数。它应是一算法ID,其OID在集合PBKDF2-PRFs,在PKCS#5的该版本应包括id-hmacWithSHA1(见附录B.1.1)和其它任何由应用定义的OID。

PBKDF2-PRFs ALGORITHM-IDENTIFIER ::=
{ {NULL IDENTIFIED BY id-hmacWithSHA1}, ... }

缺省的伪随机函数是HMAC-SHA-1:

algid-hmacWithSHA1 AlgorithmIdentifier {{PBKDF2-PRFs}} ::={algorithm id-hmacWithSHA1, parameters NULL : NULL}A.3 PBES1

依据密钥导出函数有下层散列函数和下层的块密码算法,使用不同的对象标识符标识PBES1加密方法(6.1节),总结在下表:

散列函数 块密码算法 OID
MD2 DES pkcs-5.1
MD2 RC2 pkcs-5.4
MD5 DES pkcs-5.3
MD5 RC2 pkcs-5.6
SHA-1 DES pkcs-5.10
SHA-1 RC2 pkcs-5.11

pbeWithMD2AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 1}
pbeWithMD2AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 4}
pbeWithMD5AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 3}
pbeWithMD5AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 6}
pbeWithSHA1AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 10}
pbeWithSHA1AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 11}

对每一个OID,在AlgorithmIdentifier中同该OID相关联的参数域应具有类型PBEParameter:

PBEParameter ::= SEQUENCE {
salt OCTET STRING (SIZE(8)),
iterationCount INTEGER }

类型PBEParameter的域有以下含义:

  • salt指定盐值,一八字节串。
  • iterationCount指定迭代次数。

A.4 PBES2

对象标识符id-PBES2标识PBES2加密方法(6.2节)。

id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}

对每一个OID,在AlgorithmIdentifier中同该OID相关联的参数域应具有类型PBES2-params:

PBES2-params ::= SEQUENCE {
keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},
encryptionScheme AlgorithmIdentifier {{PBES2-Encs}} }

类型 PBES2-params的域有以下含义:

- keyDerivationFunc标识下层的密钥导出函数。它应是一算法ID,其OID在集合PBES2-KDFs中,对本版本的PKCS#5应包括id-PBKDF2(附录A.2)。

PBES2-KDFs ALGORITHM-IDENTIFIER ::=
{ {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... }

- encryptionScheme标识下层的加密方法。它应是一算法ID,其OID在集合PBES2-Encs,它的定义留给应用程序。例示的下层加密方法在附录B.2中给出。
PBES2-Encs ALGORITHM-IDENTIFIER ::= { ... }

A.5 PBMAC1

对象标识符id-PBMAC1标识PBMAC1消息认证方法(节7.1)。

id-PBMAC1 OBJECT IDENTIFIER ::= {pkcs-5 14}

在AlgorithmIdentifier中同该OID相关联的参数域应具有类型PBMAC1-params:

PBMAC1-params ::= SEQUENCE {
keyDerivationFunc AlgorithmIdentifier {{PBMAC1-KDFs}},
messageAuthScheme AlgorithmIdentifier {{PBMAC1-MACs}} }
keyDerivationFunc域同PBES2-params(附录A.4)的相应域有同样的含义,除了OID集合是PBMAC1-KDFs。
PBMAC1-KDFs ALGORITHM-IDENTIFIER ::=
{ {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... }
messageAuthScheme域标识下层的消息认证方法。它应是一算法ID,其OID在集合
PBMAC1-MACs中,它的定义留给应用程序。例示的下层加密方法在附录B.3中给出。
PBMAC1-MACs ALGORITHM-IDENTIFIER ::= { ... }

B.支撑技术

本节给出支持5、6和7节中的基于口令的策略的下层函数和方法的几个例子。

尽管这些支撑技术适于应用实现,但都非强制的。期待将来开发PKCS#5的profile以指定特定和支撑技术。

本节也给出支撑技术的对象标识符。对象标识符digestAlgorithm和encryptionAlgorithm标识

本节引用的某些算法OID都从其中导出。

digestAlgorithm OBJECT IDENTIFIER ::= {rsadsi 2}
encryptionAlgorithm OBJECT IDENTIFIER ::= {rsadsi 3}

B.1 伪随机函数

用于PBKDF2(5.2节)的一个例子伪随机函数是HMAC-SHA-1。

B.1.1 HMAC-SHA-1

HMAC-SHA-1是同基于SHA-1散列函数的HMAC消息认证码相对应的伪随机函数。伪随机函数同计算消息认证码的函数相同,只是输出是全长度的。(伪随机函数PRF的第一个变量作为HMAC的“密钥”,第二个作为HMAC的“文本。在PBKDF2的情况下,“密钥”就是口令,“文本”就是盐。) HMAC-SHA-1有一个可变的密钥长度和20-字节(160位)输出值。

尽管HMAC-SHA-1的密钥的长度本质上是没有限制的,但伪随机函数输出的有效搜索空间可能受限于函数的结构。特别是,当密钥长于512位时,HMAC-SHA-1将首先杂凑到160位。这样,即使从一个密钥产生一个包括几个伪随机函数输出的长导出密钥,导出密钥的有效搜索空间将最多160位。尽管对其它密钥大小的特殊限制依赖于HMAC构造的细节,可以保守地假设,对其它的密钥大小,有效搜索空间仍限制到160位。(在基于口令的密码系统,160位的限制通常不应造成实际的限制,因为对口令的搜索空间不可能大于160位。)

对象标识符id-hmacWithSHA1标识HMAC-SHA-1伪随机函数:

id-hmacWithSHA1 OBJECT IDENTIFIER ::= {digestAlgorithm 7}

在AlgorithmIdentifier同该OID相关联的参数域应有类型NULL。该对象标识符使用在对象集合PBKDF2-PRFs(见附录A.2)。

注意,尽管HMAC-SHA-1作为消息认证码设计的,但在较强的假定下,它的安全验证(?)很容易被修改以满足对一伪随机函数的需要。

一散列函数也可能在某些假定下满足伪随机函数的需要。例如,直接应用一散列函数到“密钥”和“文本”的串联可能是合适的,只要“文本”有合适的结构以预防某些攻击。但HMAC-SHA-1更可取,因为它把“密钥”和“文本”看作单独的变量,不需要“文本”有任何结构。

B.2 加密方法

PBES2(6.2节)的伪随机函数的例子有DES-CBC-Pad, DES-EDE2-CBC-Pad, RC2-CBC-Pad,和RC5-CBC-Pad。

在本节给出的对象标识符预期在对象集合PBES2-Encs中应用(附录A.4)。

B.2.1 DES-CBC-Pad

DES-CBC-Pad是CBC模式下的单密钥DES,并使用RFC 1423的填充操作(见6.1.1节)。

DES-CBC-Pad有一个八字节的加密密钥和一个八字节的初始向量。密钥被看作是56位DES密钥的64位编码,忽略奇偶校验位。

对象标识符desCBC(在NIST/OSI Implementors'Workshop协定中定义)标识DES-CBC-Pad
加密方法。

desCBC OBJECT IDENTIFIER ::=
{iso(1) identified-organization(3) oiw(14) secsig(3)algorithms(2) 7}
在AlgorithmIdentifier中同该OID相关联的参数域应有类型OCTET STRING (SIZE(8)),指定CBC模式的初始向量。

B.2.2 DES-EDE3-CBC-Pad

DES-EDE3-CBC-Pad是CBC模式下的三密钥的三重DES,用RFC1423的填充操作。

DES-EDE3-CBC-Pad有一个24字节的加密密钥和一个八字节初始向量。密钥被看作是三个八字节密钥的串联,每一个是一56位DES密钥的64位编码,忽略奇偶校验位。

对象标识符des-EDE3-CBC标识DES-EDE3-CBC-Pad加密方法:

des-EDE3-CBC OBJECT IDENTIFIER ::= {encryptionAlgorithm 7}

在AlgorithmIdentifier中同该OID相关联的参数域应有类型OCTET STRING (SIZE(8)),指定CBC模式的初始向量。

注意:没有填充的DES-EDE3-CBC的OID在ANSI X9.52[1]给出;这里给出的OID由于指明了填充而更可取。

B.2.3 RC2-CBC-Pad

RC2-CBC-Pad是CBC模式下的RC2(tm)加密方法[21],使用RFC1423填充操作。

RC2-CBC-Pad

有一个从1到128字节的可变的密钥长度;一个从1到1024位的单独的“有效密钥位”参数,它不依赖于密钥长度限制有效搜索空间;和一个八字节的初始向量。

对象标识符rc2CBC标识RC2-CBC-Pad加密方法:

rc2CBC OBJECT IDENTIFIER ::= {encryptionAlgorithm 2}

在AlgorithmIdentifier中同该OID相关联的参数域应具有类型RC2-CBC-Parameter:

RC2-CBC-Parameter ::= SEQUENCE {
rc2ParameterVersion INTEGER OPTIONAL,
iv OCTET STRING (SIZE(8)) }

类型RC2-CBCParameter的域有以下含义:

- rc2ParameterVersion是RC2的“有效密钥位”的一个RSA Security Inc.所有的编码。定义了以下编码:
Effective Key Bits Encoding

40 160
64 120
128 58
b >= 256 b

如果rc2ParameterVersion域被忽略,缺省的“有效密钥位”是32。(这是为了同某些很老的实现向后兼容。)

- iv 是八字节的初始向量

B.2.4 RC5-CBC-Pad

RC5-CBC-Pad是CBC模式下的RC5(tm)加密算法[20],并使用RFC1423填充操作的推广。

该方法完整的定义在[2]. RC5-CBC-Pad有一个从0到256字节的可变的密钥长度,支持64位和128位的块大小。对于前者,它有一个8字节的初始向量;对于后者,有一个16字节的初始向量。RC5-CBC-Pad在加密操作中也有一个从8 到127的可变数目的“轮次”。

注意,填充操作的推广是这样的。对64位块大小的RC5,填充串在RFC1423中定义。对128位块大小的RC5,填充串由16-(||M|| mod 16)个字节组成,每个字节的值是16-(||M|| mod 16)。

对象标识符rc5-CBC-PAD [2]标识RC5-CBC-Pad加密方法:

rc5-CBC-PAD OBJECT IDENTIFIER ::= {encryptionAlgorithm 9}在AlgorithmIdentifier中同该OID相关联的参数域应有类型RC5-CBC-Parameters:

RC5-CBC-Parameters ::= SEQUENCE {
version INTEGER {v1-0(16)} (v1-0),
rounds INTEGER (8..127),
blockSizeInBits INTEGER (64 | 128),
iv OCTET STRING OPTIONAL }

类型RC5-CBC-Parameters的域有以下含义:

  • version是算法的版本,应为v1-0。
  • rounds是加密操作的轮次数,应在8与127之间。
  • blockSizeInBits是块大小的位数,应为64或128。

iv是初始向量,对64位RC5是一个8字节串,对128位RC5是一个16字节串。缺省是一包含内容为0长度适当的字节串。

B.3 消息认证方法

PBMAC1(7.1节)的消息认证方法的一个例子是HMAC-SHA-1。

B.3.1 HMAC-SHA-1

HMAC-SHA-1是基于SHA-1散列函数[18]的HMAC消息消息认证方法[7]。HMAC-SHA-1有可变的密钥长度和一20字节(160位)消息认证码。

对象标识符id-hmacWithSHA1(见附录B.1.1)标识HMAC-SHA-1消息认证方法。(伪随机函数和消息认证方法的对象标识符是相同的,可通过上下文区分。)该标识符预期在对象集合PBMAC1-Macs中应用(附录A.5)。

C. ASN.1模块

为了参考的目的,在以前各节中的ASN.1语法在这里作为ASN.1模块给出。

-- PKCS #5 v2.0 ASN.1 Module
-- Revised March 25, 1999
-- This module has been checked for conformance with the ASN.1 standard by the OSS ASN.1 Tools

PKCS5v2-0 {iso(1) member-body(2) us(840) rsadsi(113549)
pkcs(1) pkcs-5(5) modules(16) pkcs5v2-0(1)}

DEFINITIONS ::= BEGIN

-- Basic object identifiers

rsadsi OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840) 113549}
pkcs OBJECT IDENTIFIER ::= {rsadsi 1}

pkcs-5 OBJECT IDENTIFIER ::= {pkcs 5}

-- Basic types and classes

AlgorithmIdentifier { ALGORITHM-IDENTIFIER:InfoObjectSet } ::=
SEQUENCE {
algorithm ALGORITHM-IDENTIFIER.&id({InfoObjectSet}),
parameters ALGORITHM-IDENTIFIER.&Type({InfoObjectSet}
{@algorithm}) OPTIONAL
}

ALGORITHM-IDENTIFIER ::= TYPE-IDENTIFIER

-- PBKDF2

PBKDF2Algorithms ALGORITHM-IDENTIFIER ::=
{ {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ...}

id-PBKDF2 OBJECT IDENTIFIER ::= {pkcs-5 12}

algid-hmacWithSHA1 AlgorithmIdentifier {{PBKDF2-PRFs}} ::=
{algorithm id-hmacWithSHA1, parameters NULL : NULL}

PBKDF2-params ::= SEQUENCE {
salt CHOICE {
specified OCTET STRING,
otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}
},
iterationCount INTEGER (1..MAX),
keyLength INTEGER (1..MAX) OPTIONAL,
prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT
algid-hmacWithSHA1
}

PBKDF2-SaltSources ALGORITHM-IDENTIFIER ::= { ... }

PBKDF2-PRFs ALGORITHM-IDENTIFIER ::=
{ {NULL IDENTIFIED BY id-hmacWithSHA1}, ... }

-- PBES1

PBES1Algorithms ALGORITHM-IDENTIFIER ::= {

{PBEParameter IDENTIFIED BY pbeWithMD2AndDES-CBC} |
{PBEParameter IDENTIFIED BY pbeWithMD2AndRC2-CBC} |
{PBEParameter IDENTIFIED BY pbeWithMD5AndDES-CBC} |
{PBEParameter IDENTIFIED BY pbeWithMD5AndRC2-CBC} |
{PBEParameter IDENTIFIED BY pbeWithSHA1AndDES-CBC} |
{PBEParameter IDENTIFIED BY pbeWithSHA1AndRC2-CBC},
...
}

pbeWithMD2AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 1}
pbeWithMD2AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 4}
pbeWithMD5AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 3}
pbeWithMD5AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 6}
pbeWithSHA1AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 10}
pbeWithSHA1AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 11}

PBEParameter ::= SEQUENCE {
salt OCTET STRING (SIZE(8)),
iterationCount INTEGER
}

-- PBES2

PBES2Algorithms ALGORITHM-IDENTIFIER ::=
{ {PBES2-params IDENTIFIED BY id-PBES2}, ...}

id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}

PBES2-params ::= SEQUENCE {
keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},
encryptionScheme AlgorithmIdentifier {{PBES2-Encs}}
}

PBES2-KDFs ALGORITHM-IDENTIFIER ::=
{ {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... }

PBES2-Encs ALGORITHM-IDENTIFIER ::= { ... }

-- PBMAC1

PBMAC1Algorithms ALGORITHM-IDENTIFIER ::=
{ {PBMAC1-params IDENTIFIED BY id-PBMAC1}, ...}

id-PBMAC1 OBJECT IDENTIFIER ::= {pkcs-5 14}

PBMAC1-params ::= SEQUENCE {
keyDerivationFunc AlgorithmIdentifier {{PBMAC1-KDFs}},
messageAuthScheme AlgorithmIdentifier {{PBMAC1-MACs}}

}

PBMAC1-KDFs ALGORITHM-IDENTIFIER ::=
{ {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... }

PBMAC1-MACs ALGORITHM-IDENTIFIER ::= { ... }

-- Supporting techniques

digestAlgorithm OBJECT IDENTIFIER ::= {rsadsi 2}
encryptionAlgorithm OBJECT IDENTIFIER ::= {rsadsi 3}

SupportingAlgorithms ALGORITHM-IDENTIFIER ::= {
{NULL IDENTIFIED BY id-hmacWithSHA1} |
{OCTET STRING (SIZE(8)) IDENTIFIED BY desCBC} |
{OCTET STRING (SIZE(8)) IDENTIFIED BY des-EDE3-CBC} |
{RC2-CBC-Parameter IDENTIFIED BY rc2CBC} |
{RC5-CBC-Parameters IDENTIFIED BY rc5-CBC-PAD},
...
}

id-hmacWithSHA1 OBJECT IDENTIFIER ::= {digestAlgorithm 7}

desCBC OBJECT IDENTIFIER ::=
{iso(1) identified-organization(3) oiw(14) secsig(3)
algorithms(2) 7} -- from OIW

des-EDE3-CBC OBJECT IDENTIFIER ::= {encryptionAlgorithm 7}

rc2CBC OBJECT IDENTIFIER ::= {encryptionAlgorithm 2}

RC2-CBC-Parameter ::= SEQUENCE {
rc2ParameterVersion INTEGER OPTIONAL,
iv OCTET STRING (SIZE(8))
}

rc5-CBC-PAD OBJECT IDENTIFIER ::= {encryptionAlgorithm 9}

RC5-CBC-Parameters ::= SEQUENCE {
version INTEGER {v1-0(16)} (v1-0),
rounds INTEGER (8..127),
blockSizeInBits INTEGER (64 | 128),
iv OCTET STRING OPTIONAL
}
END

知识产权考虑

RSA Security makes no patent claims on the general constructions described in this document, although specific underlying techniques may be covered. Among the underlying techniques, the RC5 encryption algorithm (Appendix B.2.4) is protected by U.S. Patents 5,724,428 [22] and 5,835,600 [23].

RC2 and RC5 are trademarks of RSA Security.

License to copy this document is granted provided that it is identified as RSA Security Inc. Public-Key Cryptography Standards(PKCS) in all material mentioning or referencing this document.

RSA Security makes no representations regarding intellectual property claims by other parties. Such determination is the responsibility of the user.

修订记录

Versions 1.0-1.3

Versions 1.0-1.3 被分发给在1991年1月和3月参加RSA Data

Security Inc.的公钥密码系统标准会议的与会者。

Version 1.4

Version 1.4是1991年6月3日PKCS的首次发行的一部分。该版本作为NIST/OSI  Implementors' Workshop 文档SEC-SIG-91-20出版。.

Version 1.5

Version 1.5 综合了几处编辑更正,包括对参考书目的修改和修订记录的增加。

Version 2.0

Version 2.0 综合了文档结构方面的主要编辑更正,并引入了PBES2加密方法,PBMAC1消 息认证方法,和独立的基于口令的密钥导出函数。该版本继续支持版本1.5中的加密过程。

参考书目

  1. American National Standard X9.52 - 1998, Triple Data Encryption Algorithm Modes of Operation. Working draft, Accredited Standards Committee X9, July 27, 1998.
  2. Baldwin, R. and R. Rivest, "The RC5, RC5-CBC, RC5-CBC-Pad, and RC5-CTS Algorithms", RFC 2040, October 1996.
  3. Balenson, D., "Privacy Enhancement for Internet Electronic Mail: Part III: Algorithms, Modes, and Identifiers", RFC 1423, February 1993.
  4. S.M. Bellovin and M. Merritt. Encrypted key exchange: Password-based protocols secure against dictionary attacks. In Proceedings of the 1992 IEEE Computer Society Conference on Research in Security and Privacy, pages 72-84, IEEE Computer Society, 1992.
  5. D. Jablon. Strong password-only authenticated key exchange. ACM Computer Communications Review, October 1996.
  6. Kaliski, B., "The MD2 Message-Digest Algorithm", RFC 1319, April 1992.
  7. Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: Keyed-Hashing for Message Authentication", RFC 2104, February 1997.
  8. Robert Morris and Ken Thompson. Password security: A case history. Communications of the ACM, 22(11):594-597, November 1979.
  9. ISO/IEC 8824-1:1995: Information technology - Abstract Syntax Notation One (ASN.1) - Specification of basic notation. 1995.
  10. ISO/IEC 8824-1:1995/Amd.1:1995 Information technology - Abstract Syntax Notation One (ASN.1) - Specification of basic notation - Amendment 1 - Rules of extensibility. 1995.
  11. ISO/IEC 8824-2:1995 Information technology - Abstract Syntax Notation One (ASN.1) - Information object specification. 1995.
  12. ISO/IEC 8824-2:1995/Amd.1:1995 Information technology - Abstract Syntax Notation One (ASN.1) - Information object specification - Amendment 1 - Rules of extensibility. 1995.
  13. ISO/IEC 8824-3:1995 Information technology - Abstract Syntax
    Notation One (ASN.1) - Constraint specification. 1995.
  14. ISO/IEC 8824-4:1995 Information technology - Abstract Syntax Notation One (ASN.1) - Parameterization of ASN.1 specifications.1995.
  15. National Institute of Standards and Technology (NIST). FIPS PUB 46-2: Data Encryption Standard. December 30, 1993.
  16. National Institute of Standards and Technology (NIST). FIPS PUB 81: DES Modes of Operation. December 2, 1980.
  17. National Institute of Standards and Technology (NIST). FIPS PUB 112: Password Usage. May 30, 1985.
  18. National Institute of Standards and Technology (NIST). FIPS PUB 180-1: Secure Hash Standard. April 1994.
  19. Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April 1992.
  20. R.L. Rivest. The RC5 encryption algorithm. In Proceedings of the Second International Workshop on Fast Software Encryption, pages 86-96, Springer-Verlag, 1994.
  21. Rivest, R., "A Description of the RC2(r) Encryption Algorithm", RFC 2268, March 1998.
  22. R.L. Rivest. Block-Encryption Algorithm with Data-Dependent Rotations. U.S. Patent No. 5,724,428, March 3, 1998.
  23. R.L. Rivest. Block Encryption Algorithm with Data-Dependent Rotations. U.S. Patent No. 5,835,600, November 10, 1998.
  24. RSA Laboratories. PKCS #5: Password-Based Encryption Standard. Version 1.5, November 1993.
  25. RSA Laboratories. PKCS #8: Private-Key Information Syntax Standard. Version 1.2, November 1993.
  26. T. Wu. The Secure Remote Password protocol. In Proceedings of the 1998 Internet Society Network and Distributed System Security Symposium, pages 97-111, Internet Society, 1998.
  27. Yergeau, F., "UTF-8, a transformation format of ISO 10646", RFC 2279, January 1998.

Contact Information & About PKCS

The Public-Key Cryptography Standards are specifications produced by RSA Laboratories in cooperation with secure systems developers worldwide for the purpose of accelerating the deployment of public-key cryptography. First published in 1991 as a result of meetings with a small group of early adopters of public-key technology, the PKCS documents have become widely referenced and implemented.Contributions from the PKCS series have become part of many formal and de facto standards, including ANSI X9 documents, PKIX, SET, S/MIME, and SSL.

Further development of PKCS occurs through mailing list discussions and occasional workshops, and suggestions for improvement are welcome. For more information, contact:

PKCS Editor
RSA Laboratories
20 Crosby Drive
Bedford, MA 01730 USA
pkcs-editor@rsasecurity.com
http://www.rsalabs.com/pkcs/

全部版权声明

Copyright (C) The Internet Society (2000). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement

Funding for the RFC Editor function is currently provided by the Internet Society.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值