格式保留加密問題
我有一個練習中的理論問題。這裡是:
— 練習開始 —
有多種方法可以將塊密碼轉換為 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 >= m)
使用此函式創建 cupon 程式碼可能會很有趣。例如,如果我們將 cupons 視為 20 位數字,我們可以生成 10000 個 cupons 編碼從 0 到 9999 的數字。
— 練習結束 —
現在我的問題是:
1)我確實得到了從 0 到 9999 的編碼數字,你得到了 10000 種可能的編碼,我不明白的是如何得到 20 位編碼?據我了解,對於 FPE,您始終獲得相同的長度,因此如果您對 0 到 9999 之間的數字進行編碼,您將獲得相同值之間的密碼。
- 練習詢問攻擊者生成有效杯的機率是多少?
您感到困惑的問題確實令人困惑,但我想我知道發生了什麼。想像一個場景:
- 一家公司想發行正好 10,000 張編號的優惠券;
- 他們擔心惡意方會偽造優惠券。
所以他們不能只是天真地將優惠券編號從 0 到 9999;相反,他們希望使用一些編號程式碼,以便他們輕鬆檢測偽造的數字。因此,他們選擇通過將 FPE 生成的偽隨機 20 位程式碼分配給“內部”優惠券編號 0 到 9999 來實現這一點。
現在,從這個(推測)的角度來看,你的問題:
1)我確實得到了從 0 到 9999 的編碼數字,你得到了 10000 種可能的編碼,我不明白的是如何得到 20 位編碼?據我了解,對於 FPE,您始終獲得相同的長度,因此如果您對 0 到 9999 之間的數字進行編碼,您將獲得相同值之間的密碼。
他們的想法是他們將 20 位 FPE 應用於“內部”優惠券號碼,但他們不會使用整個輸入值範圍,而是人為地將輸入值限制在 0 到 9999 之間。
- 練習詢問攻擊者生成有效杯的機率是多少?
這裡的想法是,如果攻擊者試圖偽造一個 20 位數的優惠券號碼,如果他們只是天真地選擇任何 20 位數的程式碼,就不太可能選擇一個解密到發行人內部使用的 0 到 9999 範圍的程式碼,並且他們的辯護人可以辨識偽造品的方式。隨機選擇的 20 位程式碼是 10,000 個有效程式碼之一的機率是 1 $ 10^4 / 10^{20} = 10^{-16} $ . 請注意,攻擊者可以進行更多猜測,他們的機會會變得更好,這不僅是因為他們進行了更多猜測,還因為這是一種排列。