国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 網(wǎng)絡(luò)通信 > 正文

PKCS #5: 基于口令的密碼系統(tǒng)規(guī)范 版本2.0

2019-11-04 10:51:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本備忘錄的狀態(tài)
本文檔為Internet社區(qū)提供信息。它并未定義任何Internet標(biāo)準(zhǔn)。本備忘錄的發(fā)布
不受任何限制。

版權(quán)聲明
Copyright(C)TheInternetSociety(2000).AllRightsReserved.

摘要
本備忘錄代表源自RSA實(shí)驗(yàn)室的公鑰密碼系統(tǒng)標(biāo)準(zhǔn)(PKCS)系列的PKCS#5v2.0的再版,
變更控制仍保留在PKCS過程。該文檔的主體,除了安全性考慮一節(jié),都是直接從那個(gè)規(guī)范
中獲得的。
本文檔提供基于口令的密碼系統(tǒng)的實(shí)現(xiàn)建議,覆蓋密鑰導(dǎo)出函數(shù),加密方案,消息鑒別
方案,及與該技術(shù)等同的ASN.1語(yǔ)法。
建議的意圖是供計(jì)算機(jī)和通信系統(tǒng)的一般程序使用,因此包括了相當(dāng)數(shù)量的靈活性。它
們非凡為敏感信息的保護(hù)設(shè)計(jì),例如PKCS#8[25]中的私鑰。期望有基于這些規(guī)范的應(yīng)用標(biāo)
準(zhǔn)和實(shí)現(xiàn)輪廓可能包括附加的約束。
其它基于口令的密碼技術(shù),例如基于口令的密鑰實(shí)體認(rèn)證和密鑰建立協(xié)議[4][5][26]不在
本文檔范圍。口令的選取原則也不在本文檔范圍。



目錄
1介紹 2
2記法 3
3概覽 3
4鹽和迭代次數(shù) 4
4.1鹽 4
4.2迭代計(jì)數(shù) 5
5密鑰導(dǎo)出函數(shù) 5
5.1PBKDF1 6
5.2PBKDF2 6
6.加密程序 7
6.1PBES1 8
6.2PBES2 9
7.消息驗(yàn)證方式 10
7.1PBMAC1 10
8.安全考慮 11
9.作者地址 11
附錄AASN.1語(yǔ)法 11
A.1PBKDF1 11
A.2PBKDF2 11
A.3PBES1 12
A.4 PBES2 13
A.5 PBMAC1 13
B.支撐技術(shù) 14
B.1 偽隨機(jī)函數(shù) 14
B.2 加密方法 15
B.3消息認(rèn)證方法 17
C.ASN.1模塊 17
知識(shí)產(chǎn)權(quán)考慮 20
修訂記錄 21
參考書目 21
全部版權(quán)聲明 24

1介紹
本文檔為基于口令的密鑰系統(tǒng)的實(shí)現(xiàn)提供建議,包括了下列的方面:
- 密鑰導(dǎo)出函數(shù)
- 加密方案
- 消息鑒別方案
- 與該技術(shù)等同的ASN.1語(yǔ)法
建議的意圖是供計(jì)算機(jī)和通信系統(tǒng)的一般程序使用,照此包括了相當(dāng)數(shù)量的靈活性。它
們非凡為敏感信息的保護(hù)設(shè)計(jì),例如PKCS#8[25]中的私鑰。期望有基于這些規(guī)范的應(yīng)用標(biāo)
準(zhǔn)和實(shí)現(xiàn)輪廓可能包括附加的約束。
其它基于口令的密碼技術(shù),例如基于口令的密鑰實(shí)體認(rèn)證和密鑰建立協(xié)議[4][5][26]不在
本文檔范圍。口令的選取原則也不在本文檔范圍。
本文檔取代PKCS#5v1.5[24],但包含的技術(shù)是與之兼容的。

2記法
C 密文,一個(gè)字節(jié)串
c 迭代次數(shù),一個(gè)正整數(shù)
DK 導(dǎo)出密鑰,一個(gè)字節(jié)串
DkLen 導(dǎo)出密鑰的字節(jié)長(zhǎng)度,一個(gè)正整數(shù)
EM 編碼,一個(gè)字節(jié)串
Hash 基礎(chǔ)的哈希函數(shù)
HLen偽隨機(jī)函數(shù)輸出的字節(jié)長(zhǎng)度,一個(gè)正整數(shù)
l 導(dǎo)出密鑰的塊長(zhǎng)度,一個(gè)正整數(shù)
IV 初始向量,一個(gè)字節(jié)串
K 加密密鑰,一個(gè)字節(jié)串
KDF 密鑰導(dǎo)出函數(shù)
M 消息,一個(gè)字節(jié)串
P 口令,一個(gè)字節(jié)串
PRF 基礎(chǔ)的偽隨機(jī)函數(shù)
PS 填充串
psLen 填充串的字節(jié)長(zhǎng)度,一個(gè)正整數(shù)
S 鹽,一個(gè)字節(jié)串
T 消息鑒別碼,一個(gè)字節(jié)串
T_1,…,T_1,U_1,…,U_c
中間數(shù),一個(gè)字節(jié)串
01,02,…,08
值為1,2,…,8的字節(jié)
/xor 兩個(gè)字節(jié)串的按位異或
字節(jié)長(zhǎng)度操作符
級(jí)聯(lián)操作符
<i..j> 子串抽取操作符:抽取字節(jié)i到j(luò),0<=i<=j

3概覽
在公鑰密鑰學(xué)的許多應(yīng)用中,用戶安全性最終取決于一個(gè)或多個(gè)秘密文本值或口令。口
令不是直接可用作任何傳統(tǒng)密碼系統(tǒng)的密鑰,相反,需要對(duì)口令進(jìn)行一些處理才能用它
進(jìn)行密碼操作。此外,由于口令通常是從一個(gè)相對(duì)小的空間選取的,處理中要求非凡的
考慮以防止搜索攻擊。
基于口令的密碼術(shù)的一個(gè)通用方法,由Morris和Thompson描述,用于口令表的保
護(hù),是把口令與鹽結(jié)合以產(chǎn)生密鑰。可把鹽看作是對(duì)從口令導(dǎo)出的一個(gè)大密鑰集合的索
引,不需要保密。盡管攻擊者有可能構(gòu)造一個(gè)可能口令表(稱作“字典攻擊”),但構(gòu)造
一個(gè)可能密鑰表是很困難的,因?yàn)槊總€(gè)口令將有許多可能的密鑰。對(duì)手將不得不為每一
個(gè)鹽單獨(dú)搜索口令。
基于口令的密碼術(shù)的另一個(gè)方法是構(gòu)建相對(duì)昂貴的密鑰導(dǎo)出技術(shù),由此增加窮舉搜
索的代價(jià)。作法之一是在密鑰導(dǎo)出技術(shù)中包括一個(gè)迭代次數(shù),指示迭代多少次密鑰導(dǎo)出
的一些基本函數(shù)。一個(gè)適度的迭代次數(shù),比如說1000,對(duì)合法方來(lái)說不可能是計(jì)算密
鑰時(shí)的負(fù)擔(dān),但對(duì)對(duì)手來(lái)說是一個(gè)很大的負(fù)擔(dān)。
鹽和迭代次數(shù)構(gòu)成了PKCS#5v1.5中基于口令加密的基礎(chǔ),在這里同樣為各種密
碼操作所采用。這樣,這里定義的基于口令的密鑰導(dǎo)出是口令、鹽和迭代次數(shù)的一個(gè)函
數(shù),其中后兩個(gè)量不需要保密。
從基于口令的密鑰導(dǎo)出函數(shù),定義基于口令的加密和消息鑒別方案就簡(jiǎn)單了。正如
PKCS#5v1.5中,這里的基于口令的加密方案是基于一個(gè)基本的、傳統(tǒng)加密方案,傳統(tǒng)
方案的密鑰是從口令導(dǎo)出的。相似地,基于口令的消息鑒別方案也基于一個(gè)基本的傳統(tǒng)
方案。這兩個(gè)層次的方法使基于口令的技術(shù)按照基于的基礎(chǔ)技術(shù)模塊化。
期待基于口令的密鑰導(dǎo)出函數(shù)找到除了這里定義的加密和消息鑒別方案以外的其
它應(yīng)用。比如,用密鑰導(dǎo)出函數(shù)的一個(gè)單個(gè)應(yīng)用導(dǎo)出一個(gè)密鑰集合。集合中的密鑰作為
密鑰導(dǎo)出函數(shù)的輸出的子串得到。該方法可在面向會(huì)話的協(xié)議中用作密鑰建立的一部
分。另外一個(gè)應(yīng)用是口令檢查,密鑰導(dǎo)出函數(shù)的輸出被存儲(chǔ)(同鹽和迭代次數(shù)一道)用于
后續(xù)的驗(yàn)證口令的目的。
在本文檔中,口令被視作一個(gè)任意長(zhǎng)度的字節(jié)串,對(duì)其作為文本串的解釋不作指定。
但為了互操作性,建議應(yīng)用遵循某些通用的文本編碼規(guī)則。ASCII和UTF-8[27]是兩種
可能的選擇。(ASCII是UTF-8的一個(gè)子集。)
盡管口令的選擇不在本文檔的范圍,已有指導(dǎo)原則發(fā)布[17],可供考慮。
4鹽和迭代次數(shù)
由于鹽和迭代次數(shù)是本文檔定義的技術(shù)的中心,有理由進(jìn)行一些深入的討論。
4.1鹽
基于口令的密碼技術(shù)中的鹽傳統(tǒng)上用于產(chǎn)生對(duì)應(yīng)于一給定口令的一個(gè)大集合的密鑰,依
據(jù)該鹽值從中隨機(jī)選取一個(gè)密鑰。運(yùn)用一密鑰導(dǎo)出函數(shù)選擇集合中的一個(gè)密鑰,即:
DK=KDF(P,S)
其中DK是導(dǎo)出密鑰,P是口令,S是鹽。這有兩個(gè)好處:
1. 預(yù)計(jì)算和口令字典相對(duì)應(yīng)的所有密鑰甚至最相像密鑰是困難的。例如,假如鹽
是64位長(zhǎng),對(duì)每個(gè)口令來(lái)說,將有多達(dá)2^64個(gè)密鑰。在基于口令的操作被執(zhí)
行并且得知鹽后,對(duì)手只有搜索口令。
2. 同一個(gè)密鑰不可能被選擇兩次。再者,假如鹽是64位長(zhǎng),依據(jù)生日悖論,在
大約2^32個(gè)密鑰已被產(chǎn)生之前,密鑰間“碰撞”的機(jī)率并不大。這解決了對(duì)
相同密鑰的多個(gè)用戶之間相互影響的顧慮,可能適用于某些加密和認(rèn)證技術(shù)。
在基于口令的的加密中,加密消息的一方只需在從一口令導(dǎo)出加密密鑰時(shí)選擇一個(gè)
大的、足夠隨機(jī)的鹽就能保證獲得這些好處。產(chǎn)生消息鑒別碼的一方能以類似的方式得
到這些保證。
但解密消息或驗(yàn)證消息鑒別碼的一方不能確定另一方提供的鹽實(shí)際上是隨機(jī)產(chǎn)生
的。例如,有可能鹽是從另一個(gè)基于口令的操作中拷貝的,試圖利用同一個(gè)密鑰的多個(gè)
用戶間的相互影響。假設(shè)兩個(gè)合法方交換一段加密過的消息,其中加密密鑰是從一個(gè)共
享口令使用鹽導(dǎo)出的80位的密鑰。對(duì)手能從密文中取出鹽,并把它提供給另一方,盡
管它本來(lái)適用于40位的密鑰。假如一方用40位的密鑰提示了解密的結(jié)果,對(duì)手可能解
出40位密鑰。在40位密鑰是80位密鑰頭一半的情況下,對(duì)手然后能很輕易地解開80
位密鑰的剩下40位。
為了防止這樣的攻擊,或者應(yīng)仔細(xì)分析同一個(gè)密鑰的多個(gè)用戶之間的相互影響,或
者鹽應(yīng)包含能明確區(qū)分不同操作的數(shù)據(jù)。例如,鹽可以有一個(gè)附加的、非隨機(jī)的字節(jié),
指定導(dǎo)出密鑰是用于加密、消息認(rèn)證,或一些其它操作。
基于以上這些,對(duì)鹽的選擇作以下推薦:
1. 假如不考慮用支持一給定口令的基于口令的加密和認(rèn)證技術(shù)的擁有同一
個(gè)密鑰(或該密鑰的一個(gè)前綴)的多個(gè)用戶之間的相互影響的話,那么鹽可
以隨機(jī)產(chǎn)生,接收到鹽的一方不必檢查是否符合特定格式。鹽應(yīng)至少八字
節(jié)(64位)長(zhǎng)。
2. 否則,除了至少八字節(jié)長(zhǎng)的隨機(jī)部分外,鹽應(yīng)包括能明確區(qū)分不同操作和
不同密鑰長(zhǎng)度的數(shù)據(jù),而該數(shù)據(jù)應(yīng)能被接收鹽的一方檢查或重新生成。比
如,鹽應(yīng)包含一個(gè)附加的、非隨機(jī)的字節(jié)指定導(dǎo)出密鑰的用途。另一種辦
法是,它可以是指定有關(guān)導(dǎo)出密鑰的具體信息的結(jié)構(gòu)的編碼,比如加密或
認(rèn)證技術(shù),以及在由口令導(dǎo)出的不同密鑰中的序列號(hào)。附加數(shù)據(jù)的非凡格
式留給應(yīng)用定義。
注重,假如沒有隨機(jī)數(shù)或偽隨機(jī)數(shù)發(fā)生器,產(chǎn)生鹽(或它的隨機(jī)部分)的一個(gè)確定性
的替代法是對(duì)口令和待處理的消息M應(yīng)用一個(gè)基于口令的密鑰導(dǎo)出函數(shù)。例如,鹽可
用S=KDF(P,M)的密鑰導(dǎo)出函數(shù)計(jì)算。但假如已知消息M屬于一個(gè)小的消息空間(例
如"Yes"或"No"),不推薦使用該方法,因?yàn)榭赡茺}的數(shù)量很小。

4.2迭代計(jì)數(shù)
迭代計(jì)數(shù)傳統(tǒng)上用于增加從一口令生成密鑰的代價(jià),從而增加攻擊的難度。對(duì)于本
文檔的方法,推薦最小1000迭代。這將顯著增加對(duì)口令窮舉搜索的代價(jià),但對(duì)導(dǎo)出單
個(gè)密鑰的代價(jià)沒有明顯的影響。

5密鑰導(dǎo)出函數(shù)
密鑰導(dǎo)出函數(shù)從一個(gè)基礎(chǔ)密鑰和其它參數(shù)產(chǎn)生一個(gè)導(dǎo)出密鑰。在基于口令的密鑰導(dǎo)出
函數(shù)中,基礎(chǔ)密鑰是口令,其它參數(shù)是一鹽值和一迭代次數(shù),正如第3節(jié)描述的。
這里定義的基于口令的密鑰導(dǎo)出函數(shù)的主要應(yīng)用在于第6節(jié)的加密策略和第7節(jié)的消息
驗(yàn)證策略。由于這些函數(shù)的獨(dú)立定義,其它的應(yīng)用肯定是可能的。
本節(jié)詳述兩個(gè)函數(shù):PBKDF1和PBKDF2。推薦新的應(yīng)用使用PBKDF2;PBKDF1只為
同已有應(yīng)用兼容,對(duì)新的應(yīng)用不推薦使用。
這里定義的密鑰導(dǎo)出函數(shù)的一個(gè)典型應(yīng)用可能包括以下幾步:
1. 選擇一個(gè)鹽S和一個(gè)迭代次數(shù)c,如第4節(jié)所述。
2. 選擇導(dǎo)出密鑰的字節(jié)長(zhǎng)度,dkLen。
3. 將密鑰導(dǎo)出函數(shù)應(yīng)用于口令、鹽、迭代次數(shù)和密鑰長(zhǎng)度以生成一個(gè)導(dǎo)出密鑰。
4. 輸出導(dǎo)出的密鑰。

通過改變鹽可從一個(gè)口令導(dǎo)出任意數(shù)量的密鑰,正如第3節(jié)描述的那樣。

5.1PBKDF1
PBKDF1應(yīng)用一個(gè)散列函數(shù)導(dǎo)出密鑰,散列函數(shù)可以是MD2、md5或SHA-1。導(dǎo)出密鑰的
長(zhǎng)度受散列函數(shù)輸出的長(zhǎng)度的限制,MD2和MD5是16字節(jié),SHA-1是20字節(jié)。PBKDF1同PKCS#5
v1.5的密鑰導(dǎo)出過程相兼容。
建議PBKDF1只用于同已有應(yīng)用的兼容,因?yàn)樗a(chǎn)生的密鑰對(duì)某些應(yīng)用來(lái)說不夠大。
PBKDF1(P,S,c,dkLen)
可選項(xiàng): Hash 基本散列函數(shù)
輸入:P 口令,字節(jié)串
S 鹽,一八字節(jié)串
c 迭代次數(shù),正整數(shù)
dkLen導(dǎo)出密鑰的意定字節(jié)長(zhǎng)度,正整數(shù),MD2或MD5最多16,SHA-1
最多20
輸出: DK 導(dǎo)出密鑰,dkLen字節(jié)
步驟:
1. 假如對(duì)于MD2和MD5,dkLen>16,或?qū)τ赟HA-1,dkLen>20,(即dkLen大于散列函
數(shù)的輸出長(zhǎng)度),輸出“derivedkeytoolong”并停止。
2. 對(duì)口令P和附加鹽S的串聯(lián)應(yīng)用基本散列函數(shù),重復(fù)c次,然后抽取第一個(gè)dkLen
字節(jié)以產(chǎn)生一導(dǎo)出密鑰DK:
T_1=Hash(PS),
T_2=Hash(T_1),
...
T_c=Hash(T_{c-1}),
DK=Tc<0..dkLen-1>
3. 輸出導(dǎo)出密鑰DK。

5.2PBKDF2
PBKDF2應(yīng)用一個(gè)偽隨機(jī)函數(shù)(例子見附錄B.1)以導(dǎo)出密鑰。導(dǎo)出密鑰的長(zhǎng)度本質(zhì)上是沒
有限制的。(但是,導(dǎo)出密鑰的最大有效搜索空間受限于基本偽隨機(jī)函數(shù)的結(jié)構(gòu)。進(jìn)一步的
討論參見附錄B.1。)對(duì)新的應(yīng)用推薦使用PBKDF2。
PBKDF2(P,S,c,dkLen)
可選項(xiàng): RPF 基本偽隨機(jī)函數(shù)(hLen表示偽隨機(jī)函數(shù)輸出的字節(jié)長(zhǎng)度)
輸入: P 口令,一字節(jié)串
S 鹽,字節(jié)串
c 迭代次數(shù),正整數(shù)
dkLen 導(dǎo)出密鑰的意定字節(jié)長(zhǎng)度,正整數(shù),最大約(2^32-1)*hLen
輸出: DK 導(dǎo)出密鑰,長(zhǎng)度dkLen字節(jié)
步驟:
1. 假如dkLen>(2^32-1)*hLen,輸出“derivedkeytoolong”并停止。
2. 假設(shè)l是導(dǎo)出密鑰的hLen個(gè)字節(jié)塊的個(gè)數(shù),r表示最后一個(gè)塊的字節(jié)數(shù)。
l=CEIL(dkLen/hLen),
r=dkLen-(l-1)*hLen.
這里,CEIL(x)是“ceiling”函數(shù),即,大于或等于x的最小整數(shù)。
4. 對(duì)于導(dǎo)出密鑰的每一塊,運(yùn)用函數(shù)F于口令P、鹽S、迭代次數(shù)c和塊索引以計(jì)算
塊:
T_1=F(P,S,c,1),
T_2=F(P,S,c,2),
...
T_l=F(P,S,c,l),
這里函數(shù)F定義為基本偽隨機(jī)函數(shù)PRF應(yīng)用于口令P和鹽S的串聯(lián)和塊索引i
的前c次循環(huán)的異或和。
F(P,S,c,i)=U_1/xorU_2/xor.../xorU_c
其中
U_1=PRF(P,SINT(i)),
U_2=PRF(P,U_1),
...
U_c=PRF(P,U_{c-1}).
這里,INT(i)是整數(shù)i的四字節(jié)編碼,高字節(jié)在先。
3. 串聯(lián)各塊,抽取前dkLen字節(jié)以產(chǎn)生導(dǎo)出密鑰DK:
DK=T_1T_2...T_l<0..r-1>
4. 輸出導(dǎo)出密鑰DK。

注重:函數(shù)F的構(gòu)造遵循“belt-and-suspenders”方法。U_i次循環(huán)被遞歸計(jì)算以消
除敵手的并行度;它們被異或到一起以減少有關(guān)遞歸退化到一個(gè)小的值集的擔(dān)憂。
6.加密程序
在對(duì)稱設(shè)置中,加密程序包括加密操作的解密操作,其中加密操作在一個(gè)密鑰作用下從
一個(gè)消息產(chǎn)生密文,而解密操作在同一個(gè)密鑰作用下從密文恢復(fù)消息。在基于口令的加密策
略中,密鑰就是口令。
基于口令的加密方法的一個(gè)典型應(yīng)用是私鑰保護(hù)方法,其中消息包括私鑰信息,如
PKCS#8中的那樣。這里定義的加密策略在那種情況下是合適的加密算法。
本節(jié)詳述的兩個(gè)策略是PBES1和PBES2。PBES2推薦給新的應(yīng)用,PBES1只為了同已有
應(yīng)用的兼容。
6.1PBES1
PBES1結(jié)合了PBKDF1函數(shù)和一個(gè)基礎(chǔ)的塊加密,可以是CBC模式下的DES或RC2?。PBES1
同PKCS#5v1.5中加密策略相兼容。
6.1.1加密操作
在口令P作用下加密消息M以產(chǎn)生密文C,包括以下步驟:
1. 產(chǎn)生一八字節(jié)鹽S和一迭代次數(shù)c,如第4節(jié)所述。
2. 應(yīng)用PBKDF1密鑰導(dǎo)出函數(shù)(5.1節(jié))到口令、附加鹽S和迭代次數(shù),以產(chǎn)生長(zhǎng)度為16字
節(jié)的導(dǎo)出密鑰DK:
DK=PBKDF1(P,S,c,16).
3. 分割導(dǎo)出密鑰DK成由DK的前8字節(jié)組成的加密密鑰K,和一包含下8個(gè)字節(jié)的初始化
向量IV:
K=DK<0..7>,
IV=DK<8..15>.
4. 連接M和一填充串PS,以形成一編碼消息EM:
EM=MPS,
其中填充串PS由8-(Mmod8)個(gè)字節(jié)組成,每個(gè)的值是8-(Mmod8).填充串PS滿
足以下的表達(dá)式:
PS=01,ifMmod8=7;
PS=0202,ifMmod8=6;
...
PS=0808080808080808,ifMmod8=0.
編碼消息的字節(jié)長(zhǎng)度將是8的倍數(shù),從編碼消息中可以無(wú)歧義地恢復(fù)出消息M。(填充規(guī)則
來(lái)自于RFC1423。
5. 在加密密鑰K和初始向量IV下,用基本塊密碼算法以CBC模式加密編碼消息EM,以產(chǎn)
生密文C。對(duì)于DES,密鑰K應(yīng)被看作一56位DES密鑰并且奇位忽略的64位編碼。對(duì)
于RC2,“有效密鑰位“應(yīng)為64位。
6. 輸出密文C。
鹽S和迭代次數(shù)c應(yīng)以一AlgorithmIdentifier值傳遞給執(zhí)行解密的一方。(見附錄A.3)

6.1.2解密操作
PBES1的解密操作包括以下步驟,在口令P的作用下解密密文C以恢復(fù)消息M:
1. 獲取八字節(jié)鹽S和迭代次數(shù)c。
2. 應(yīng)用PBKDF1密鑰導(dǎo)出函數(shù)(5.1節(jié))于口令P、附加鹽S和迭代次數(shù)以產(chǎn)生長(zhǎng)度為16字
節(jié)的導(dǎo)出密鑰:
DK=PBKDF1(P,S,c,16)
3. 分割導(dǎo)出密鑰DK,由DK的前8字節(jié)組成一加密密鑰K,和由下8字節(jié)組成的初始向量
IV:
K=DK<0..7>,
IV=DK<8..15>.
4. 在加密密鑰K和初始向量IV作用下,用基本塊密碼算法(DES或RC2)以CBC模式解密密
文,以恢復(fù)編碼消息EM。假如密文的字節(jié)長(zhǎng)度不是8的倍數(shù),輸出“解密錯(cuò)”并停止。
5. 把編碼消息EM分割成一消息M和一填充串PS:
EM=MPS,
其中填充串PS由psLen個(gè)字節(jié)組成,每個(gè)的值是psLen,其中psLen介于1和8之間。假如
不可能以這種方式分割編碼消息EM,輸出“解密錯(cuò)”并停止。
6.輸出恢復(fù)的消息M。

6.2PBES2
PBES2結(jié)合一個(gè)基于口令的密鑰導(dǎo)出函數(shù),在PKCS#5的本版本中應(yīng)為PBKDF2(5.2節(jié))和一
基本的加密策略(例子見附錄B.2)。基本加密策略的密鑰長(zhǎng)度和任何其它參數(shù)依靠于策略。
新的應(yīng)用推薦使用PBES2。
6.2.1加密操作
PBES2的加密操作包括以下步驟,應(yīng)用一選擇的密鑰導(dǎo)出函數(shù)KDF和一選擇的基本加密策略,
以在口令P的作用下加密消息M以產(chǎn)生密文C:
1. 如第4節(jié)所述,選擇一鹽S和一迭代次數(shù)c。
2. 為基本加密方法的導(dǎo)出密鑰選擇字節(jié)長(zhǎng)度dkLen。
3. 應(yīng)用選擇的密鑰導(dǎo)出函數(shù)于口令P、鹽S和迭代次數(shù)c,以產(chǎn)生長(zhǎng)度dkLen字節(jié)的導(dǎo)出
密鑰。
4. 在導(dǎo)出密鑰K的作用下用基本加密方法加密消息M以產(chǎn)生密文C(依靠于基本策略,這一
步可能包括諸如初始向量和填充等參數(shù)的選擇)。
5. 輸出密文C。
6. 鹽S和迭代次數(shù)、密鑰長(zhǎng)度dkLen、密鑰導(dǎo)出函數(shù)的標(biāo)識(shí)符和基本的加密策略可以一
AlgorithmIdentifier值傳給執(zhí)行解密的一方(見附錄A.4)。

6.2.2解密操作
PBES2的解密操作包括以下步驟,在口令的作用解密密文C以恢復(fù)消息M:
1. 獲取該操作所用的鹽S。
2. 為密鑰導(dǎo)出函數(shù)獲取迭代次數(shù)。
3. 獲取基本加密方法的導(dǎo)出密鑰的字節(jié)長(zhǎng)度dkLen。
4. 應(yīng)用選擇的密鑰導(dǎo)出函數(shù)于口令P、鹽S和迭代次數(shù)以產(chǎn)生長(zhǎng)度為dkLen字節(jié)的導(dǎo)出密
鑰DK:
DK=KDF(P,S,c,dkLen)。
5. 用基本加密方法在導(dǎo)出密鑰DK的作用下解密密文C以恢復(fù)消息M。假如解密函數(shù)輸出“解
密錯(cuò)”,那么輸出“解密錯(cuò)”并停止。
6. 輸出恢復(fù)的消息M。
7.消息驗(yàn)證方式
消息驗(yàn)證策略包括一個(gè)MAC(消息驗(yàn)證碼)產(chǎn)生操作和一個(gè)MAC驗(yàn)證函數(shù)操作,其中MAC產(chǎn)生
操作在一個(gè)密鑰作用下從一個(gè)消息產(chǎn)生一個(gè)消息驗(yàn)證碼,MAC驗(yàn)證操作在同一個(gè)密鑰下驗(yàn)證
MAC。在基于口令和消息驗(yàn)證策略中,密鑰就是口令。
該節(jié)詳述的一個(gè)策略是:PBMAC1。
7.1PBMAC1
PBMAC1結(jié)合了一個(gè)基于口令的密鑰導(dǎo)出函數(shù),對(duì)于PKCS#5的本版本中應(yīng)為PBKDF2(5.2節(jié)),
和基本的消息驗(yàn)證策略(例子見附錄B.3)。基本消息驗(yàn)證策略的密鑰長(zhǎng)度和任何其它參數(shù)都
依靠于策略。
7.1.1MAC生成
PBMAC1的MAC生成操作應(yīng)用一選擇的密鑰導(dǎo)出函數(shù)KDF和一選擇的基本消息驗(yàn)證策略,在
口令P下處理消息M以產(chǎn)生一消息驗(yàn)證碼T,包括以下步驟:
1. 如第4節(jié)所述,選擇一鹽S和一迭代次數(shù)c。
2. 為基本消息驗(yàn)證函數(shù)的導(dǎo)出密鑰選擇字節(jié)長(zhǎng)度dkLen。
3. 應(yīng)用選擇的密鑰導(dǎo)出函數(shù)于口令P、鹽S和迭代次數(shù)c,以產(chǎn)生一長(zhǎng)度為dkLen字節(jié)的
導(dǎo)出密鑰DK:
DK=KDF(P,S,c,dkLen)。
4. 在導(dǎo)出密鑰DK作用下,用基本消息驗(yàn)證策略處理消息M,以產(chǎn)生一消息驗(yàn)證碼T。
5. 輸出消息驗(yàn)證碼T。
鹽S、迭代次數(shù)c、密鑰長(zhǎng)度L、密鑰導(dǎo)出函數(shù)的標(biāo)識(shí)符,和基本消息驗(yàn)證策略可以一
AlgorithmIdentifier值傳遞給執(zhí)行驗(yàn)證的另一方。
7.1.2MAC驗(yàn)證
PBMAC1的MAC驗(yàn)證操作在口令P的作用下處理消息M以驗(yàn)證一消息驗(yàn)證碼T,包括以下步驟:
1. 獲取鹽S和迭代次數(shù)c。
2. 為基本消息驗(yàn)證方式的導(dǎo)出密鑰獲取密鑰的字節(jié)長(zhǎng)度dkLen.
3. 應(yīng)用選擇的密鑰導(dǎo)出函數(shù)于口令P、鹽S和迭代次數(shù)c,以產(chǎn)生長(zhǎng)度為dkLen字節(jié)的導(dǎo)
出密鑰DK:
DK=KDF(P,S,c,dkLen).
4. 在導(dǎo)出密鑰DK下用基本消息驗(yàn)證方式處理消息M以產(chǎn)生一消息驗(yàn)證碼T。
5. 假如消息驗(yàn)證碼證實(shí),輸出“correct”,否則輸出“incorrect”。

8.安全考慮
基于口令密碼術(shù)在它能提供的安全上通常受限,非凡在本文檔定義的那些方法,離線口令搜
索是可能的情況。在鹽和迭代次數(shù)的使用能增加攻擊的復(fù)雜度的同時(shí),很好地選擇口令是基
本的,應(yīng)把相應(yīng)的指導(dǎo)原則考慮進(jìn)去。假如口令存儲(chǔ)的話,口令被很好地保護(hù)也是重要的。

通常,從不同用戶的一個(gè)口令導(dǎo)出的密鑰也應(yīng)不同,以減少意料之外的干擾的可能性。對(duì)于
使用同一算法的基于口令的加密方法,隨機(jī)鹽已足夠確保產(chǎn)生不同的密鑰。在某些其它情況
正如第4節(jié)所述的,結(jié)構(gòu)化的鹽是必須的。當(dāng)選擇鹽值時(shí)第4節(jié)中的建議就加以考慮。
9.作者地址
BurtKaliski
RSALaboratories
20CrosbyDrive
Bedford,MA01730USA

EMail:bkaliski@rsasecurity.com
附錄AASN.1語(yǔ)法
該節(jié)定義密鑰導(dǎo)出函數(shù)的ASN.1語(yǔ)法,加密方法、消息認(rèn)證方法和支撐技術(shù)。這些定義的意
定應(yīng)用包括PKCS#8和密鑰治理、加密數(shù)據(jù)和集成保護(hù)數(shù)據(jù)的其它語(yǔ)法。
對(duì)象標(biāo)識(shí)符pkcs-5標(biāo)識(shí)OID樹的弧,本節(jié)中PKCS#5特有的OID從中導(dǎo)出:
rsadsiOBJECTIDENTIFIER::={iso(1)member-body(2)us(840)113549}
pkcsOBJECTIDENTIFIER::={rsadsi1}
pkcs-5OBJECTIDENTIFIER::={pkcs5}
A.1PBKDF1
PBKDF1沒有給出對(duì)象標(biāo)識(shí)符,PBES1的對(duì)象標(biāo)識(shí)符對(duì)已有應(yīng)用已足夠,對(duì)新的應(yīng)用推薦使用
PBKDF2。
A.2PBKDF2
對(duì)象標(biāo)識(shí)符id-PBKDF2標(biāo)識(shí)PBKDF2密鑰導(dǎo)出函數(shù)(5.2節(jié))。
id-PBKDF2OBJECTIDENTIFIER::={pkcs-512}
在AlgorithmIdentifier中,同該OID相關(guān)聯(lián)的參數(shù)域應(yīng)有類型PBKDF2-params:
PBKDF2-params::=SEQUENCE{
saltCHOICE{
specifiedOCTETSTRING,
otherSourceAlgorithmIdentifier{{PBKDF2-SaltSources}}
},
iterationCountINTEGER(1..MAX),
keyLengthINTEGER(1..MAX)OPTIONAL,
prfAlgorithmIdentifier{{PBKDF2-PRFs}}DEFAULTalgid-hmacWithSHA1}
類型PKDF2-params域有以下含義:
- salt指定鹽值,或鹽值的來(lái)源。它應(yīng)是一字節(jié)串,或是其OID在集合PBKDF2-SaltSources
的一算法ID,被PKCS#5保留給將來(lái)的版本。
Salt-Source方法被設(shè)計(jì)用于指示如何產(chǎn)生鹽值,作為算法ID中的參數(shù)和應(yīng)用數(shù)據(jù),或兩者
皆有。例如,它可能指示鹽值產(chǎn)生于從指定有關(guān)導(dǎo)出密鑰的具體信息的結(jié)構(gòu)的編碼,如第4節(jié)所
建議的。有些信息可能被帶到別處,比如在加密算法ID。但是,這些功能被延遲到PKCS#5的將
來(lái)版本。
在該節(jié)中,一應(yīng)用可能通過在指定的選擇中選擇鹽值的非凡解釋,達(dá)到節(jié)4.1提到的好處。
PBKDF2-SaltSourcesALGORITHM-IDENTIFIER::={...}
- iterationCount指定迭代次數(shù)。答應(yīng)的最大迭代次數(shù)依靠于實(shí)現(xiàn)。期待實(shí)現(xiàn)輪廓(profile)
進(jìn)一步約束范圍。
- keyLength,可選項(xiàng),是導(dǎo)出密鑰的字節(jié)長(zhǎng)度。答應(yīng)的最大密鑰長(zhǎng)度依靠于實(shí)現(xiàn);期待實(shí)現(xiàn)
輪廓(profile)進(jìn)一步約束范圍。提供該域只為了方便使用。假如顧慮一鹽值用不同密鑰長(zhǎng)
度的操作的相互干擾???
- prf標(biāo)識(shí)下層的偽隨機(jī)函數(shù)。它應(yīng)是一算法ID,其OID在集合PBKDF2-PRFs,在PKCS#5的
該版本應(yīng)包括id-hmacWithSHA1(見附錄B.1.1)和其它任何由應(yīng)用定義的OID。
PBKDF2-PRFsALGORITHM-IDENTIFIER::=
{{NULLIDENTIFIEDBYid-hmacWithSHA1},...}
缺省的偽隨機(jī)函數(shù)是HMAC-SHA-1:
algid-hmacWithSHA1AlgorithmIdentifier{{PBKDF2-PRFs}}::=
{algorithmid-hmacWithSHA1,parametersNULL:NULL}
A.3PBES1
依據(jù)密鑰導(dǎo)出函數(shù)有下層散列函數(shù)和下層的塊密碼算法,使用不同的對(duì)象標(biāo)識(shí)符標(biāo)識(shí)
PBES1加密方法(6.1節(jié)),總結(jié)在下表:

散列函數(shù) 塊密碼算法 OID
MD2DESpkcs-5.1
MD2RC2pkcs-5.4
MD5DESpkcs-5.3
MD5RC2pkcs-5.6
SHA-1DESpkcs-5.10
SHA-1RC2pkcs-5.11

pbeWithMD2AndDES-CBCOBJECTIDENTIFIER::={pkcs-51}
pbeWithMD2AndRC2-CBCOBJECTIDENTIFIER::={pkcs-54}
pbeWithMD5AndDES-CBCOBJECTIDENTIFIER::={pkcs-53}
pbeWithMD5AndRC2-CBCOBJECTIDENTIFIER::={pkcs-56}
pbeWithSHA1AndDES-CBCOBJECTIDENTIFIER::={pkcs-510}
pbeWithSHA1AndRC2-CBCOBJECTIDENTIFIER::={pkcs-511}

對(duì)每一個(gè)OID,在AlgorithmIdentifier中同該OID相關(guān)聯(lián)的參數(shù)域應(yīng)具有類型
PBEParameter:

PBEParameter::=SEQUENCE{
saltOCTETSTRING(SIZE(8)),
iterationCountINTEGER}
類型PBEParameter的域有以下含義:
- salt指定鹽值,一八字節(jié)串。
- iterationCount指定迭代次數(shù)。

A.4 PBES2
對(duì)象標(biāo)識(shí)符id-PBES2標(biāo)識(shí)PBES2加密方法(6.2節(jié))。
id-PBES2OBJECTIDENTIFIER::={pkcs-513}
對(duì)每一個(gè)OID,在AlgorithmIdentifier中同該OID相關(guān)聯(lián)的參數(shù)域應(yīng)具有類型PBES2-params:
PBES2-params::=SEQUENCE{
keyDerivationFuncAlgorithmIdentifier{{PBES2-KDFs}},
encryptionSchemeAlgorithmIdentifier{{PBES2-Encs}}}
類型PBES2-params的域有以下含義:
-keyDerivationFunc標(biāo)識(shí)下層的密鑰導(dǎo)出函數(shù)。它應(yīng)是一算法ID,其OID在集合PBES2-KDFs
中,對(duì)本版本的PKCS#5應(yīng)包括id-PBKDF2(附錄A.2)。
PBES2-KDFsALGORITHM-IDENTIFIER::=
{{PBKDF2-paramsIDENTIFIEDBYid-PBKDF2},...}
-encryptionScheme標(biāo)識(shí)下層的加密方法。它應(yīng)是一算法ID,其OID在集合PBES2-Encs,它
的定義留給應(yīng)用程序。例示的下層加密方法在附錄B.2中給出。
PBES2-EncsALGORITHM-IDENTIFIER::={...}
A.5 PBMAC1
對(duì)象標(biāo)識(shí)符id-PBMAC1標(biāo)識(shí)PBMAC1消息認(rèn)證方法(節(jié)7.1)。
id-PBMAC1OBJECTIDENTIFIER::={pkcs-514}
在AlgorithmIdentifier中同該OID相關(guān)聯(lián)的參數(shù)域應(yīng)具有類型PBMAC1-params:
PBMAC1-params::=SEQUENCE{
keyDerivationFuncAlgorithmIdentifier{{PBMAC1-KDFs}},
messageAuthSchemeAlgorithmIdentifier{{PBMAC1-MACs}}}
keyDerivationFunc域同PBES2-params(附錄A.4)的相應(yīng)域有同樣的含義,除了OID
集合是PBMAC1-KDFs。
PBMAC1-KDFsALGORITHM-IDENTIFIER::=
{{PBKDF2-paramsIDENTIFIEDBYid-PBKDF2},...}
messageAuthScheme域標(biāo)識(shí)下層的消息認(rèn)證方法。它應(yīng)是一算法ID,其OID在集合
PBMAC1-MACs中,它的定義留給應(yīng)用程序。例示的下層加密方法在附錄B.3中給出。
PBMAC1-MACsALGORITHM-IDENTIFIER::={...}
B.支撐技術(shù)
本節(jié)給出支持5、6和7節(jié)中的基于口令的策略的下層函數(shù)和方法的幾個(gè)例子。
盡管這些支撐技術(shù)適于應(yīng)用實(shí)現(xiàn),但都非強(qiáng)制的。期待將來(lái)開發(fā)PKCS#5的profile以指定
特定和支撐技術(shù)。
本節(jié)也給出支撐技術(shù)的對(duì)象標(biāo)識(shí)符。對(duì)象標(biāo)識(shí)符digestAlgorithm和encryptionAlgorithm標(biāo)識(shí)
本節(jié)引用的某些算法OID都從其中導(dǎo)出。

digestAlgorithmOBJECTIDENTIFIER::={rsadsi2}
encryptionAlgorithmOBJECTIDENTIFIER::={rsadsi3}

B.1 偽隨機(jī)函數(shù)
用于PBKDF2(5.2節(jié))的一個(gè)例子偽隨機(jī)函數(shù)是HMAC-SHA-1。
B.1.1HMAC-SHA-1
HMAC-SHA-1是同基于SHA-1散列函數(shù)的HMAC消息認(rèn)證碼相對(duì)應(yīng)的偽隨機(jī)函數(shù)。偽隨
機(jī)函數(shù)同計(jì)算消息認(rèn)證碼的函數(shù)相同,只是輸出是全長(zhǎng)度的。(偽隨機(jī)函數(shù)PRF的第一個(gè)變
量作為HMAC的“密鑰”,第二個(gè)作為HMAC的“文本。在PBKDF2的情況下,“密鑰”
就是口令,“文本”就是鹽。)HMAC-SHA-1有一個(gè)可變的密鑰長(zhǎng)度和20-字節(jié)(160位)輸出
值。
盡管HMAC-SHA-1的密鑰的長(zhǎng)度本質(zhì)上是沒有限制的,但偽隨機(jī)函數(shù)輸出的有效搜索空間
可能受限于函數(shù)的結(jié)構(gòu)。非凡是,當(dāng)密鑰長(zhǎng)于512位時(shí),HMAC-SHA-1將首先雜湊到160
位。這樣,即使從一個(gè)密鑰產(chǎn)生一個(gè)包括幾個(gè)偽隨機(jī)函數(shù)輸出的長(zhǎng)導(dǎo)出密鑰,導(dǎo)出密鑰的有
效搜索空間將最多160位。盡管對(duì)其它密鑰大小的非凡限制依靠于HMAC構(gòu)造的細(xì)節(jié),可以
保守地假設(shè),對(duì)其它的密鑰大小,有效搜索空間仍限制到160位。
(在基于口令的密碼系統(tǒng),160位的限制通常不應(yīng)造成實(shí)際的限制,因?yàn)閷?duì)口令的搜索空間
不可能大于160位。)
對(duì)象標(biāo)識(shí)符id-hmacWithSHA1標(biāo)識(shí)HMAC-SHA-1偽隨機(jī)函數(shù):
id-hmacWithSHA1OBJECTIDENTIFIER::={digestAlgorithm7}
在AlgorithmIdentifier同該OID相關(guān)聯(lián)的參數(shù)域應(yīng)有類型NULL。該對(duì)象標(biāo)識(shí)符使用在對(duì)象集
合PBKDF2-PRFs(見附錄A.2)。
注重,盡管HMAC-SHA-1作為消息認(rèn)證碼設(shè)計(jì)的,但在較強(qiáng)的假定下,它的安全驗(yàn)證(?)
很輕易被修改以滿足對(duì)一偽隨機(jī)函數(shù)的需要。
一散列函數(shù)也可能在某些假定下滿足偽隨機(jī)函數(shù)的需要。例如,直接應(yīng)用一散列函數(shù)到“密
鑰”和“文本”的串聯(lián)可能是合適的,只要“文本”有合適的結(jié)構(gòu)以預(yù)防某些攻擊。但
HMAC-SHA-1更可取,因?yàn)樗选懊荑€”和“文本”看作單獨(dú)的變量,不需要“文本”有
任何結(jié)構(gòu)。
B.2 加密方法
PBES2(6.2節(jié))的偽隨機(jī)函數(shù)的例子有DES-CBC-Pad,DES-EDE2-CBC-Pad,RC2-CBC-Pad,
和RC5-CBC-Pad。
在本節(jié)給出的對(duì)象標(biāo)識(shí)符預(yù)期在對(duì)象集合PBES2-Encs中應(yīng)用(附錄A.4)。
B.2.1 DES-CBC-Pad
DES-CBC-Pad是CBC模式下的單密鑰DES,并使用RFC 1423的填充操作(見6.1.1節(jié))。
DES-CBC-Pad有一個(gè)八字節(jié)的加密密鑰和一個(gè)八字節(jié)的初始向量。密鑰被看作是56位DES
密鑰的64位編碼,忽略奇偶校驗(yàn)位。
對(duì)象標(biāo)識(shí)符desCBC(在NIST/OSIImplementors'Workshop協(xié)定中定義)標(biāo)識(shí)DES-CBC-Pad
加密方法。
desCBCOBJECTIDENTIFIER::=
{iso(1)identified-organization(3)oiw(14)secsig(3)algorithms(2)7}
在AlgorithmIdentifier中同該OID相關(guān)聯(lián)的參數(shù)域應(yīng)有類型OCTETSTRING(SIZE(8)),指定
CBC模式的初始向量。
B.2.2DES-EDE3-CBC-Pad
DES-EDE3-CBC-Pad是CBC模式下的三密鑰的三重DES,用RFC1423的填充操作。
DES-EDE3-CBC-Pad有一個(gè)24字節(jié)的加密密鑰和一個(gè)八字節(jié)初始向量。密鑰被看作是三個(gè)
八字節(jié)密鑰的串聯(lián),每一個(gè)是一56位DES密鑰的64位編碼,忽略奇偶校驗(yàn)位。
對(duì)象標(biāo)識(shí)符des-EDE3-CBC標(biāo)識(shí)DES-EDE3-CBC-Pad加密方法:
des-EDE3-CBCOBJECTIDENTIFIER::={encryptionAlgorithm7}
在AlgorithmIdentifier中同該OID相關(guān)聯(lián)的參數(shù)域應(yīng)有類型OCTETSTRING(SIZE(8)),指定
CBC模式的初始向量。
注重:沒有填充的DES-EDE3-CBC的OID在ANSIX9.52[1]給出;這里給出的OID由于指明
了填充而更可取。
B.2.3RC2-CBC-Pad
RC2-CBC-Pad是CBC模式下的RC2(tm)加密方法[21],使用RFC1423填充操作。
RC2-CBC-Pad
有一個(gè)從1到128字節(jié)的可變的密鑰長(zhǎng)度;一個(gè)從1到1024位的單獨(dú)的“有效密鑰位”參
數(shù),它不依靠于密鑰長(zhǎng)度限制有效搜索空間;和一個(gè)八字節(jié)的初始向量。
對(duì)象標(biāo)識(shí)符rc2CBC標(biāo)識(shí)RC2-CBC-Pad加密方法:
rc2CBCOBJECTIDENTIFIER::={encryptionAlgorithm2}
在AlgorithmIdentifier中同該OID相關(guān)聯(lián)的參數(shù)域應(yīng)具有類型RC2-CBC-Parameter:
RC2-CBC-Parameter::=SEQUENCE{
rc2ParameterVersionINTEGEROPTIONAL,
ivOCTETSTRING(SIZE(8))}
類型RC2-CBCParameter的域有以下含義:
- rc2ParameterVersion是RC2的“有效密鑰位”的一個(gè)RSASecurityInc.所有的編碼。定
義了以下編碼:
EffectiveKeyBitsEncoding
40160
64120
12858
b>=256b
假如rc2ParameterVersion域被忽略,缺省的“有效密鑰位”是32。(這是為了同某些很老的
實(shí)現(xiàn)向后兼容。)
- iv是八字節(jié)的初始向量
B.2.4RC5-CBC-Pad
RC5-CBC-Pad是CBC模式下的RC5(tm)加密算法[20],并使用RFC1423填充操作的推廣。
該方法完整的定義在[2].RC5-CBC-Pad有一個(gè)從0到256字節(jié)的可變的密鑰長(zhǎng)度,支持64
位和128位的塊大小。對(duì)于前者,它有一個(gè)8字節(jié)的初始向量;對(duì)于后者,有一個(gè)16字節(jié)
的初始向量。RC5-CBC-Pad在加密操作中也有一個(gè)從8到127的可變數(shù)目的“輪次”。

注重,填充操作的推廣是這樣的。對(duì)64位塊大小的RC5,填充串在RFC1423中定義。對(duì)
128位塊大小的RC5,填充串由16-(Mmod16)個(gè)字節(jié)組成,每個(gè)字節(jié)的值是16-(Mmod
16)。

對(duì)象標(biāo)識(shí)符rc5-CBC-PAD[2]標(biāo)識(shí)RC5-CBC-Pad加密方法:
rc5-CBC-PADOBJECTIDENTIFIER::={encryptionAlgorithm9}
在AlgorithmIdentifier中同該OID相關(guān)聯(lián)的參數(shù)域應(yīng)有類型RC5-CBC-Parameters:
RC5-CBC-Parameters::=SEQUENCE{
versionINTEGER{v1-0(16)}(v1-0),
roundsINTEGER(8..127),
blockSizeInBitsINTEGER(64128),
ivOCTETSTRINGOPTIONAL}
類型RC5-CBC-Parameters的域有以下含義:
version是算法的版本,應(yīng)為v1-0。
rounds是加密操作的輪次數(shù),應(yīng)在8與127之間。
blockSizeInBits是塊大小的位數(shù),應(yīng)為64或128。
iv是初始向量,對(duì)64位RC5是一個(gè)8字節(jié)串,對(duì)128位RC5是一個(gè)16字節(jié)串。缺省是一
包含內(nèi)容為0長(zhǎng)度適當(dāng)?shù)淖止?jié)串。
B.3消息認(rèn)證方法
PBMAC1(7.1節(jié))的消息認(rèn)證方法的一個(gè)例子是HMAC-SHA-1。
B.3.1HMAC-SHA-1
HMAC-SHA-1是基于SHA-1散列函數(shù)[18]的HMAC消息消息認(rèn)證方法[7]。HMAC-SHA-1
有可變的密鑰長(zhǎng)度和一20字節(jié)(160位)消息認(rèn)證碼。
對(duì)象標(biāo)識(shí)符id-hmacWithSHA1(見附錄B.1.1)標(biāo)識(shí)HMAC-SHA-1消息認(rèn)證方法。(偽隨機(jī)
函數(shù)和消息認(rèn)證方法的對(duì)象標(biāo)識(shí)符是相同的,可通過上下文區(qū)分。)該標(biāo)識(shí)符預(yù)期在對(duì)象集
合PBMAC1-Macs中應(yīng)用(附錄A.5)。
C.ASN.1模塊
為了參考的目的,在以前各節(jié)中的ASN.1語(yǔ)法在這里作為ASN.1模塊給出。
--PKCS#5v2.0ASN.1Module
--RevisedMarch25,1999

--Thismodulehasbeencheckedforconformancewiththe
--ASN.1standardbytheOSSASN.1Tools

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

DEFINITIONS::=BEGIN

--Basicobjectidentifiers

rsadsiOBJECTIDENTIFIER::={iso(1)member-body(2)us(840)113549}
pkcsOBJECTIDENTIFIER::={rsadsi1}

pkcs-5OBJECTIDENTIFIER::={pkcs5}

--Basictypesandclasses

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

ALGORITHM-IDENTIFIER::=TYPE-IDENTIFIER

--PBKDF2

PBKDF2AlgorithmsALGORITHM-IDENTIFIER::=
{{PBKDF2-paramsIDENTIFIEDBYid-PBKDF2},...}

id-PBKDF2OBJECTIDENTIFIER::={pkcs-512}

algid-hmacWithSHA1AlgorithmIdentifier{{PBKDF2-PRFs}}::=
{algorithmid-hmacWithSHA1,parametersNULL:NULL}

PBKDF2-params::=SEQUENCE{
saltCHOICE{
specifiedOCTETSTRING,
otherSourceAlgorithmIdentifier{{PBKDF2-SaltSources}}
},
iterationCountINTEGER(1..MAX),
keyLengthINTEGER(1..MAX)OPTIONAL,
prfAlgorithmIdentifier{{PBKDF2-PRFs}}DEFAULT
algid-hmacWithSHA1
}

PBKDF2-SaltSourcesALGORITHM-IDENTIFIER::={...}

PBKDF2-PRFsALGORITHM-IDENTIFIER::=
{{NULLIDENTIFIEDBYid-hmacWithSHA1},...}

--PBES1

PBES1AlgorithmsALGORITHM-IDENTIFIER::={

{PBEParameterIDENTIFIEDBYpbeWithMD2AndDES-CBC}
{PBEParameterIDENTIFIEDBYpbeWithMD2AndRC2-CBC}
{PBEParameterIDENTIFIEDBYpbeWithMD5AndDES-CBC}
{PBEParameterIDENTIFIEDBYpbeWithMD5AndRC2-CBC}
{PBEParameterIDENTIFIEDBYpbeWithSHA1AndDES-CBC}
{PBEParameterIDENTIFIEDBYpbeWithSHA1AndRC2-CBC},
...
}

pbeWithMD2AndDES-CBCOBJECTIDENTIFIER::={pkcs-51}
pbeWithMD2AndRC2-CBCOBJECTIDENTIFIER::={pkcs-54}
pbeWithMD5AndDES-CBCOBJECTIDENTIFIER::={pkcs-53}
pbeWithMD5AndRC2-CBCOBJECTIDENTIFIER::={pkcs-56}
pbeWithSHA1AndDES-CBCOBJECTIDENTIFIER::={pkcs-510}
pbeWithSHA1AndRC2-CBCOBJECTIDENTIFIER::={pkcs-511}

PBEParameter::=SEQUENCE{
saltOCTETSTRING(SIZE(8)),
iterationCountINTEGER
}

--PBES2

PBES2AlgorithmsALGORITHM-IDENTIFIER::=
{{PBES2-paramsIDENTIFIEDBYid-PBES2},...}

id-PBES2OBJECTIDENTIFIER::={pkcs-513}

PBES2-params::=SEQUENCE{
keyDerivationFuncAlgorithmIdentifier{{PBES2-KDFs}},
encryptionSchemeAlgorithmIdentifier{{PBES2-Encs}}
}

PBES2-KDFsALGORITHM-IDENTIFIER::=
{{PBKDF2-paramsIDENTIFIEDBYid-PBKDF2},...}

PBES2-EncsALGORITHM-IDENTIFIER::={...}

--PBMAC1

PBMAC1AlgorithmsALGORITHM-IDENTIFIER::=
{{PBMAC1-paramsIDENTIFIEDBYid-PBMAC1},...}

id-PBMAC1OBJECTIDENTIFIER::={pkcs-514}

PBMAC1-params::=SEQUENCE{
keyDerivationFuncAlgorithmIdentifier{{PBMAC1-KDFs}},
messageAuthSchemeAlgorithmIdentifier{{PBMAC1-MACs}}

}

PBMAC1-KDFsALGORITHM-IDENTIFIER::=
{{PBKDF2-paramsIDENTIFIEDBYid-PBKDF2},...}

PBMAC1-MACsALGORITHM-IDENTIFIER::={...}

--Supportingtechniques

digestAlgorithmOBJECTIDENTIFIER::={rsadsi2}
encryptionAlgorithmOBJECTIDENTIFIER::={rsadsi3}

SupportingAlgorithmsALGORITHM-IDENTIFIER::={
{NULLIDENTIFIEDBYid-hmacWithSHA1}
{OCTETSTRING(SIZE(8))IDENTIFIEDBYdesCBC}
{OCTETSTRING(SIZE(8))IDENTIFIEDBYdes-EDE3-CBC}
{RC2-CBC-ParameterIDENTIFIEDBYrc2CBC}
{RC5-CBC-ParametersIDENTIFIEDBYrc5-CBC-PAD},
...
}

id-hmacWithSHA1OBJECTIDENTIFIER::={digestAlgorithm7}

desCBCOBJECTIDENTIFIER::=
{iso(1)identified-organization(3)oiw(14)secsig(3)
algorithms(2)7}--fromOIW

des-EDE3-CBCOBJECTIDENTIFIER::={encryptionAlgorithm7}

rc2CBCOBJECTIDENTIFIER::={encryptionAlgorithm2}

RC2-CBC-Parameter::=SEQUENCE{
rc2ParameterVersionINTEGEROPTIONAL,
ivOCTETSTRING(SIZE(8))
}

rc5-CBC-PADOBJECTIDENTIFIER::={encryptionAlgorithm9}

RC5-CBC-Parameters::=SEQUENCE{
versionINTEGER{v1-0(16)}(v1-0),
roundsINTEGER(8..127),
blockSizeInBitsINTEGER(64128),
ivOCTETSTRINGOPTIONAL
}
END
知識(shí)產(chǎn)權(quán)考慮
RSASecuritymakesnopatentclaimsonthegeneralconstrUCtions
describedinthisdocument,althoughspecificunderlyingtechniques
maybecovered.Amongtheunderlyingtechniques,theRC5encryption
algorithm(AppendixB.2.4)isprotectedbyU.S.Patents5,724,428
[22]and5,835,600[23].

RC2andRC5aretrademarksofRSASecurity.

Licensetocopythisdocumentisgrantedprovidedthatitis
identifiedasRSASecurityInc.Public-KeyCryptographyStandards
(PKCS)inallmaterialmentioningorreferencingthisdocument.

RSASecuritymakesnorepresentationsregardingintellectualproperty
claimsbyotherparties.Suchdeterminationistheresponsibilityof
theuser.
修訂記錄
Versions1.0-1.3

Versions1.0-1.3被分發(fā)給在1991年1月和3月參加RSAData
SecurityInc.的公鑰密碼系統(tǒng)標(biāo)準(zhǔn)會(huì)議的與會(huì)者。

Version1.4

Version1.4是1991年6月3日PKCS的首次發(fā)行的一部分。該版本作為NIST/OSI
Implementors'Workshop文檔SEC-SIG-91-20出版。.

Version1.5

Version1.5綜合了幾處編輯更正,包括對(duì)參考書目的修改和修訂記錄的增加。

Version2.0

Version2.0綜合了文檔結(jié)構(gòu)方面的主要編輯更正,并引入了PBES2加密方法,PBMAC1消
息認(rèn)證方法,和獨(dú)立的基于口令的密鑰導(dǎo)出函數(shù)。該版本繼續(xù)支持版本1.5中的加密過程。

參考書目
[1]AmericanNationalStandardX9.52-1998,TripleDataEncryption
AlgorithmModesofOperation.Workingdraft,Accredited
StandardsCommitteeX9,July27,1998.

[2]Baldwin,R.andR.Rivest,"TheRC5,RC5-CBC,RC5-CBC-Pad,and
RC5-CTSAlgorithms",RFC2040,October1996.

[3]Balenson,D.,"PrivacyEnhancementforInternetElectronicMail:
PartIII:Algorithms,Modes,andIdentifiers",RFC1423,
February1993.

[4]S.M.BellovinandM.Merritt.Encryptedkeyexchange:
PassWord-basedprotocolssecureagainstdictionaryattacks.In
Proceedingsofthe1992IEEEComputerSocietyConferenceon
ResearchinSecurityandPrivacy,pages72-84,IEEEComputer
Society,1992.

[5]D.Jablon.Strongpassword-onlyauthenticatedkeyexchange.ACM
ComputerCommunicationsReview,October1996.

[6]Kaliski,B.,"TheMD2Message-DigestAlgorithm",RFC1319,April
1992.

[7]Krawczyk,H.,Bellare,M.andR.Canetti,"HMAC:Keyed-Hashing
forMessageAuthentication",RFC2104,February1997.

[8]RobertMorrisandKenThompson.Passwordsecurity:Acase
history.CommunicationsoftheACM,22(11):594-597,November
1979.

[9]ISO/IEC8824-1:1995:Informationtechnology-AbstractSyntax
NotationOne(ASN.1)-Specificationofbasicnotation.1995.

[10]ISO/IEC8824-1:1995/Amd.1:1995Informationtechnology-Abstract
SyntaxNotationOne(ASN.1)-Specificationofbasicnotation-
Amendment1-Rulesofextensibility.1995.

[11]ISO/IEC8824-2:1995Informationtechnology-AbstractSyntax
NotationOne(ASN.1)-Informationobjectspecification.1995.

[12]ISO/IEC8824-2:1995/Amd.1:1995Informationtechnology-Abstract
SyntaxNotationOne(ASN.1)-Informationobjectspecification-
Amendment1-Rulesofextensibility.1995.

[13]ISO/IEC8824-3:1995Informationtechnology-AbstractSyntax
NotationOne(ASN.1)-Constraintspecification.1995.

[14]ISO/IEC8824-4:1995Informationtechnology-AbstractSyntax
NotationOne(ASN.1)-ParameterizationofASN.1specifications.
1995.

[15]NationalInstituteofStandardsandTechnology(NIST).FIPSPUB
46-2:DataEncryptionStandard.December30,1993.

[16]NationalInstituteofStandardsandTechnology(NIST).FIPSPUB
81:DESModesofOperation.December2,1980.

[17]NationalInstituteofStandardsandTechnology(NIST).FIPSPUB
112:PasswordUsage.May30,1985.

[18]NationalInstituteofStandardsandTechnology(NIST).FIPSPUB
180-1:SecureHashStandard.April1994.

[19]Rivest,R.,"TheMD5Message-DigestAlgorithm",RFC1321,April
1992.

[20]R.L.Rivest.TheRC5encryptionalgorithm.InProceedingsofthe
SecondInternationalWorkshoponFastSoftwareEncryption,pages
86-96,Springer-Verlag,1994.

[21]Rivest,R.,"ADescriptionoftheRC2(r)EncryptionAlgorithm",
RFC2268,March1998.

[22]R.L.Rivest.Block-EncryptionAlgorithmwithData-Dependent
Rotations.U.S.PatentNo.5,724,428,March3,1998.

[23]R.L.Rivest.BlockEncryptionAlgorithmwithData-Dependent
Rotations.U.S.PatentNo.5,835,600,November10,1998.

[24]RSALaboratories.PKCS#5:Password-BasedEncryptionStandard.
Version1.5,November1993.

[25]RSALaboratories.PKCS#8:Private-KeyInformationSyntax
Standard.Version1.2,November1993.

[26]T.Wu.TheSecureRemotePasswordprotocol.InProceedingsof
the1998InternetSocietyNetworkandDistributedSystem
SecuritySymposium,pages97-111,InternetSociety,1998.

[27]Yergeau,F.,"UTF-8,atransformationformatofISO10646",RFC
2279,January1998.

ContactInformation&AboutPKCS

ThePublic-KeyCryptographyStandardsarespecificationsproducedby
RSALaboratoriesincooperationwithsecuresystemsdevelopers
worldwideforthepurpoSEOfacceleratingthedeploymentofpublic-
keycryptography.Firstpublishedin1991asaresultofmeetings
withasmallgroupofearlyadoptersofpublic-keytechnology,the
PKCSdocumentshavebecomewidelyreferencedandimplemented.
ContributionsfromthePKCSSerieshavebecomepartofmanyformal
anddefactostandards,includingANSIX9documents,PKIX,SET,
S/MIME,andSSL.

FurtherdevelopmentofPKCSoccursthroughmailinglistdiscussions
andoccasionalworkshops,andsuggestionsforimprovementare
welcome.Formoreinformation,contact:

PKCSEditor
RSALaboratories
20CrosbyDrive
Bedford,MA01730USA
pkcs-editor@rsasecurity.com
http://www.rsalabs.com/pkcs/

全部版權(quán)聲明

Copyright(C)TheInternetSociety(2000).AllRightsReserved.

Thisdocumentandtranslationsofitmaybecopiedandfurnishedto
others,andderivativeworksthatcommentonorotherwiseeXPlainit
orassistinitsimplementationmaybeprepared,copied,published
anddistributed,inwholeorinpart,withoutrestrictionofany
kind,providedthattheabovecopyrightnoticeandthisparagraphare
includedonallsuchcopiesandderivativeworks.However,this
documentitselfmaynotbemodifiedinanyway,suchasbyremoving
thecopyrightnoticeorreferencestotheInternetSocietyorother
Internetorganizations,exceptasneededforthepurposeof
developingInternetstandardsinwhichcasetheproceduresfor
copyrightsdefinedintheInternetStandardsprocessmustbe
followed,orasrequiredtotranslateitintolanguagesotherthan
English.

Thelimitedpermissionsgrantedaboveareperpetualandwillnotbe
revokedbytheInternetSocietyoritssuccessorsorassigns.

Thisdocumentandtheinformationcontainedhereinisprovidedonan
"ASIS"basisandTHEINTERNETSOCIETYANDTHEINTERNETENGINEERING
TASKFORCEDISCLAIMSALLWARRANTIES,EXPRESSORIMPLIED,INCLUDING
BUTNOTLIMITEDTOANYWARRANTYTHATTHEUSEOFTHEINFORMATION
HEREINWILLNOTINFRINGEANYRIGHTSORANYIMPLIEDWARRANTIESOF
MERCHANTABILITYORFITNESSFORAPARTICULARPURPOSE.

Acknowledgement

FundingfortheRFCEditorfunctioniscurrentlyprovidedbythe
InternetSociety.




發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 济阳县| 临海市| 桦南县| 弥渡县| 本溪| 乌苏市| 察隅县| 得荣县| 永顺县| 晋江市| 台北县| 赤城县| 高要市| 额尔古纳市| 依安县| 泌阳县| 开阳县| 双流县| 肇州县| 安图县| 密山市| 赤峰市| 阿拉善盟| 通州区| 南和县| 曲沃县| 山东| 蒙自县| 鹤壁市| 巴林右旗| 白玉县| 凤城市| 灵台县| 乐清市| 开江县| 天祝| 阆中市| 成都市| 龙游县| 布尔津县| 石嘴山市|