“我的袖子里没有东西”数

在密码学中，“我的袖子里没有东西”数（）是指那些在构造上没有隐藏属性嫌疑的数字。它们用于创建密码函数，例如密码散列函数和密碼。这些算法通常需要随机常数来进行混合或初始化。密码学家希望以一种方式选择这些值，以证明这些常数的选择不是出于恶意目的的，例如为算法创建一个后门。 使用一种几乎没有调整空间的方法生成数字可以消除这些担忧。一个例子是使用圆周率的初始数字作为这些常数。使用小数点后数百万位的的数字通常不被认为可信，因为算法设计者可能会因为可以利用它而选择小数点的特定起点，这创造了一个隐藏的弱点。

实数（例如、和无理根）在其进位制中的各个位上的数字被认为以相等的频率出现（参见正规数）。这些数可以被视为柯氏随机数的对立极端，因为後者看起来是随机的，但信息熵非常低。使用这些数的动机源于1975年美国政府的数据加密标准早期引发的争议。该标准因其S盒中使用的常数没有提供解释而受到批评（尽管后来发现它们经过精心选择以防止当时尚未公开的差分密码分析攻击）。因此，人们需要一种更透明的方法来生成用于密码学的常数。Bruce Schneier. Applied Cryptography, second edition, John Wiley and Sons, 1996, p. 278.

“我的袖子里没有东西”是一句和魔术师有关的习语，他们在表演魔术之前总会先展开袖子以展示其中没有东西。

 例子 
罗纳德·李维斯特使用三角正弦函数生成MD5哈希值。 Sec. 3.4
美国国家安全局使用小整数的平方根生成“安全哈希算法”SHA-1中使用的常数。SHA-1也使用0123456789ABCDEFFEDCBA9876543210F0E1D2C3作为初始哈希值。FIPS 180-2: Secure Hash Standard (SHS)  (PDF, 236 kB) – Current version of the Secure Hash Standard (SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512), 1 August 2002, amended 25 February 2004
Blowfish加密算法使用的二进制表示（不含首位的3）来初始化其密钥表。
描述了用于互联网密钥交换的素数，这些素数也是从生成的。
密码的S盒源自美国独立宣言。
高级加密标准评选过程候选的所有常量，包括S盒的所有条目，都来自的二进制展开。
密钥表使用1/的二进制展开。
RC5密码的密钥表使用和黄金分割率的二进制数字。
BLAKE哈希函数是SHA-3竞赛的入围作品之一，它使用一个由16个常数字组成的表，这些常数字是的小数部分的前512位或1024位。
密码的密钥表使用0x123456789ABCDEFFEDCBA9876543210导出修改后的密钥。
Salsa20系列密码在块初始化过程中使用 ASCII 字符串expand 32-byte k作为常数。
Bcrypt使用字符串OrpheanBeholderScryDoubt作为初始字符串。

 反例 
的哈希函数S盒号称是随机生成的，但经过逆向工程后证明，它是-{zh-hans:通;zh-tw:透}-过算法生成的，存在一些弱点。
資料加密標準的常数由美国国家安全局提供。后来证明，这些常数并非随机生成，实则是为了让该算法能够抵御当时尚未公开的差分密码分析方法。
双椭圆曲线确定性随机比特生成器是NIST推荐的密码学安全伪随机数生成器，2007年受到批评，因为推荐用于该算法的常数选择方式可能允许其作者根据过去生成值的样本预测未来的输出。 2013年9月，《纽约时报》报道：“美国国家安全局前承包商斯诺登泄露的内部备忘录显示，美国国家安全局介入了2006年NIST标准中使用的一种随机数生成器，其中包含一个供美国国家安全局使用的后门”。
P曲线是NIST为椭圆曲线加密制定的标准。这些曲线的系数是-{zh-hans:通;zh-tw:透}-过散列无法解释的随机种子生成的，例如：
 P-224: bd713447 99d5c7fc dc45b59f a3b9ab8f 6a948bc5.
 P-256: c49d3608 86e70493 6a6678e1 139d26b7 819f7e90.
 P-384: a335926a a319a27a 1d00896a 6773a482 7acdac73.
尽管没有直接关系，但在双椭圆曲线确定性随机比特生成器后门曝光后，P曲线常数的可疑之处引起了人们的担忧，美国国家安全局所选的值使他们在寻找私钥时更具优势。此后，许多协议和程序开始使用Curve25519作为NIST P-256曲线的替代方案。

 局限性 
伯恩斯坦和合作者证明，在生成椭圆曲线等密码对象的复杂程序中，使用“我的袖子里没有东西”数字作为常数可能不足以防止插入后门。例如，有许多看似无害的简单数学常数候选，如、e、歐拉-馬斯刻若尼常數、√2、√3、√5、√7、log(2)、(1 + √5)/2、ζ(3)、ζ(5)、sin(1)、sin(2)、cos(1)、cos(2)、tan(1)或 tan(2)等都可能存在问题。对于这些常数，也有几种不同的二进制表示方法可供选择。如果使用常数作为随机种子，还可以选择大量哈希函数候选值，如SHA-1、SHA-256、SHA-384、SHA-512、SHA3-256或SHA3-384。

如果对象选择程序中有足够多的可选参数，就能使可能的设计选择和表面上简单的常数的范围足够大，以便自动搜索各种可能性，从而建造出具有所需后门特性的对象。How to manipulate curve standards: a white paper for the black hat  Daniel J. Bernstein, Tung Chou, Chitchanok Chuengsatiansup, Andreas Hu ̈lsing, Eran Lambooij, Tanja Lange, Ruben Niederhagen, and Christine van Vredendaal, September 27, 2015, accessed June 4, 2016

 參考資料 

 Eli Biham, Adi Shamir, (1990). Differential Cryptanalysis of DES-like Cryptosystems. Advances in Cryptology – CRYPTO '90. Springer-Verlag. 2–21.

Category:密码学
Category:随机数生成