Security 您能否从另一个操作的最低有效位检索原始十进制数?

Security 您能否从另一个操作的最低有效位检索原始十进制数?,security,binary,product,bits,lsb,Security,Binary,Product,Bits,Lsb,我正在执行一个操作,其中一个函数F(k,x)获取两个64位的值并返回其十进制数的乘积。例如: F(123,231) = 123 x 231 = 28413 然后将数字转换为二进制,并提取最低有效位。i、 e.如果28413=01101101111011101,则取11111101,即十进制的253 此功能是Feistel安全网络的一部分。当执行一种类型的攻击(选择明文)时,我们得到了253和231,但需要计算出123 有没有可能的办法?没有。 通过删除最高有效位,操作呈现为单向。为了恢复123

我正在执行一个操作,其中一个函数
F(k,x)
获取两个64位的值并返回其十进制数的乘积。例如:

F(123,231) = 123 x 231 = 28413
然后将数字转换为二进制,并提取最低有效位。i、 e.如果
28413=01101101111011101
,则取
11111101
,即十进制的
253

此功能是Feistel安全网络的一部分。当执行一种类型的攻击(选择明文)时,我们得到了
253
231
,但需要计算出
123

有没有可能的办法?

没有。

通过删除最高有效位,操作呈现为单向。为了恢复123,您必须尽一切可能强制函数,直到结果达到您想要的值

即,对x的值运行F(x,231),直到F的结果为253

这就是说,知道两个输入和输出中的一个使得暴力相对容易。它取决于x的有效值的数量(例如,它是否总是一个3位数?总是素数?总是奇数?)


可能还有其他一些快捷方式,这取决于乘以231得到的模式,但该数字的任何给定值都会有不同的模式。e、 g.如果它是9而不是231,那么您就会知道数字的总和总是等于9。

您的函数正在执行
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
的两(2)个数,假设它是
t
两个,然后从
x
256
中除以
2^t
,然后从那里解决问题。i、 e.
k=(x/2^t)^-1*F(k,x)mod(256/2^t)


通常,在密码设计中使用乘法是危险的,特别是由于选择明文攻击,因为攻击者可以使事物消失以简化其攻击。您可以找到这样的破译密码的例子(请参阅对混沌散列函数和multiprime的攻击)。

谢谢您,这很有意义!暴力强制可能会起作用,因为密钥(以及已知的输入和输出)是64位的。因此,如果暴力强迫是一种选择,密码可能是相当脆弱的。。。非常感谢。这取决于有多少位以目前的计算能力,256位将超过宇宙的寿命!64有可能,我不确定“几个小时/天”和“几千年”之间的界限在哪里。在你找到Feistel部分之前,你的解释是清楚的。你需要“弄清楚”123是什么意思?您是否在寻找函数的输入?您需要修改您的函数吗?(在本例中,请提供您所拥有的。)清楚具体问题是什么。@NathanielFord 123是函数F中的一个键,未知。攻击者输入231并返回253。他还知道F如何操作,即输入231与键相乘,并且lsb从该键中获取。他能推断出钥匙吗?非常感谢。