[英]In Hashing, can't we find AT LEAST one original text hashing to the given hash value
[英]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安全網絡的一部分。 當進行某種攻擊(選擇明文)時,我們到達了253
和231
的地步,但需要弄清楚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
二,然后從x
和256
除以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.