?? rfc2409.txt
字號:
報頭的負(fù)載長度用于執(zhí)行加密操作。
對稱加密密鑰是從解密的當(dāng)前時間(nonce)中衍生出來的,如下所示。先計算值Ne_i和Ne_r:
Ne_i = prf(Ni_b, CKY-I)
Ne_r = prf(Nr_b, CKY-R)
接著,通過附錄B中描述的方式分別從Ne_i 和Ne_r中得到密鑰Ke_i和Ke_r,并用于為協(xié)商
的加密算法衍生出對稱密鑰。如果協(xié)商的prf產(chǎn)生的輸出的長度大于或等于密碼的密鑰長度要求,則
Ke_i和Ke_r分別從Ne_i和Ne_r的最高位衍生。如果Ke_i和Ke_r需要的長度超過了prf的輸出的
長度,則還需要的比特位通過下列方式得到:不斷的將prf輸出的結(jié)果作為prf的輸入,并連接產(chǎn)生
的結(jié)果,直到得到需要的長度。例如:如果協(xié)商的加密算法需要320比特的密鑰,而prf的輸出只有
128比特時,Ke_i就是K的最高320比特,其中:
K = K1 | K2 | K3 and
K1 = prf(Ne_i, 0)
K2 = prf(Ne_i, K1)
K3 = prf(Ne_i, K2)
為簡潔起見,只顯示了Ke_i的衍生過程;Ke_r是相同的。在計算K1時值0的長度是單個字節(jié)。
注意Ne_i,Ne_r,Ke_i,以及Ke_r都是暫時性的,必須在使用后廢棄。
將請求存放在可選的HASH負(fù)載和強制的當(dāng)前時間(nonce)負(fù)載的位置中,就沒有其它的負(fù)載
請求了。跟在加密的當(dāng)前時間(nonce)之后的所有的負(fù)載——無論任何順序——都必須使用Ke_i
或Ke_r來加密,具體使用哪一個取決于方向。
如果CBC模式用于對稱加密,則初始向量(IV)如下所設(shè):當(dāng)前時間(nonce)后的第一個負(fù)
載的IV設(shè)為0;后繼的使用臨時對稱加密密鑰——Ke_i來加密的負(fù)載的IV是先前的負(fù)載經(jīng)加密過
后的密文塊。加密過后的負(fù)載填充到最接近的塊大小。所有的填充字節(jié)都是0x00,除了最后一個字
節(jié)。最后一個填充字節(jié)的內(nèi)容為使用的填充字節(jié)數(shù),包括它自己。注意,這就表示總是有填充的。
5.4 使用共享密鑰的第一階段協(xié)商
通過其它帶外(out-of-band)機制而衍生出來的密鑰也可用于驗證交換。這種密鑰實際的建立
過程已經(jīng)超出了本文檔的范圍。
當(dāng)進行共享密鑰驗證時,主模式定義如下:
發(fā)起者 響應(yīng)者
---------- -----------
HDR, SA -->
<-- HDR, SA
HDR, KE, Ni -->
<-- HDR, KE, Nr
HDR*, IDii, HASH_I -->
<-- HDR*, IDir, HASH_R
使用共享密鑰的積極模式描述如下:
發(fā)起者 響應(yīng)者
----------- -----------
HDR, SA, KE, Ni, IDii -->
<-- HDR, SA, KE, Nr, IDir, HASH_R
HDR, HASH_I -->
當(dāng)使用共享密鑰的主模式時,密鑰只能通過雙方的IP地址來進行識別,因為HASH_I必須在發(fā)
起者處理IDir之前計算出來。積極模式允許使用大量的共享秘密的標(biāo)識符。另外,積極模式還允許
雙方維持多個不同的共享密鑰,并能對一次特定的交換標(biāo)識出正確的密鑰。
5.5 第二階段——快速模式
快速模式本身并不是一次完整的交換(因為它和第一階段交換相關(guān)聯(lián)),但又作為SA協(xié)商過程
(第二階段)的一部分用來衍生密鑰材料和協(xié)商非ISAKMP SA的共享策略。快速模式交換的信息
必須由ISAKMP SA來保護——即除了ISAKMP報頭外,所有的負(fù)載都要加密。在快速模式中,
HASH負(fù)載必須立即跟隨在ISAKMP報頭后,SA負(fù)載必須緊跟在HASH負(fù)載之后。HASH用于驗
證消息,同時也提供了參與的證據(jù)。
在一個特定的ISAKMP SA中,在ISAKMP報頭中的消息ID標(biāo)識了快速模式正在進行中,而
ISAKMP SA本身由ISAKMP報頭中的cookie來標(biāo)識。因為每個快速模式的實例使用唯一的初始向
量(參看附錄B),這就有可能在一個ISAKMP SA中的任一時間內(nèi)同時有多個快速模式在進行中。
快速模式基本上是一次SA協(xié)商和提供重放(replay)保護的當(dāng)前時間(nonce)交換。當(dāng)前時間
(nonce)用于產(chǎn)生新的密鑰材料并阻止通過重放攻擊產(chǎn)生虛假的安全聯(lián)盟。可選的密鑰交換(KE)
負(fù)載可以經(jīng)交換來實現(xiàn)通過快速模式產(chǎn)生附加的Diffie-Hellman交換以及求冪運算。但是必須支持使
用快速模式的密鑰交換負(fù)載成為可選的。
基本的快速模式(沒有KE負(fù)載)更新第一階段的求冪運算所衍生出來的密鑰材料。這并不提
供PFS。使用可選的KE負(fù)載,執(zhí)行額外的求冪運算,從而為密鑰材料提供了PFS。
在快速模式中SA協(xié)商中的身份隱含假定為ISAKMP雙方的IP地址,且沒有對協(xié)議或端口號隱
含施加限制,除非在快速模式中客戶標(biāo)識符是指定的。如果ISAKMP代表另一方作為客戶協(xié)商代表,
則雙方的身份必須傳遞為IDci和IDcr。本地策略將決定是否接受身份指定的提議(proposal)。如果
客戶身份沒有被快速模式的響應(yīng)者所接受(由于策略或其它原因),一個通知消息類型為
INVALID-ID-INFORMATION (18)的通知負(fù)載將發(fā)出。
在雙方之間有多個隧道存在的情況下,客戶身份用于標(biāo)識并指導(dǎo)流量進入對應(yīng)的隧道,同時也
用于支持不同粒度的唯一和共享SA。
快速模式期間所發(fā)出的所有消息邏輯上是相關(guān)的并且必須一致。例如,如果KE負(fù)載被發(fā)出,
描述Diffie-Hellman組的屬性(參看6.1節(jié)和[Pip97])必須被包括在協(xié)商的 SA中的每個提議
(proposal)中的每個轉(zhuǎn)換(transform)之中。同樣的,如果使用了客戶身份,則它們必須應(yīng)用到協(xié)
商的每個SA中。
快速模式定義如下:
發(fā)起者 響應(yīng)者
----------- -----------
HDR*, HASH(1), SA, Ni
[, KE ] [, IDci, IDcr ] -->
<-- HDR*, HASH(2), SA, Nr
[, KE ] [, IDci, IDcr ]
HDR*, HASH(3) -->
其中:
HASH(1)是從ISAKMP報頭中的消息id(M-ID)開始,連接跟在hash后的整個消息的prf
結(jié)果,其中包括所有的負(fù)載頭,但不包括為加密而加入的填充。HASH(2)和HASH(1)一樣,除
了發(fā)起者的不包含負(fù)載頭的當(dāng)前時間(nonce)——Ni被增加在M-ID后,完整的消息之前。HASH
(2)中添加當(dāng)前時間是為了增加參與證據(jù)。用于參與的HASH(3)是用單個字節(jié)代表的值0,后
跟串聯(lián)著的消息id和除去負(fù)載頭的兩個當(dāng)前時間(nonce)——先是發(fā)起者的,后跟響應(yīng)者的nonce
的prf結(jié)果。換句話說,以上的交換的hash是:
HASH(1) = prf(SKEYID_a, M-ID | SA | Ni [ | KE ] [ | IDci | IDcr )
HASH(2) = prf(SKEYID_a, M-ID | Ni_b | SA | Nr [ | KE ] [ | IDci | IDcr )
HASH(3) = prf(SKEYID_a, 0 | M-ID | Ni_b | Nr_b)
除了HASH,SA,和可選的ID負(fù)載以外,快速模式?jīng)]有對負(fù)載順序的限制。當(dāng)消息中的負(fù)載
順序不同于示例時,或當(dāng)有可選的負(fù)載,如通知負(fù)載被鏈入到了消息中時,HASH(1)和HASH(2)
可以和上面的示例不同。
如果不需要PFS,并且沒有KE負(fù)載交換,則新的密鑰材料定義為:
KEYMAT = prf(SKEYID_d, protocol | SPI | Ni_b | Nr_b)。
如果需要PFS且有KE負(fù)載交換,則新密鑰材料定義為:
KEYMAT = prf(SKEYID_d, g(qm)^xy | protocol | SPI | Ni_b | Nr_b)
其中快速模式中的g(qm)^xy是臨時Diffie-Hellman交換的共享秘密。
在任一種情況下,“協(xié)議”和“SPI”是從包含協(xié)商的轉(zhuǎn)換(transform)負(fù)載的ISAKMP提議負(fù)
載中得到的。
單個SA協(xié)商導(dǎo)致兩個安全聯(lián)盟—— 一個入,一個出。每個SA(一個由發(fā)起者選擇,另一個
有響應(yīng)者選擇)的不同的SPI保證了每個方向有不同的密鑰。SA的目的地選擇的SPI用于衍生SA
的KEYMAT。
當(dāng)需要的密鑰材料的長度大于prf所提供的長度時,KEYMAT就不斷的通過將prf的結(jié)果回填
給自己,并將結(jié)果串聯(lián)起來,直到滿足需要的長度。即:
KEYMAT = K1 | K2 | K3 | ...
其中
K1 = prf(SKEYID_d, [ g(qm)^xy | ] protocol | SPI | Ni_b | Nr_b)
K2 = prf(SKEYID_d, K1 | [ g(qm)^xy | ] protocol | SPI | Ni_b | Nr_b)
K3 = prf(SKEYID_d, K2 | [ g(qm)^xy | ] protocol | SPI | Ni_b | Nr_b)
等等。
這個密鑰材料(不論是否滿足PFS,和是直接衍生出,還是串聯(lián)而成)必須在協(xié)商的SA中使
用。而由服務(wù)來定義怎樣從密鑰材料中衍生密鑰。
在快速模式中使用臨時Diffie-Hellman交換的情況下,指數(shù)(g(qm)^xy)從當(dāng)前狀態(tài)中不可
恢復(fù)的刪除掉,并且SKEYID_e和SKEYID_a(從第一階段協(xié)商中衍生)繼續(xù)用于保護和驗證ISAKMP
SA,同時SKEYID_d繼續(xù)用于衍生密鑰。
使用快速模式,多個SA和密鑰可以使用一個交換來協(xié)商,如下所示:
發(fā)起者 響應(yīng)者
----------- -----------
HDR*, HASH(1), SA0, SA1, Ni,
[, KE ] [, IDci, IDcr ] -->
<-- HDR*, HASH(2), SA0, SA1, Nr,
[, KE ] [, IDci, IDcr ]
HDR*, HASH(3) -->
密鑰材料和在單個SA的情況中一樣的衍生出來。在這種情況下(兩個SA負(fù)載的協(xié)商),結(jié)果
將是四個安全聯(lián)盟——每個方向兩個。
5.6 新組模式
新組模式不能在ISAKMP SA建立之前使用。新組的描述只能跟在第一階段協(xié)商之后。(雖然它
也不是第二階段的交換)。
發(fā)起者 響應(yīng)者
----------- -----------
HDR*, HASH(1), SA -->
<-- HDR*, HASH(2), SA
其中HASH(1)是prf的輸出,它使用SKEYID_a作為密鑰,從ISAKMP報頭中的消息ID開
始,串接整個SA的提議(包括頭和數(shù)據(jù)部分)作為數(shù)據(jù);HASH(2)也是prf的輸出,它使用SKEYID_a
作為密鑰,同時從ISAKMP報頭中的消息ID開始,串接應(yīng)答作為數(shù)據(jù)。換種方式表達,上面交換
的hash為:
HASH(1) = prf(SKEYID_a, M-ID | SA)
HASH(2) = prf(SKEYID_a, M-ID | SA)
提議將指定組的特性(參看附錄A,“屬性分配編號”)。私有組的組描述必須大于或等于2^15。
如果組不能被接受,響應(yīng)者必須使用消息類型設(shè)為ATTRIBUTES-NOT-SUPPORTED (13)的通知負(fù)載
來應(yīng)答。
ISAKMP的實現(xiàn)可以要求私有組在建立的它的SA中設(shè)置超時。
組可以在主模式的SA提議中直接協(xié)商。對于MODP組來說,要達到這目的,必須將下列值作
為SA的屬性來傳遞(參看附錄A):類型、素數(shù)和產(chǎn)生器;對于EC2N組來說,需要類型、不可約
分多項式、組產(chǎn)生器1、組產(chǎn)生器2、組曲線A、組曲線B和組順序。另一方面,使用新組模式,組
的種類(nature)可以隱藏,同時在第一階段的協(xié)商中只有組標(biāo)識符以明文方式傳遞。
5.7 ISAKMP信息交換
本協(xié)議在可能時保護ISAKMP信息交換。當(dāng)使用本協(xié)議時,一旦ISAKMP安全聯(lián)盟已經(jīng)建立(同
時SKEYID_e 和 SKEYID_a也已產(chǎn)生),則ISAKMP信息交換就如下所示:
發(fā)起者 響應(yīng)者
----------- -----------
HDR*, HASH(1), N/D -->
其中N/D要么是ISAKMP通知(notify)負(fù)載,要么是ISAKMP刪除(delete)負(fù)載,同時HASH
(1)是prf的輸出,它使用SKEYID_a作為密鑰,而本交換唯一的M-ID和串接的整個信息負(fù)載(通
知負(fù)載或者刪除負(fù)載)作為數(shù)據(jù)。換種方式表達,上面交換的hash為:
HASH(1) = prf(SKEYID_a, M-ID | N/D)
和提到過的一樣,ISAKMP報頭中的消息ID——也用在prf的計算中——是這個交換中唯一的,
不能和產(chǎn)生這次信息交換的第二階段交換中的另一個消息ID相同。使用SKEYID_e來加密這個消息
時,初始向量的導(dǎo)出在附錄B中描述。
如果ISAKMP安全聯(lián)盟在信息交換時還沒有建立,則交換就以明文發(fā)送,同時沒有HASH負(fù)載。
6 Oakley組
使用IKE,進行Diffie-Hellman交換的組是協(xié)商而得的。下面定義了四個組,從1到4。這些組
起源于Oakley協(xié)議,因此被稱為“Oakley組”。組的屬性類在附錄A中定義。所有大于等于2^15
的值都作為私有組的標(biāo)識符。對于缺省Oakley組強度的討論,請參考下面的安全考慮一節(jié)。
這些組都是由Richard Schroeppel在Arizona大學(xué)中創(chuàng)造出來的。它們的屬性在[Orm96]中描述。
6.1 第一個Oakley缺省組
Oaklay的實現(xiàn)必須支持有下列素數(shù)和產(chǎn)生器的MODP組。這個組分配的id號為1。
素數(shù)為: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 }
它的16進制值為:
FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
E485B576 625E7EC6 F44C42E9 A63A3620 FFFFFFFF FFFFFFFF
產(chǎn)生器為:2
6.2 第二個Oakley組
IKE的實現(xiàn)必須支持有下列素數(shù)和產(chǎn)生器的MODP組。這個組分配的id號為2。
素數(shù)為2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 }。
它的16進制值為:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -