隱私與安全
6分鐘

什麼是一次性密碼本?加密原理與登入 OTP 的差別

了解一次性密碼本如何運用互斥或與全新隨機金鑰、完美保密性的意義、重複使用金鑰的風險,以及與登入 OTP 的差別。

LOCK.PUB
發布日期:
什麼是一次性密碼本?加密原理與登入 OTP 的差別

一次性密碼本(one-time pad)使用與訊息等長的秘密隨機金鑰加密訊息,每次加密都使用全新的金鑰材料。符合嚴格條件時,攻擊者即使看到密文,也無法取得關於訊息的額外資訊。

OTP 這個縮寫也可能指登入時使用的一次性密碼或驗證碼。一次性密碼本、登入 OTP,以及只能開啟一次的連結,解決的是不同問題。

真正的一次性密碼本需要哪些條件

以二進位方式加密 n 位元訊息,需要 n 位元全新且保密的金鑰材料:

  • 均勻隨機地選取金鑰:每個 n 位元金鑰被選中的機率都必須相同。
  • 金鑰的產生必須獨立於訊息及其他金鑰材料。
  • 不讓觀察者得知金鑰。
  • 每段金鑰只能用來加密一則訊息。不能將重疊的金鑰片段再次用於其他加密。

這些假設是 Mike Rosulek 的一次性密碼本章節中安全性證明的基礎。容易記憶的片語或重複使用的金鑰並不符合條件。

四位元 XOR 範例

互斥或運算(XOR)以 ⊕ 表示:兩個位元相同時結果為 0,不同時為 1。加密時將訊息與金鑰做 XOR,解密時再套用相同金鑰。

步驟 運算 結果
加密 1010 ⊕ 0110 1100
解密 1100 ⊕ 0110 1010

此例中,訊息是 1010,金鑰是 0110,密文是 1100。再次運算會抵消金鑰的作用。這個例子僅說明數學原理;實際通訊還需要安全的金鑰管理與身分驗證。

完美保密性真正的意義

在 Claude Shannon 原始論文第 10 節中,完美保密性是指:觀察者得知密文後,對各則可能訊息的機率判斷維持不變。

這不要求所有訊息的機率相同。若某則等長訊息原本就更可能出現,看到密文後,其出現機率仍可高於其他等長訊息。重點是密文沒有提供新的證據。一般採用的固定長度模型,也不會隱藏通訊時間、參與者或訊息長度。

為什麼重複使用金鑰會破壞保證

若兩則等長訊息使用相同金鑰 K,則 C1 = M1 ⊕ K、C2 = M2 ⊕ K。將兩個密文做 XOR,K 就會抵消:

C1 ⊕ C2 = M1 ⊕ M2

攻擊者因此得知兩則訊息之間的關係。這不代表兩段完整明文會自動曝光。不過,若已知其中一段明文,就能推算出對應的金鑰片段,以及另一則訊息相同位置的內容。可預測的結構也能協助攻擊者驗證猜測。

公式之外的實務限制

雙方必須事先共享足夠的秘密金鑰材料,保護其儲存、同步使用位置,並防止已用片段再次被使用。需要分發的金鑰量會隨傳送的資訊量增加;XOR 運算本身無法解決金鑰分發問題。

密碼本本身既不提供完整性保護,也不驗證傳送者身分。改變密文的一個位元,會改變解密結果中對應的位元,但沒有內建機制提出警告。單靠保密性無法確認是誰傳送訊息,也無法確認內容是否遭到竄改。

一次性密碼本、登入 OTP 與單次檢視連結的差別

名稱 用途 「一次性」的意義
一次性密碼本 加密訊息內容 每段金鑰材料只用於一次加密
登入 OTP 驗證使用者持有某個驗證器 產生的驗證碼在有效期間內只被接受一次
單次檢視連結 限制透過服務存取內容 成功解鎖一次後,阻止新的內容解鎖

NIST 驗證器指引第 3.1.4 節介紹以驗證器的秘密值及時間值或計數器產生的登入 OTP。這些代碼用於驗證,並不是用來加密訊息的密碼本。

LOCK.PUB 在其中的角色

LOCK.PUB 的密碼保護備忘錄提供存取控制,並非一次性密碼本。伺服器會處理備忘錄明文,因此也不是端對端加密或零知識方案。一般備忘錄連結預設可以重複開啟;若採用單次檢視選項,輸入正確密碼並成功顯示內容一次後,才會阻止新的解鎖。限制存取不等於立即刪除儲存內容,也無法收回下載檔案、螢幕截圖或其他副本。

實際分享方式可參考秘密備忘錄指南。文字加密指南介紹保護文字時需要考慮的事項。

常見問題

一次性密碼本真的無法破解嗎?

理想方案在符合假設的前提下提供完美保密性。金鑰外洩、片段重複使用、端點遭入侵及訊息竄改等問題,仍須分別考量。

短種子能產生真正的一次性密碼本嗎?

安全的偽隨機產生器可以將短種子擴展為較長的遮罩,並在特定假設下提供計算安全性。不過,其輸出並非均勻分布於所有更長的位元字串,因此無法提供一次性密碼本的完美保密性。

「一次性」代表訊息會消失嗎?

對密碼本而言,這描述金鑰的使用方式;對連結而言,這描述存取方式。兩者本身都不能證明內容已刪除,也不會移除別人已經製作的副本。

創建備忘錄

創建備忘錄

相關關鍵詞

一次性密碼本
什麼是一次性密碼本
一次性密碼本與OTP差別
什麼是一次性密碼本?加密原理與登入 OTP 的差別 | LOCK.PUB Blog