vlambda博客
学习文章列表

【连载】比特币史话08 | 非对称加密

(爱伦·坡,他在《金甲虫》中首用“cryptograph/密码”一词。图片来源于网络)


正文:


人类对于密码学技术的运用最早可以追溯到公元前1900年的埃及[1]。密码学技术在两次世界大战(1914-1918, 1939-1945)中得到了长足的发展。随着无线电发报在军事中的大量使用,加密技术就成了防范敌军截获并破译电文最重要的一道安全防线,相应的,与之相对抗的加密电文破译也同样成为军事情报工作的重中之重。


在一战中,所有的无线电加解密工作还仍然是手工进行。1918年,德国工程师亚瑟·谢尔比乌斯(Arthur Scherbius)发明了一种使用极为精巧的电动机械转子技术设计而成的机械密码机,这就是历史上著名的“恩尼格玛机”(Enigma machine)[2],又可以直译为“谜”。“谜”在二战期间被纳粹德国的军队大量装备和使用。“谜”可以同时完成加密和解密的工作,并一度被认为是不可破译的。但是,1933年,“谜”还是被波兰密码局给破译了。通过从情报贩子汉斯-提罗·施密特(Hans-Thilo Schimdt)手中买到了军用型号的内部线路图,复制了“谜”,在最优秀的数学家艰辛的努力下,波兰密码局终于破译了“谜”,掌握了大量的德军情报。可是,道高一尺、魔高一丈,1938年德军提高了“谜”的加密强度,施密特也不再继续给波兰方面提供德军的密码本了。1939年9月,德军对波兰发动了闪电战,入侵波兰。28日,华沙沦陷,波兰亡国。


计算机的出现彻底改变了密码学技术,现代密码学时代开始了。由于计算机强大的计算能力,以及全新的密码学理论的应用,通过密码分析破译密文已经不再具有可能性。攻防转移到了对算法的研究,以及密钥的安全性问题上。众所周知,现代密码学要求,加密系统的安全性只应建立在对密钥的保密上,不应该取决于加密算法的保密。加密算法就像“谜”的内部线路设计,应该做到完全公开、人尽皆知,仍然可以保持其安全性。


现代加密技术包含两个大类,一类称之为“对称密钥加密技术”(或称“对称加密技术”),而另一类则称之为“公钥加密技术”(又称“非对称加密技术”)。顾名思义,对称密钥加密技术就是要求,加密的时候使用的是哪一把密钥,在解密的时候必须使用同一把密钥。其中最为著名的、迄今仍得到广泛应用的,是上世纪70年代由IBM发明的DES算法(Data Encyption Standard, 数据加密标准),以及美国政府官方指定的AES算法(Advanced Encryption Standard, 高级加密标准)。比特币在BIP-38加密私钥标准中所规定采用的对称加密技术就是AES[3]。


但是对称加密技术有个显然的缺点,就是通信双方需要先安全的交换密钥,而这就需要双方之间先建立可靠的通信通道,否则密钥在交换中被窃取,后续的所有通信就都将毫无秘密可言了。在开放的互联网通信中,信道是不安全的。这时,我们就需要“非对称加密技术”也就是“公钥加密技术”的帮助了。


非对称加密技术的开创性工作是由密码学家惠特菲尔德·迪菲(Whitfield Diffie)和马丁·海尔曼(Martin Hellman)发表于1976年的论文《多用户密码学技术》(Multi-user cryptographic techniques)所奠定的。正是在这篇论文中,他们把彼此不同的、但是数学上又有关联的两把密钥分别命名为“公钥”(public key)和“私钥”(private key)。这一技术是如此惊人,以至于美国历史学家大卫·卡恩(David Kahn)把公钥加密技术评价为“自文艺复兴时期多表替换密码发明以来,该领域中最具革命性的新概念”。


迪菲和海尔曼的理论点燃了密码学家们寻找可实用的公钥加密技术的热情。1978年,密码学家、美国MIT大学教授罗纳德·里维斯特(Ronald Rivest),以色列密码学家阿迪·沙米尔(Adi Shamir)和美国计算机科学家莱恩·阿德曼(Len Adleman)共同发明了著名的、迄今广泛应用于IT互联网各个领域的、以三位发明者名字命名的公钥加密算法,里维斯特-沙米尔-阿德曼算法,即大家所熟知的“RSA算法”。


而另一个得到广泛采用的公钥加密技术“椭圆曲线加密技术”(ECC, Elliptic-curve cryptography)则晚的多。把数学上的椭圆曲线用到加密当中的构想,是由美国华盛顿大学数学教授尼尔·科布利兹(Neal Koblitz)和美国数学家维克多·米勒(Victor Miller)在1985年各自独立提出的。直到2004、2005年,椭圆曲线加密算法才得到广泛应用。而其更为广泛的应用场景,并不是加密(encryption),而是电子签名(digital signature)。基于椭圆曲线的电子签名算法又称为“椭圆曲线电子签名算法”(ECDSA, Elliptic Curve Digital Signature Algorithm, ECDSA)[5]。这正是中本聪为比特币所选用的签名算法。


-完-