簡體   English   中英

您可以從其他操作的最低有效位中檢索原始十進制數嗎?

[英]Can you retrieve the original decimal number from the least significant bits of another operation?

我正在執行一個操作,其中函數F(k,x)接受兩個64位值並返回其十進制數字的乘積。 例如:

F(123,231) = 123 x 231 = 28413

然后將數字轉換為二進制數,並提取最低有效位。 也就是說,如果28413 = 0110111011111101則取11111101 ,即十進制253

此功能是Feistel安全網絡的一部分。 當進行某種攻擊(選擇明文)時,我們到達了253231的地步,但需要弄清楚123

有什么可能的辦法嗎?

您的函數正在執行F(k,x) = k*x mod 256

給定您的問題F(k,x)x ,您可以找到k嗎?

x為奇數時,存在2 ^ 56個解,所有解都具有k = x^-1 * F(k,x) mod 256 也就是說,您計算x mod 256的倒數,並且通過將256的倍數與具有該值的F(k,x)的乘積相加來得出每個可能的解決方案。

x為偶數時,您無法計算逆值,但仍可以使用類似的技巧來確定解。 您需要首先計算將x除以的二(2s)的數目,假設它是t二,然后從x256除以2^t ,然后從那里解決問題。 k = (x/2^t)^-1 * F(k,x) mod (256/2^t)

通常,在密碼設計中使用乘法是危險的,特別是由於選擇了明文攻擊,因為攻擊者可以使事物消失以簡化攻擊。 您可以在我的博客上找到破壞密碼的示例(請參閱對混沌哈希函數和多重質數的攻擊)。

沒有。

通過刪除最高有效位,該操作將變為單向。 為了恢復123,您將不得不以各種可能的方式強行使用該功能,直到結果成為所需的值為止。

即運行F(x,231)以獲得x的值,直到F的結果為253。

就是說,知道兩個輸入和輸出之一可以使蠻力相對容易。 這取決於x的有效值的數量(例如,它始終是3位數字嗎?始終是素數還是始終是奇數?)

可能還有一些其他快捷方式,具體取決於乘以231的數字所得到的模式,但是該數字的任何給定值將具有不同的模式。 例如,如果它是9而不是231,您將知道數字總和始終為9。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM