是什么样的特殊的


Answers:


11

AFAIK,此类“魔术”值具有以下两个属性:

  1. 它们在某种程度上是独特的,并且看起来是随机的。
  2. 他们可以反复参加代数运算。即,即使在多次执行某些特定运算(例如乘法或求幂)之后,“ magic”值仍然能够生成新值。

您可能会在MD5中找到类似的情况。考虑以下行:

k[i] := floor(abs(sin(i + 1)) × (2 pow 32))

在这里,sin(i + 1)意在产生神奇的价值;这是唯一的,外观随机的,并且可以在很多情况下使用i。(实际上,i范围是0..63)。

编辑:阅读关于TEA原始论文,人们知道“ Steven Stadnicki”给出的答案是正确的。请注意,魔术常数是名称delta:

每轮使用不同的增量倍数,因此倍数的任何位都不会频繁变化。我们怀疑算法对delta的值不是很敏感,我们只需要避免一个坏值即可。将会注意到,截断或最接近的舍入后,delta变成奇数,因此不需要额外的预防措施来确保总和的所有数字都发生变化。

由于仅使用了32倍的增量(每轮一个),因此算法对任何特定的增量都不十分敏感,这并不奇怪。(有关更多信息,请参见Steven Stadnicki的答案。)

编辑2:顺便说一句,MD4在其运算中使用2(0x5a827999)和3(0x6ed9eba1)的平方根作为“魔术”常量。《网络安全:公共世界中的私人通信》一书的5.4.4节很好地解释了这一点:

为了表明设计者没有故意选择常量的分解值,该常量基于2的平方根。

这种解释与下面吉尔斯在评论中提出的观点相同。


听起来很合理。那么2 ^ 32 / pi或2 ^ 32 / sqrt(2)是否也能正常工作?

@Tim:我想是的,但是在TEA内部操作的背景下仔细检查新的幻数是有帮助的。
MS Dousti 2011年

5
此外,选择诸如2 ^ 32 / phi之类的数学常数而不是随机生成的具有可接受属性的值的原因是使人产生信心,即这不是为其他未公开属性选择的值-后门值。
吉尔斯(Gilles)'所以

2
@Gilles,实际上,由于这个原因,它们甚至被称为“我的袖子号码没什么”,请参见en.wikipedia.org/wiki/Nothing_up_my_sleeve_number
Henno Brandsma 2011年

12

φnφφ{nφ}{nα}α

Cπ=232/π=1367130551(355Cπ)mod232=41157Cφ=232/φ=2654435769n|(nCφ)mod232|216n=28657XnXn+k线性同余随机数生成器的,用于较小的;但是,在大多数情况下,这是民俗化的黑魔法,更多的是基于直觉,“这个数字的小倍数是mod会很不好”,而不是任何具体的理论结果。k232


1
Sadeq:“ mod 1”是指倍数的小数部分-在这种情况下,它们将是[.62,.24,.85,.47,.09,.71,.33,.94,.56 、. 18]。极限中的均分布表示[0,1]的任何子间隔[a,b]包含这些值的预期比例(ba);事实证明,任何无理数的倍数的分数部分均均匀地分布在[0,1]上,黄金分割法的分数部分的分布比其他任何数都更快。它们不会在单位间隔上“聚集”。
史蒂文·斯塔德尼克

8
π的由355/113接近的近似,例如,意味着会更接近比它的整数‘应该是’,这显示为它的值的小数部分的聚类; 将非常接近。不过,黄金分割率没有这么好的近似值。它的所有近似值都与它“最大距离”。(en.wikipedia.org/wiki/…涵盖了这一点)113π{(n+113)π}{nπ}
Steven Stadnicki 2011年

8
那是黄金比例的一个非常整洁的特性
Suresh Venkat

2
感谢您的描述。真的很棒!您对k[i]MD5中的定义有任何意见吗?(请参阅上面的答案。)
MS Dousti 2011年

2
不幸的是,我没有。-唯一想到的是,可以选择它们以实现近似线性独立性,因为函数在具有线性独立性-但我不知道有任何理由相信这组特定值应该在任何线性关系导致值相对较大。X 一个 Σ 一个 ķ [ ] = 0sin(nx)xaiΣaik[i]=0
Steven Stadnicki 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.