iT邦幫忙

2025 iThome 鐵人賽

DAY 20
1
Security

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

第20天,實作PKCS#7數位信封 / 歐買尬豬霸王豬腳飯 (台北中山) | 30天滷肉飯

  • 分享至 

  • xImage
  •  

在資訊安全領域裡,我們常常會聽到「數位信封 (Digital Envelope)」。它不是一種演算法,而是一種 混合加密 (Hybrid Encryption) 的應用方式:同時利用對稱式與非對稱式加密的優點,兼顧效能與安全性。這篇文章會介紹概念,並透過 OpenSSL 手把手示範。


為什麼需要數位信封?

單純使用 對稱式加密 (AES/3DES) 可以快速處理大檔案,但金鑰的分送是問題。
單純使用 非對稱加密 (RSA/ECC) 雖然方便傳遞金鑰,但加大檔案效能差。

數位信封的解法

  1. 用隨機產生的 對稱金鑰 (AES) 加密資料內容。
  2. 再用收件人的 公開金鑰 將這把 AES 金鑰加密。
  3. 將「加密後的資料」+「被加密的 AES 金鑰」打包成一個封裝,這就是 數位信封

收件人收到後:

  • 用自己的 私鑰 解出 AES 金鑰。
  • 再用 AES 金鑰解出原始資料。

這個封裝在標準裡就是 PKCS#7 (CMS, Cryptographic Message Syntax)EnvelopedData


名詞快對照

  • PKCS#7 / CMS:一種封裝格式,不是加密演算法。
  • EnvelopedData:CMS 裡用來實作「數位信封」的資料型別。
  • .p7m:副檔名,通常表示 PKCS#7 封裝後的加密檔案。

0. 準備環境

先建立測試用的金鑰與憑證,模擬「收件人」身分。我們需要私鑰與憑證。

# 產生私鑰
openssl genpkey -algorithm RSA -out private.pem 

# 產生憑證
openssl req -new -x509 -key private.pem -out cert.pem -days 365

到這裡,我們就有:

  • private.pem → 收件人的私鑰(收件人自己保管)
  • cert.pem → 收件人的憑證(公開給發件人加密用)

1. 建立數位信封(加密)

假設要加密的檔案是 plain.txt

openssl smime -encrypt -aes256 -in plain.txt -out encrypted.p7m -outform PEM cert.pem 

參數解釋:

  • -encrypt → 建立 EnvelopedData
  • -aes256 → 對稱加密演算法使用 AES-256
  • cert.pem → 收件人憑證,裡面的公鑰會用來加密 AES 金鑰
  • 輸出 encrypted.p7m → 數位信封檔案

2. 打開數位信封(解密)

收件人用自己的私鑰來解密:

openssl smime -decrypt -in encrypted.p7m -inform PEM \
  -inkey private.pem -recip cert.pem -out decrypted.txt

解釋:

  • -inkey private.pem → 使用收件人的私鑰解密 AES 金鑰
  • -recip cert.pem → 指定收件人憑證,方便匹配封裝資訊,可省略
  • -out decrypted.txt → 還原原始內容

3. 多收件人範例

如果要同時傳給 Alice 與 Bob,只需把兩份憑證都放進指令即可:

openssl smime -encrypt -aes256 -in plain.txt -out encrypted.p7m  -outform PEM \
  alice_cert.pem bob_cert.pem

內容只會加密一次,但封裝中會有兩份「被公鑰加密的 AES 金鑰」,Alice 或 Bob 都能用各自私鑰解開。


總結

  • 數位信封 (Digital Envelope) 是混合加密的標準做法。
  • PKCS#7 / CMS 提供標準封裝,讓不同系統能互通。
  • OpenSSL 只要兩行指令,就能完成「加密 → 解密」流程。
  • 在實務上,你常會看到副檔名 .p7m,背後就是這套數位信封機制。

歐買尬豬霸王豬腳飯專賣店

  • 店名:歐買尬豬霸王豬腳飯專賣店 錦州店
  • 地址:台北市中山區錦州街411號
  • 營業時間:每日 10:45–14:00 16:00–20:30
  • Google Maps
  • 本系列地圖

https://ithelp.ithome.com.tw/upload/images/20251004/201634166DfatHTIKO.jpg

這家是台北市區連鎖的豬腳店,居然有麻辣滷肉飯,腿庫、豬腳、滷肉都好吃

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


上一篇
第19天,混合加密 / 黃記魯肉飯(台北中山) | 30天滷肉飯
系列文
江湖在走,數位憑證要懂,懂得天天吃滷肉飯20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Judy Huang
iT邦新手 3 級 ‧ 2025-10-04 20:10:55

今天有經過,居然不識貨的錯過了好吃的豬腳QAQ

我要留言

立即登入留言