iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
Security

江湖在走,數位憑證要懂,懂得天天吃滷肉飯系列 第 19

第19天,混合加密 / 黃記魯肉飯(台北中山) | 30天滷肉飯

  • 分享至 

  • xImage
  •  

在實際應用中,如果只用非對稱加密(RSA)直接加密資料,會遇到兩個問題:

  1. 效能太差:RSA 等非對稱演算法在加解密大檔案時非常慢。
  2. 限制較多:RSA 只能處理比金鑰長度更小的資料(例如 2048 位元金鑰,大約只能加密幾百位元組)。

因此,現代系統大多採用 混合加密(Hybrid Encryption)

  • 對稱加密:用像是 AES 這樣的演算法,快速把整個檔案加密。
  • 非對稱加密:再用 RSA 公鑰把「對稱金鑰」加密起來。

這樣做的好處是:

  • 大檔案加密效率高(靠對稱式演算法)。
  • 金鑰交換安全(靠非對稱式演算法)。
  • 兩者互補,兼顧效能與安全性。

👉 這正是 HTTPS、VPN、S/MIME、電子憑證等安全機制的基礎。


1. 產生對稱金鑰並加密資料

# 產生一組隨機金鑰 (32 bytes = 256 bits)
openssl rand 32 > symkey.bin

# 使用對稱金鑰 (AES-256-CBC) 加密 secret.txt
openssl enc -aes-256-cbc -salt -in secret.txt -out secret.enc -pass file:./symkey.bin

此時:

  • secret.enc:加密後的機密檔案
  • symkey.bin:對稱金鑰,暫時不能直接傳送

2. 用 RSA 公鑰加密對稱金鑰

(A) 如果你有 公鑰檔 (public.pem)

openssl pkeyutl -encrypt -inkey public.pem -pubin -in symkey.bin -out symkey.enc

(B) 如果你是用 憑證 (certificate.crt)

憑證本身包含了公鑰,可以直接用來加密:

openssl pkeyutl -encrypt -inkey certificate.crt -pubin -in symkey.bin -out symkey.enc

或是先從憑證裡導出公鑰檔,再使用:

# 從憑證中抽取公鑰
openssl x509 -pubkey -noout -in certificate.crt > public.pem

# 再用公鑰檔加密
openssl pkeyutl -encrypt -inkey public.pem -pubin -in symkey.bin -out symkey.enc

結果:

  • symkey.enc:被 RSA 包裝過的對稱金鑰,可以安全傳送

3. 收件人用私鑰解開對稱金鑰

# 用私鑰解密對稱金鑰
openssl pkeyutl -decrypt -inkey private.pem -in symkey.enc -out symkey.dec

4. 使用對稱金鑰解密資料

# 用解出的金鑰解密檔案
openssl enc -d -aes-256-cbc -in secret.enc -out secret.dec -pass file:./symkey.dec

解密完成後,secret.dec 就是原始明文資料 🎉


小結

混合加密流程總結:

  1. AES 之類的對稱演算法加密資料(快速、適合大檔案)。
  2. RSA 公鑰(或憑證裡的公鑰)把 AES 金鑰加密(確保金鑰安全傳遞)。
  3. 收件人用 RSA 私鑰 解開 AES 金鑰,再解密資料。

這個設計結合了「對稱加密的高效能」與「非對稱加密的安全性」,正是現代安全通訊的基石。

https://ithelp.ithome.com.tw/upload/images/20250820/20163416m01WrQqWwQ.png

黃記魯肉飯

  • 店名:黃記魯肉飯
  • 地址:台北市中山區中山北路二段183巷28號
  • 營業時間:11:30–20:20
  • Google Maps
  • 本系列地圖

https://ithelp.ithome.com.tw/upload/images/20251004/20163416V3sn5gLsc0.jpg

這家聽很多人講很厲害,今天看到同事訂這家就借來拍一下,看起來是不錯,可以試試


上一篇
第18天,實作非對稱加密 / 光興腿庫 好吃(新北三重)|30天滷肉飯
系列文
江湖在走,數位憑證要懂,懂得天天吃滷肉飯19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言