Encryption

格式保留加密問題

  • February 19, 2020

我有一個練習中的理論問題。這裡是:

— 練習開始 —

有多種方法可以將塊密碼轉換為 FPE。其中之一如下:

讓 $ E_{k} $ 大小為 n 的密碼原語。

$ FPE_k(x) $ 一個密碼原語 $ P = C = {0,1,…, m-1} $ 和 $ m < 2^n $

虛擬碼看起來像這樣

fpe = x
do {
    x = fpe
    fpe = Ek(x)
} while(fpe &gt;= m)

使用此函式創建 cupon 程式碼可能會很有趣。例如,如果我們將 cupons 視為 20 位數字,我們可以生成 10000 個 cupons 編碼從 0 到 9999 的數字。

— 練習結束 —

現在我的問題是:

1)我確實得到了從 0 到 9999 的編碼數字,你得到了 10000 種可能的編碼,我不明白的是如何得到 20 位編碼?據我了解,對於 FPE,您始終獲得相同的長度,因此如果您對 0 到 9999 之間的數字進行編碼,您將獲得相同值之間的密碼。

  1. 練習詢問攻擊者生成有效杯的機率是多少?

您感到困惑的問題確實令人困惑,但我想我知道發生了什麼。想像一個場景:

  1. 一家公司想發行正好 10,000 張編號的優惠券;
  2. 他們擔心惡意方會偽造優惠券。

所以他們不能只是天真地將優惠券編號從 0 到 9999;相反,他們希望使用一些編號程式碼,以便他們輕鬆檢測偽造的數字。因此,他們選擇通過將 FPE 生成的偽隨機 20 位程式碼分配給“內部”優惠券編號 0 到 9999 來實現這一點。

現在,從這個(推測)的角度來看,你的問題:

1)我確實得到了從 0 到 9999 的編碼數字,你得到了 10000 種可能的編碼,我不明白的是如何得到 20 位編碼?據我了解,對於 FPE,您始終獲得相同的長度,因此如果您對 0 到 9999 之間的數字進行編碼,您將獲得相同值之間的密碼。

他們的想法是他們將 20 位 FPE 應用於“內部”優惠券號碼,但他們不會使用整個輸入值範圍,而是人為地將輸入值限制在 0 到 9999 之間。

  1. 練習詢問攻擊者生成有效杯的機率是多少?

這裡的想法是,如果攻擊者試圖偽造一個 20 位數的優惠券號碼,如果他們只是天真地選擇任何 20 位數的程式碼,就不太可能選擇一個解密到發行人內部使用的 0 到 9999 範圍的程式碼,並且他們的辯護人可以辨識偽造品的方式。隨機選擇的 20 位程式碼是 10,000 個有效程式碼之一的機率是 1 $ 10^4 / 10^{20} = 10^{-16} $ . 請注意,攻擊者可以進行更多猜測,他們的機會會變得更好,這不僅是因為他們進行了更多猜測,還因為這是一種排列。

引用自:https://crypto.stackexchange.com/questions/77504