主要內容:純文字説明如何實現基於RSA+DES+數字簽名實現的業務交互流程
| 説明 | 內容 |
|---|---|
| A的私鑰 | A-PRIVATE-KEY |
| B的公鑰 | B-PUBLIC-KEY |
| B的私鑰 | B-PRIVATE-KEY |
| A的公鑰 | A-PUBLIC-KEY |
| 發送內容 content | "IloveU" |
| 對稱加密 encryptKey | "2023pwd!@#" |
| 對稱加密算法 | 3DES |
| 摘要算法 | MD5 |
A (Sender) B (Receiver)
1. Encrypt Content using 3DES
+---------------------+ +---------------------+
| 3DES | | |
| aes(content, encryptKey) -> 'U2FsdGVk...' | MD5, 3DES, Key |
+---------------------+ | |
/ | |
2. Generate MD5 Hash of Content / +---------------------+
+---------------------+ /
| MD5 | /
| md5(content) -> '91AFEAB3...' /
+---------------------+ /
/
3. Sign MD5 Hash using A-PRIVATE-KEY
+-----------------------+ /
| Digital Signature | /
| sign(md5(content)) -> 'ABC123' /
+-----------------------+ /
/
4. Encrypt Key Info using B-PUBLIC-KEY
+------------------------+ \
| RSA Encryption | \
| encrypt(3DES, MD5, Key) -> 'U2FsdGVk...'
+------------------------+ \
\
Transmit Encrypted Data \
(Encrypt Content, Hash, Signature) \
+-------------------------------------+ \
| Encrypted Data | \
| contentSummary: '91AFEAB3...' | \
| encryptContent: 'U2FsdGVk...' | \
| encryptKey: 'U2FsdGVk...' | \
+-------------------------------------+ \
\
a. Decrypt 'encryptKey' using B-PRIVATE-KEY
+---------------------+
| RSA Decryption |
| decrypt(encryptKey) -> MD5, 3DES, 2023pwd!@#
+---------------------+
b. Decrypt 'encryptContent' using 3DES and Key
+---------------------+
| 3DES |
| decrypt(encryptContent, 3DES-Key) -> original content
+---------------------+
c. Decrypt 'contentSummary' using A-PUBLIC-KEY
+---------------------+
| RSA Decryption |
| decrypt(contentSummary) -> '91AFEAB3...'
+---------------------+
d. Verify Content Summary
+---------------------+
| MD5 |
| md5(decryptContent) -> '91AFEAB3...'
+---------------------+
第一步:
A用密鑰encryptKey,對 發送內容content 用對稱加密算法3DES對稱加密aes(content,encryptKey),結果假定為"U2FsdGVkX1/t+ZN8kgO0ItmGoNfBuBHUPaVR3rSrSt4="
第二步:
A用md5對 content 生成摘要:md5(content),結果假為"91AFEAB3EC15EBC7F82DB66C6D443ACB"
第三步:
A用"A-PRIVATE-KEY",對摘要md5(content)的結果進行簽名。
第四步:
A用B的公鑰對第一步的隨機密鑰key加密,可附帶説明對稱加密算法為3DES,摘要算法為MD5。
A-PRIVATE-KEY(encryptKey,summaryAlgorithm,encryptAlgorithm)結果假定為:"U2FsdGVkX1+gTjW/2dQl1/8YD5Xl9w"
綜上,A向B的放鬆內容為以下字段
array (
//經過A簽名的摘要(md5生成摘要後,對此摘要進行簽名)
'contentSummary' => '91AFEAB3EC15EBC7F82DB66C6D443ACB',
//通過對稱加密算法加密的原始數據(加密數據)
'encryptContent' => 'U2FsdGVkX1/t+ZN8kgO0ItmGoNfBuBHUPaVR3rSrSt4=',
//用B的公鑰加密的摘要算法、對稱加密算法,對稱加密key三個字段
'encryptKey' => 'U2FsdGVkX1+gTjW/2dQl1/8YD5Xl9w',
)
| 接收方 B | 內容 |
|---|---|
| 加密內容: encryptContent | U2FsdGVkX1/t+ZN8kgO0ItmGoNfBuBHUPaVR3rSrSt4= |
| 加密key: encryptKey | U2FsdGVkX1+gTjW/2dQl1/8YD5Xl9w |
| 加密內容摘要: contentSummary | 91AFEAB3EC15EBC7F82DB66C6D443ACB |
第一步:
B用自己的私鑰解密加密key字段“encryptKey”,得到摘要算法、對稱加密算法、對稱加密的key,對應的值為MD5,3DES,2023pwd!@#
第二步:
B對加密內容字段 "encryptContent”.利用第一步得到的結果3DES算法和對稱加密的key進行數據解密,得到原始內容的明文。再次用第一步得到的md5摘要算法(無需key),重新生成生一份(明文)摘要留作備用。
第三步:
B用A的公鑰解密A發送的 “加密內容摘要contentSummary”字段得到一份摘要的明文,與第二步的重新生成的摘要做對比。如果一致,代表通信數據未被篡改。且此時A不能抵賴,因為A用自己的私鑰已經對摘要算法進行了簽名。同時數據由於本身通過aes進行加解密,也保證了數據的保密性。
備註:CA證書註冊,生成,驗證等細節略過。