🗺️ 資安考證地圖
iPAS 資訊安全工程師・互動教學

誰用誰的金鑰:加密、雜湊與數位簽章

同樣是「一對公鑰與私鑰」,拿來保密和拿來簽名,使用方向剛好相反。這一頁讓你親手替 Alice 挑金鑰,看哪一種組合真的有用。

保密用收件者公鑰、簽章用寄件者私鑰 雜湊不可逆、只驗證完整性 n(n-1)/2 與 2n 的由來

💡 先搞懂問題

最直覺的加密方式,是兩個人共用同一把金鑰:寄件者用它把訊息鎖起來,收件者用同一把打開。這叫對稱加密(Symmetric Encryption),代表演算法是 AES,速度快,適合大量資料。麻煩在於那把金鑰要怎麼先交到對方手上。如果能安全送達金鑰,何不直接安全送達訊息?而且團隊一大,每兩個人之間都要一把專屬金鑰,數量會以平方的速度成長。

另外還有兩個加密本身解決不了的問題。第一,訊息在路上有沒有被人改過?第二,訊息真的是對方寄的嗎?光是「看不懂」,不代表「沒被動過」,也不代表「來源正確」。

一個比喻:配兩把鑰匙的特製保險箱

想像一種特製保險箱,出廠時配兩把不同的鑰匙。規則只有一條:用其中一把鎖上的,只有另一把打得開;同一把鑰匙鎖上之後,自己反而打不開。Bob 買了一個,把其中一把複製很多份,放在門口讓任何人自由拿走,另一把貼身保管。

用法一:想寄祕密給 Bob

Alice 拿門口那把公開的鑰匙把信鎖進保險箱。鎖上之後,連 Alice 自己都打不開,世界上只有 Bob 身上那把能開。路上誰搶到保險箱都沒用。

用法二:想證明東西是 Bob 放的

Bob 用貼身那把鑰匙把信鎖上。任何人都能用公開的鑰匙打開來看,所以這不是祕密;但只要打得開,就證明是那把貼身鑰匙鎖的,也就是 Bob 本人。

回到資安,公開發放的那把對應公鑰(Public Key),貼身保管的那把對應私鑰(Private Key),這種一對兩把的設計叫非對稱加密(Asymmetric Encryption),代表演算法有 RSA、ECC。用法一就是加密保密:用收件者的公鑰加密,只有收件者的私鑰能解。用法二就是數位簽章(Digital Signature)的精神:用寄件者自己的私鑰簽,任何人都能用他的公鑰驗證。至於「有沒有被改過」,則交給雜湊函數(Hash Function)處理,它把任何資料算成一段固定長度的指紋,內容改一個字,指紋就面目全非。

比喻容易誤導的地方有兩個。第一,真實的數位簽章並不是把整封信鎖起來,而是先算出信件的雜湊值,只對這段短短的指紋做簽章運算,信件本身通常仍是明文。第二,非對稱運算比對稱慢很多,實務上不會用它加密大量資料,而是用它安全地交換一把對稱金鑰,這就是後面會講的混合加密。

🎮 互動實驗室 1:Alice 寄信給 Bob

先選 Alice 想達成的目標,再替每一個步驟挑一把金鑰,按「寄出」看結果。竊聽者 Eve 守在網路線路上,她拿得到所有公開的東西。也可以打開「讓 Eve 在半路掉包」,看看哪種做法能抓到她。

網際網路 Alice 寄件者 Bob 收件者 ✓ Eve(竊聽者) 明文

Alice 寫好一封信:「明天早上 10 點,老地方見」。先在左邊替她挑金鑰。

Alice 手上Alice 私鑰、Alice 公鑰、Bob 公鑰
Bob 手上Bob 私鑰、Bob 公鑰、Alice 公鑰
Eve 手上兩人的公鑰(公開的,誰都拿得到)

🎮 互動實驗室 2:雜湊雪崩效應與金鑰數量

2-A 改一個字,指紋就面目全非

兩個輸入框各自即時計算 SHA-256。預設只差一個數字,你也可以自由修改,看 256 個位元中有多少個翻轉。

計算中…
計算中…
0
翻轉的位元(共 256)
0%
翻轉比例
0
不同的十六進位字元(共 64)
A 與 B 不同的位元相同的位元

計算中…

2-B 金鑰數量計算機

拖動滑桿改變人數 n。左圖每一條線代表一把兩人專用的對稱金鑰。

人數 n = 6
對稱加密 n(n-1)/215 把
非對稱加密 2n12 把

📘 原理補完

對稱與非對稱:各自擅長什麼

比較項目對稱加密非對稱加密
金鑰加解密用同一把,雙方都要持有每人一對:公鑰公開、私鑰自己保管
速度快,適合大量資料慢,適合少量資料(例如交換金鑰、簽章)
代表演算法AES、3DES、DES(已不安全)、IDEARSA、ECC、ElGamal;Diffie-Hellman 用於金鑰交換
n 人兩兩通訊的金鑰數n(n-1)/22n(n 對)
主要難題金鑰怎麼安全送到對方手上運算成本高;公鑰要有人擔保真的屬於對方

n(n-1)/2 的來源是組合數:n 個人裡任挑兩人成一組,共有 n(n-1)/2 組,每組都需要一把只有他們兩人知道的金鑰。非對稱則是每人一對,n 個人就是 n 對、2n 把,新成員加入時只要多產生一對,把公鑰公布出去即可。考試通常直接問這兩個公式。

誰用誰的金鑰:一張表記住方向

目的寄件者用收件者用提供的保護
保密(加密)收件者的公鑰加密收件者自己的私鑰解密機密性
數位簽章寄件者自己的私鑰簽章寄件者的公鑰驗證完整性、來源鑑別、不可否認性(不含機密性)

判斷方法是問自己「誰必須是唯一做得到的人」。保密時,唯一能讀的人必須是收件者,所以最後一步要用只有收件者才有的私鑰,前一步自然是收件者的公鑰。簽章時,唯一能簽的人必須是寄件者,所以簽章用寄件者的私鑰,驗證就交給人人都有的寄件者公鑰。兩者都要時,常見做法是先簽章、再用收件者公鑰加密,實驗室 1 的「兩者都要」就是這個順序。

數位簽章實際怎麼做

  1. 寄件者對文件算出雜湊值(例如 SHA-256)。
  2. 用自己的私鑰對這個雜湊值做簽章運算,產生簽章,附在文件後面一起送出。
  3. 收件者自己對收到的文件重算一次雜湊值,再用寄件者的公鑰驗證簽章,確認兩者對得上。

只要文件被改一個字,重算出的雜湊就不同,驗證失敗;而沒有私鑰的人也做不出能通過驗證的簽章。教材常把第 2 步描述成「用私鑰加密摘要」,這是以 RSA 為例的簡化說法;ECDSA 等簽章演算法並不是加密,但「私鑰簽、公鑰驗」的方向完全相同。還要注意公鑰本身得是真的:如果 Eve 把自己的公鑰冒充成 Alice 的發給 Bob,簽章驗證就失去意義,所以需要憑證機構(CA)簽發數位憑證,擔保「這把公鑰屬於 Alice」。

雜湊:不是加密,是指紋

雜湊函數把任意長度的輸入算成固定長度的輸出(SHA-256 固定 256 位元,也就是 64 個十六進位字元),有三個考試常問的性質:單向不可逆,無法從雜湊值推回原文;雪崩效應,輸入改一點,輸出約有一半位元翻轉;抗碰撞,很難找到兩份不同資料算出同一個值。雜湊沒有金鑰,也沒有「解密」這回事,所以它只能驗證完整性,不能保密。MD5 與 SHA-1 已經被找到碰撞,不應再用於完整性驗證或簽章,應改用 SHA-2 或 SHA-3。

單獨比對雜湊值有一個盲點:如果攻擊者同時換掉檔案和網頁上公布的雜湊值,比對還是會通過。這時要靠數位簽章確認來源,或使用加入金鑰的 HMAC。儲存密碼則是另一種用法:每個帳號加上不同的隨機鹽值(Salt),再用 bcrypt、PBKDF2、Argon2 這類刻意算得很慢的函數,防止攻擊者用預先算好的彩虹表反查。

混合加密:非對稱負責交換,對稱負責搬資料

大量資料 隨機產生的 對稱金鑰 K 用 K 做 AES 加密 用 Bob 公鑰加密 資料密文 加密後的 K 數位信封 一起寄出 Bob 收到後 ① 用私鑰 解出 K ② 用 K 解開 資料密文 大量資料 隨機產生的 對稱金鑰 K 用 K 做 AES 加密 用 Bob 公鑰加密 資料密文 加密後的 K 數位信封:兩者一起寄出 Bob 收到後 ① 用自己的私鑰解出 K ② 用 K 解開資料密文
數位信封(Digital Envelope):非對稱加密只處理一把很短的對稱金鑰,大量資料交給速度快的對稱加密。

這樣做同時避開了兩邊的缺點:對稱金鑰不必事先見面交付,非對稱的慢速運算也只用在一小段資料上。HTTPS 背後的 TLS 也是同一個精神,握手階段用憑證確認伺服器身分、以非對稱方式建立本次連線的對稱金鑰,之後的網頁內容都用對稱加密傳送。早期 TLS 可以用 RSA 直接加密傳送金鑰材料;TLS 1.3 則改用 Diffie-Hellman 類的金鑰協商,雙方在公開通道上各自算出同一把金鑰,但「非對稱建立、對稱搬運」的分工沒有變。

容易混淆的地方

✅ 自我檢測

每題選一個答案,會立即顯示對錯與解析。已作答 0/6,答對 0

🎯 重點整理