目錄
PGP的縮寫是Pretty Good Privacy(優(yōu)良保密協(xié)議);
PGP是什么?
是一種結(jié)合了對稱加密和非對稱加密,還有數(shù)字簽名和壓縮等步驟的協(xié)議,然而它不光只是一個協(xié)議,它基于協(xié)議規(guī)則,也完成相關(guān)密碼工具集成,開發(fā)成一個完善的系統(tǒng)、一套工具組合。
需求:
在互聯(lián)網(wǎng)上完成一次文件的加密傳輸,要保障其安全性、完備性,還要包含認(rèn)證性,就需要不同工具的配合,這么多工具怎么組合起來使用呢?PGP給出了一個不錯的答案。
PGP 的核心設(shè)計哲學(xué)是“揚(yáng)長避短”,它結(jié)合了四種關(guān)鍵技術(shù):
- 對稱加密 (Symmetric Encryption): 用于加密實際的消息內(nèi)容,速度快,適合加密大量數(shù)據(jù)。 (e.g., AES, CAST5)
- 非對稱加密 (Asymmetric Encryption): 用于加密“對稱加密的密鑰”,解決密鑰分發(fā)問題。 (e.g., RSA, ECC)
- 數(shù)字簽名 (Digital Signature): 用于驗證消息的完整性和發(fā)送者的身份。 (通常結(jié)合哈希函數(shù)如 SHA-256)
- 壓縮 (Compression): 在加密前壓縮數(shù)據(jù),節(jié)省空間并增加安全性。
下面梳理 PGP (Pretty Good Privacy) 的加密和解密流程。
加密、解密流程
下面的序列圖清晰地展示了上述流程中 Alice、Bob 以及各方密鑰的交互過程。
sequenceDiagram
participant A as Alice
participant B as Bob
participant APub as Alice的公鑰
participant APri as Alice的私鑰
participant BPub as Bob的公鑰
participant BPri as Bob的私鑰
participant SK as 會話密鑰
Note over A, BPri: 加密與簽名流程 (發(fā)送方)
A->>A: 撰寫明文消息
A->>APri: 用私鑰生成數(shù)字簽名
A->>A: 將明文與簽名壓縮
A->>SK: 生成隨機(jī)會話密鑰
A->>SK: 用會話密鑰加密數(shù)據(jù)
A->>BPub: 用Bob的公鑰加密會話密鑰
A-->>B: 發(fā)送(加密的會話密鑰 + 加密的數(shù)據(jù))
Note over B, APub: 解密與驗證流程 (接收方)
B-->>B: 接收并分解數(shù)據(jù)包
B->>BPri: 用自己的私鑰解密會話密鑰
BPri-->>SK: 得到明文會話密鑰
B->>SK: 用會話密鑰解密數(shù)據(jù)
B->>B: 解壓數(shù)據(jù),分離出明文和簽名
B->>APub: 用Alice的公鑰解密簽名,得到原始摘要
B->>B: 對明文生成新摘要
B->>B: 對比兩個摘要
B->>B: 一致則驗證通過!
PGP不光是一個協(xié)議,也是一套集成好的加密軟件系統(tǒng),通信雙方都可以使用這個軟件。
一、加密與簽名流程(發(fā)送方)
假設(shè) Alice 要發(fā)送一封加密且簽名的郵件給 Bob。
- 準(zhǔn)備消息:Alice 寫好明文消息。
- 數(shù)字簽名 (證明身份和完整性):
- PGP 使用哈希算法(如 SHA-256)生成明文的摘要 (Digest)。
- 使用 Alice 的私鑰 對這個摘要進(jìn)行加密,生成數(shù)字簽名。
- 組裝消息:將原始明文和數(shù)字簽名拼接在一起。
- 壓縮:對組裝后的消息進(jìn)行壓縮(此步驟可選,但通常默認(rèn)進(jìn)行)。
- 加密消息內(nèi)容 (保密性):
- PGP 隨機(jī)生成一個一次性的會話密鑰 (Session Key)。
- 使用對稱加密算法(如 AES),用這個會話密鑰加密壓縮后的數(shù)據(jù)。
- 加密會話密鑰 (安全傳輸密鑰):
- PGP 獲取 Bob 的公鑰。
- 使用非對稱加密算法(如 RSA),用 Bob 的公鑰 加密剛才生成的會話密鑰。
- 組裝最終數(shù)據(jù)包:將加密后的會話密鑰和加密后的消息數(shù)據(jù)組合在一起,準(zhǔn)備發(fā)送。
二、解密與驗證流程(接收方)
Bob 收到來自 Alice 的數(shù)據(jù)包。
- 分解數(shù)據(jù)包:Bob 將接收到的數(shù)據(jù)包分解為兩部分:加密的會話密鑰和加密的消息數(shù)據(jù)。
- 解開會話密鑰:
- Bob 使用他自己的私鑰去解密加密的會話密鑰,得到明文的會話密鑰。
- 解密消息:
- 使用第 2 步得到的會話密鑰,用對稱解密算法解密加密的消息數(shù)據(jù),得到壓縮的數(shù)據(jù)。
- 解壓縮:對解密后的數(shù)據(jù)進(jìn)行解壓縮,得到原始明文 + 數(shù)字簽名的組合體。
- 分解明文和簽名:將組合體分解為原始明文和數(shù)字簽名。
- 驗證簽名 (驗證身份和完整性):
- PGP 使用相同的哈希算法對收到的原始明文生成一個新的摘要。
- 使用 Alice 的公鑰 去解密收到的數(shù)字簽名,得到 Alice 當(dāng)初生成的原始摘要。
- 將新生成的摘要與解密得到的原始摘要進(jìn)行比對。
- 如果兩者完全一致:證明消息確實來自 Alice(身份真實),且在傳輸過程中未被篡改(完整性)。
總結(jié):
- 它已經(jīng)實現(xiàn)了一整套安全的加密傳輸工具,屬于開箱即用。
- 對稱加密處理大數(shù)據(jù)(消息本身),非對稱加密處理小數(shù)據(jù)(會話密鑰),完美結(jié)合了兩種加密方式的優(yōu)點(diǎn)又避開了缺點(diǎn)。
- 整個流程的安全建立在公鑰的真實性上(這個是前提條件)。Bob 必須確信他用的 Alice 的公鑰真的屬于 Alice,而不是冒名頂替者。這通常通過“信任網(wǎng)”或“公鑰基礎(chǔ)設(shè)施 (PKI)”來解決。
- 數(shù)字簽名提供了認(rèn)證和不可否認(rèn)性(Alice 不能抵賴她發(fā)過消息),加密提供了保密性。
浙公網(wǎng)安備 33010602011771號