摘要密碼學與資訊安全


整理一些 密碼學 (Cryptography)資訊安全 (Information Security) 的專有名詞、重要概念、密碼學演算法、應用協議、資訊安全概念,主要資料都參考自 Wikipedia。

  • 本文非一次性整理,相關筆記漸進式整理上來。
  • 本文只是個人學習的梳理,可能有誤,如有建議歡迎給予指導,感謝。

一、專有名詞與重要概念

專有名詞的寫法統一格式:縮寫, 英文原文 - 中文翻譯

  • cryptography: 密碼學
  • cryptographic algorithms: 加密演算法
    • symmetric encryption: 對稱式加密
    • asymmetric encryption: 非對稱式加密, 一對金鑰,分別是 Private Key (私鑰) 以及 Public Key (公鑰)
  • encrypt: 加密
  • decrypt: 解密
  • key: 一般來說都翻譯成 金鑰,類似於真實世界的鑰匙概念。
  • plaintext: 明文, 尚未經過加密處理的原始資料。
  • ciphertext: 密文, 明文經過加密演算法所產生的
  • digital signature: 數位簽章
    • DSA, Digital Signature Algorithm 數位簽章演算法
  • OTP, one-time pad 一次性密碼
  • brute-force attacks 暴力攻擊

Public Key Infrastructure, PKI

Public Key Infrastructure, PKI, 公開金鑰基礎建設: 又稱公開金鑰基礎架構、公鑰基礎建設、公鑰基礎設施、公開密碼匙基礎建設或公鑰基礎架構,是一組由硬體、軟體、參與者、管理政策與流程組成的基礎架構,其目的在於創造、管理、分配、使用、儲存以及復原 數位憑證

簡單說,PKI 的目的是:

如何確認我拿到的 Public Key 真的是對方發的 Public Key?

由以下成分組成:

  • 用戶: 使用 PKI 的人或機構
  • CA (Certification Authority, 認證機構): 頒發憑證的人或機構
  • Repository: 儲存憑證 (Certificate) 的資料庫

Public Key Certificate

Public Key Certificate 公開金鑰認證, 又稱 數位憑證 (Digital Certificate)或 身份憑證(Identity Certificate)。用來證明擁有 公開金鑰 的身份數位識別,這個識別裡必須包含 公鑰資訊擁有者身份數為憑證認證機構,也就是 (用戶 Public Key + 識別資訊) + (CA Public Key) + CA 資訊

  • 電子憑證的儲存形式,常見的有兩種:
    • PEM:全名 Privacy Enhance Mail,ASCII 使用 Base64 編碼後的憑證。
    • DER:全名 Distinguished Encoding Rules,二進位編碼的憑證,通常以 .cer.crt.der 檔案出現。
  • 把憑證跟私鑰一起儲存,則使用 PKCS#12 (.p12) 格式
  • 憑證種類:自簽憑證、根憑證、中介憑證、授權憑證、終端實體憑證 (TLS 伺服器憑證、萬用字元憑證、TLS 客戶端憑證)
  • X.509:一種廣泛使用的憑證標準格式,v3 的標準是 RFC 5280
    • CSR: Certificate Signing Request 憑證簽章請求

Process of Digital Certificate

下圖是數位簽章的工作流程,分成兩個部分:

上圖左邊 Sender 的部分,也就是想要傳送資料的人,步驟如下:

  1. Sender 使用雜湊演算法 (Hashing algorithms),計算待傳送資料 (Data) 的雜湊值 (Hash)
    • 常見的 雜湊演算法:MD5、SHA-family
    • 可以透過 openssl dgst -h 找到相關的演算法。
    • 這個雜湊值也稱為 指紋 (Fingerprint)
  2. Sender 用自己的 私鑰 (PrivateKey) 對步驟 1) 的 Fingerprint 進行加密,產生 簽章 (Signature)
    • 這個動作叫做 簽名 (Signing),用來代表證明是 Sender 送過去的 認證
  3. Sender 將 (簽章和原始資料) 寄給 Receiver.
    • Sender 應該要透過其他方式,對其他人 (包含 Receiver) 公開公鑰 (PublicKey)
    • Data + Signature 稱為 數位簽章資料(Digitally signed data)

這個過程用 openssl 範例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 原始資料 (Data)
❯ cat Service.manifest

service-id: gt.shorturl
service-owner: rickhwang@abc.com
service-init: 2020/01/22

# 取得資料的指紋 (Fingerprint),範例使用雜揍演算法為 SHA1
## 註:MD5 / SHA1 已經都被證實會產生碰撞造成不安全
❯ openssl dgst -sha1 Service.manifest
SHA1(Service.manifest)= b3903ad5463fb72f5bad31088c43aae76fe4ce4c


# 透過 OpenSSL,使用 Private Key 與 sha1 簽一份檔案,產生簽章
## 一次完成步驟 1), 2)
openssl dgst -sha1 \
-sign serviceA-rsa-4096bit.private.pem \
-out Service.manifest.sha1 \
Service.manifest

❯ cat Service.manifest.sha1
S~�h�s
W�۳|2{
���~m�c�B�3�fc��n�B�s�ܭX���]v=1[�E=�{��ӭ�Cdg%���2 0���R
Sb��O�p�w�
qB|a�Ĺ�Ƌ��!�>{�^,��8�oDc

## 轉 Base64
❯ cat Service.manifest.sha1 | openssl enc -base64 \
-out Service.manifest.sha1.enc

❯ cat Service.manifest.sha1.enc
R15c71gPo/y8fhuJNFMrMHEMuOZ4SVYHlYvm2TWCJgoHoOsK+5+EsnmNbKk1eNFY
xZsREPZbR549dMtPStJ+2/1OoTfrIWfrNM0lmEFCNqC1a8XiuM3BerUx1HAbwC0u
...
/OKSfK1/l2DMLXl1hafMzB3pHQiymkBLa0ZescTVD1t7BSfau08bu/aBvRHxbefS
Xn46kKqkIhdlnOObWMQEjC1cuSXMg3N4chmuLAD4R1c=

寫成 psudo code 大概長這樣:

1
2
3
Fingerprint = Hash(Data, HashFunction);
Signature = Signing(Fingerprint, PrivateKey);
send (Signature, Certificate);

上圖右邊 Receiver 的部分,接收到資料後,確認是 Sender 寄來的過程:

  1. Receiver 會收到 Sender 寄來的 Data + Signature 兩個東西。
  2. Receiver 首先透過 Sender 對外公開的公鑰 (PublicKey) 對簽章進行解密,取得 Sender 簽名之前就計算好的 HashCode (Fingerprint)
  3. Receiver 使用跟 Sender 相同的 Hash 演算法計算出原始資料 (Data) 的 Hash 值
    • Sender 使用的演算法是簽章中的明文資訊,Receiver 可以從中得知
  4. Receiver 比較前兩步驟中得出的 Hash 值,兩者一樣,則驗證成功,反之則失敗
1
2
3
4
5
6
7
# Receiver 取得 PublicKey 及 Service.manifest.sha1 簽章檔,
# 驗證檔案確實是由 Sender 所簽發出的
openssl dgst -sha1 \
-verify serviceA-rsa-4096bit.public.pem \
-signature Service.manifest.sha1 \
Service.manifest
Verified OK

同樣的用 psudo code 表示這段:

1
2
3
4
5
6
7
8
9
DigitallySingedData = (Signature, Certificate);

PublicKey = Certificate?.GetPublicKey();
HashFunctionName = Certificate?.GetHashFunction();

DataHash = Hash(Data, HashFunctionName)
SignatureHash = Decrypt(Signature, PublicKey)

return (DataHash == SignatureHash);

數位簽章滿足密碼學以下的特性:

  • Integrity (完整性):確認檔案沒有在傳輸過程中遭到竄改
  • Authentication (認證):Receiver 透過公鑰 (PublicKey) 驗證收到的訊息是否真的是 Sender 本人送過來的。
  • Non-repudiation (不可否定性):Sender 無法否定對於其所寄出的訊息的所有權 (Ownership),因為其私鑰已經參與在產生簽章的過程中了,且此私鑰是只有該持有人才知道的。

數位簽章常見的應用:

  • TLS/SSL
  • JWT

Cryptographic Hash Function

Cryptographic Hash Function 密碼雜湊函式: 又譯為 加密雜湊函式密碼雜湊函式加密雜湊函式,是 雜湊函式 的一種。它被認為是一種單向函式,也就是說極其難以由雜湊函式輸出的結果,回推輸入的資料是什麼。這樣的 單向函式 被稱為「現代密碼學的馱馬」。


二、密碼學

  1. Symmetric-key Algorithm 對稱式演算法
  2. Asymmetric Cryptography 非對稱式密碼學

Symmetric-key Algorithm (對稱式演算法)

也稱 Symmetric-key Cryptography (對稱金鑰密碼學)

  • DES (Data Encryption Standard)
  • 3DES
  • AES
  • Blowfish
  • IDEA
  • RC5
  • RC6

Asymmetric Cryptography (非對稱式密碼學)

也稱 Public-Key Cryptography (公開金鑰密碼學),簡稱 公鑰密碼學,主要是 Asymmetric Algorithm (非對稱金鑰演算法) ,相對於對稱金鑰密碼學,最大的特點在於 Encrypt (加密)Decrypt (解密) 使用不同的金鑰。


三、協議系統

整理一些基於密碼學與資訊安全、常見的安全協議系統:

  • 應用層
    • PGP (Pretty Good Privacy,優良保密協定): 是一套用於訊息加密、驗證的應用程式,採用IDEA的雜湊演算法作為加密和驗證之用。
    • DKIM, DomainKeys Identified Mail 域名密鑰識別郵件:
    • SSL/TLS
    • SSH
    • OAuth
  • 密鑰管理
    • Kerberos: Kerberos是一種計算機網絡認證協議,它允許某實體在非安全網絡環境下通信,向另一個實體以一種安全的方式證明自己的身份。
    • X.509: 簡稱 PKIX,公鑰憑證的格式標準。應用在包括 TLS/SSL 的眾多網路協定。
  • 域名系統
  • 網路層
    • IPSec
    • L2TP
    • OpenVPN
    • PPTP

HTTPS - SSL/TLS Protocol

以下資料參考自 那些關於 SSL/TLS 的二三事 — SSL CommunicationHow SSL works?,整理我的理解。

How SSL Works?

整體來看看 SSL/TLS 是怎麼運作的。

How SSL Works?

SSL Communication

下圖是 SSL 整個通訊協議過程的流程圖:

SSL Communication Flow Diagram

  1. Authentication: 使用 Public / Asymmetric Key Encryption Algorithms.
  2. Key Exchange: 使用 Public / Asymmetric Key Encryption Algorithms/Key Exchange protocol.
  3. Encrypted Data Transfer: 使用 Private / Symmetric Key Encryption Algorithms

前面 1)、2) 又稱 SSL Handshake Protocol,3) 則稱為 SSL Record Protocol


結論

一直對於資訊安全與密碼學很有興趣,在整理 AWS KMS 學習筆記時,就給自己挖一個坑:

整理密碼學與資訊安全的筆記,把一些以往不清楚的知識整理起來。

很多東西平常工作都會用到,但是卻不求甚解,透過整理文章重新梳理自己有限的知識,如有誤歡迎給予指證,感謝。


延伸閱讀

參考資料

資訊安全相關




Comments