在密码学中,“我的袖子里没有东西”数()是指那些在构造上没有隐藏属性嫌疑的数字。它们用于创建密码函数,例如密码散列函数和密碼。这些算法通常需要随机常数来进行混合或初始化。密码学家希望以一种方式选择这些值,以证明这些常数的选择不是出于恶意目的的,例如为算法创建一个后门。
“我的袖子里没有东西”是一句和魔术师有关的习语,他们在表演魔术之前总会先展开袖子以展示其中没有东西。
例子
*罗纳德·李维斯特使用三角正弦函数生成MD5哈希值。
*美国国家安全局使用小整数的平方根生成“安全哈希算法”SHA-1中使用的常数。SHA-1也使用0123456789ABCDEFFEDCBA9876543210F0E1D2C3作为初始哈希值。
*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:透}-过算法生成的,存在一些弱点。
*資料加密標準的常数由美国国家安全局提供。后来证明,这些常数并非随机生成,实则是为了让该算法能够抵御当时尚未公开的差分密码分析方法。 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。
如果对象选择程序中有足够多的可选参数,就能使可能的设计选择和表面上简单的常数的范围足够大,以便自动搜索各种可能性,从而建造出具有所需后门特性的对象。
參考資料
- Eli Biham, Adi Shamir, (1990). Differential Cryptanalysis of DES-like Cryptosystems. Advances in Cryptology – CRYPTO '90. Springer-Verlag. 2–21.
评论 (0)