hmr演算法
❶ linode ubuntu ipsec 提示是否是有x.509證書
一、概述
常見的X.509證書格式包括:
cer/crt是用於存放證書,它是2進制形式存放的,不含私鑰。
pem跟crt/cer的區別是它以Ascii來表示,可以用於存放證書或私鑰。
pfx/p12用於存放個人證書/私鑰,他通常包含保護密碼,2進制方式。
p10是證書請求。
p7r是CA對證書請求的回復,只用於導入
p7b以樹狀展示證書鏈(certificate chain),同時也支持單個證書,不含私鑰。
二、證書文件/私鑰文件
在HTTPS通訊中最常用的是cer/crt和pem。下面以pem格式的證書為例進行說明。下面是一個完整的PEM格式證書:
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 1 (0x1)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=US, ST=Montana, L=Bozeman, O=sawtooth, OU=consulting, CN=www.sawtooth-consulting.com/[email protected]
Validity
Not Before: Jun 30 18:52:17 2010 GMT
Not After : Mar 26 18:52:17 2013 GMT
Subject: C=US, ST=Montana, L=Bozeman, O=yaSSL, OU=support, CN=www.yassl.com/[email protected]
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (512 bit)
Molus (512 bit):
00:c6:7b:c0:68:81:2f:de:82:3f:f9:ac:c3:86:4a:66:b7:ec:d4:f1:f6:64:21:ff:f5:a2:34:42:d0:38:9f:c6:dd:3b:6e:26:65:6a:54:96:dd:d2:7b:eb:36:a2:ae:7e:2a:9e:7e:56:a5:b6:87:9f:15:c7:18:66:7e:16:77:e2:a7
Exponent: 65537 (0x10001)
Signature Algorithm: md5WithRSAEncryption
58:a9:98:e7:16:52:4c:40:e7:e1:47:92:19:1b:3a:8f:97:6c:7b:b7:b0:cb:20:6d:ad:b5:d3:47:58:d8:e4:f2:3e:32:e9:ef:87:77:e5:54:36:f4:8d:50:8d:07:b4:77:45:ea:9d:a4:33:36:9b:0b:e0:74:58:11:c5:01:7b:4d
-----BEGIN CERTIFICATE-----
CxMKY29u
MTdaMIGKMQswCQY
bBgkqhkiG
6CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANB
+FHkhkbOo+=
-----END CERTIFICATE-----
從Certificate開始到「-----BEGIN CERTIFICATE-----」為止,中間的內容是證書的明文格式。
從「-----BEGIN CERTIFICATE-----」開始到「-----END CERTIFICATE-----」為止是證書的明文格式經過ASN.1編碼再經過Base64編碼得到的。
證書中包含的內容以及ASN.1編碼格式:
對於私鑰文件,真正的私鑰是包含在字元串"-----BEGIN PRIVATE KEY-----"和字元串"-----END PRIVATE KEY-----"之間。
如果該私鑰文件是pkcs8格式的,那麼該私鑰文件的格式為
PrivateKeyInfo ::= SEQUENCE {
version Version(INTEGER),
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier (AlgorithmIdentifier),
privateKey PrivateKey(OCTET STRING),
attributes [0] IMPLICIT Attributes OPTIONAL(SET OF Attribute)
}
如果不是pkcs8格式的,那麼"-----BEGIN PRIVATE KEY-----"和"-----END PRIVATE KEY-----"之間的內容就是私鑰的Base64編碼。
在客戶端或伺服器在交換證書時,需要首先把Base64編碼轉換為ASCII編碼再進行傳輸。
三、公鑰/私鑰
公鑰和私鑰是證書文件和私鑰文件中最核心的內容。
在SSL/TLS協議中需要是用公鑰演算法,來進行對稱密鑰的交換。最常見的演算法是RSA和DH,而RSA演算法和DH演算法的公鑰、私鑰的數據格式是不同的。
3.1 RSA演算法
RSA演算法簡要描述如下:
n = p *q; p,q為互質的大素數
(d * e) mod ( (p-1) * (q-1) ) = 1
其中n,e為公鑰,n,p,q,d,e自己保留。
加密方法:
Y(密文) = X(明文)**d mod n;
解密方法:
X(明文) = Y(密文)**e mod n;
密鑰格式
公鑰包含兩個整數:
n RSA 合數模,是一個正整數
e RSA 公開冪,是一個正整數
私鑰有兩種表達方法,這兩種方法是等價的。
1、
n RSA 合數模,是一個正整數
d RSA 私有冪,是一個正整數
2、
p 第一個因子,是一個正整數
q 第二個因子,是一個正整數
dP 第一個因子的CRT 冪,是一個正整數
dQ 第二個因子的 CRT 冪,是一個正整數
qInv (第一個)CRT 系數,是一個正整數
對於RSA演算法中的公鑰部分,包含兩個INTEGER類型的數字n和e。
對於RSA私鑰的第一種表述方法,私鑰中包含5個INTEGER類型的數字依次為n, e, d, p, q;對於RSA私鑰的第二種表達方法,私鑰中包含8個INTEGER類型的數字依次為n, e, d, p, q, dP, dQ和qInv;
交互方法:
SSL/TLS協議中,伺服器端用Certificate消息把證書(公鑰)傳遞給客戶端,客戶端隨機生成48byte的預主密鑰,用公鑰加密傳遞給伺服器端,作為雙方對稱加密中一系列密鑰計算的基礎。如下圖:
3.2 DH演算法
演算法原理:
DH演算法用於交換對稱密鑰,不能用於非對稱的加解密。
DH演算法簡要描述如下:
一個素數q和一個整數a, 稱a是q的一個原根。
雙方各自選定一個大數Xa和Xb,分別計算得到Ya = a**Xa mod q和Yb= a**Xb mod q;
雙方交換Ya和Yb,保密Xa和Xb。
計算對稱密鑰的方法:
K = Ya**Xb mod q = Xb ** Ya mod q
密鑰格式:
DH演算法的公鑰中包含了兩個整數:a和q,用於生成對稱密鑰
交互方法
伺服器一端通過Certificate消息同步雙方的a和q。
伺服器緊接著選取Xa,計算得到Ya,並通過Server Key Exchange消息把Ya傳遞給客戶端。
客戶端選取Xb,計算得到Yb,並通過Client Key Exchange消息把Yb傳遞給伺服器端。
雙方分別計算K = Ya**Xb mod q = Xb ** Ya mod q,得到相同的預主密鑰。