一次一密

Lois發表於2020-07-19

一次一密 ( OTP )

一個序列密碼稱為一次一密,必須滿足以下條件:
1.透過真隨機數生成器得到金鑰序列s_0, s_1, s_2,…;
2.只有合法的通訊方才知道金鑰序列;
3.每次金鑰序列s_i僅使用一次。
一次一密是無條件安全的
證明 OTP 是無條件安全的:
對每個密文位,可得到以下形勢的等式:

y_0 = x_0 + s_0\ mod\ 2\\ y_1 = x_1 + s_1\ mod\ 2\\ ·\\ ·\\ ·\\

每個單獨的關係都是兩個未知數的線性等式模 2,它們是無法求解的。即使攻擊者知道了y_0的值(0 或 1),他也無法確定x_0的值。實際上,如果s_0來自於一個真隨機源,且值為 0 或 1 的機率都是 50%,則解x_0 = 0x_0 = 1的機率也完全相同。第二個等式以及後面所有的等式情況相同。請注意,如果s_i的值不是真隨機數,則情況將完全不同。在那種情況下,x_0, y_0之間會存在一定的函式關係,以上等式也不是完全獨立的,即使求解等式系統仍然非常困難,但它卻不是可證明安全的。
三個條件的含義:
第一個條件意味著需要一個 TRNG,也意味著需要一個可以生成真隨機位的裝置,比如基於半導體白噪音的裝置。由於標準 PC 沒有 TRNG,這個要求可能不是那麼容易滿足,但肯定也能滿足。
第二個條件意味著 Alice 必須將此隨機位安全地傳給 Bob。
第三個條件可能是最不切合實際的一個:金鑰序列不能被重複使用。這意味著每個明文位都需要一個金鑰位!因此,一次一密的金鑰長度必須和明文長度一樣,這也許是 OTP 最大缺點。
正因為這些原因,OTP 在實際中很少使用。但是,它為安全密碼提供了很好的設計思想:如果將真隨機位與明文進行 XOR 操作,則攻擊者肯定無法破解到密文。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
Hacking

相關文章