比特币和区块链(4):比特币的密码学知识之非对称加密

我们对加密并不熟悉。

看谍战片的时候,

里面的情报都会被加密传输。类似于哈希。

我们也可以认为加密是一个从定义域到值域的函数:输入是明文,输出是密文。和哈希不同之处在于,用于加密的函数必须是存在反函数的,这个反函数就是解密函数。换句等价的话说,对定义域上的每个输入在值域上都有唯一的输出,并且值域上的每个输出,定义域上有唯一的输入。

举例来说,如果我们对英文字母都做如下的变换:把每个字母替换成在字母表里面的(位置+2)%26的字母。这就完成了一次加密。解密的过程反过来就可以了。当然因为在单词中,英文字母频率出现有规律,这种简单的密码是非常容易破解的。

在计算机没有发明之前,人们尝试过很多种复杂的密码。其中最为著名的是二战时候德国使用的恩尼格玛密码机。当然即使复杂如恩尼格玛密码机最终也免不了被破译的命运。

对称加密算法

二战以后伴随计算机的发明,人类拥有了非常强的计算能力,普通的加密解密算法在计算机面前已经完全招架不住了。所以二战以后发明的现代密码学基于的是数学上著名的难题,它们都引入了密钥的概念。

简单来说,如果知道密钥,则此数学问题的求解很容易。如果不知道密钥则此问题在合理的时间内解不出来,所以密钥的保存就尤为关键了,这类加密和解密都使用同一个密钥的算法,叫做对称加密算法。著名的有DES,3DES, AES, IDEA等。由于密钥必须同时被加密和解密者使用,这类加密算法并未大规模的流行开来。

W.Diffie和M.Hellman1976年在IEEE Trans.on Information刊物上发表了“New Direction in Cryptography”文章,提出了“非对称密码体制”的概念,开创了密码学研究的新方向。然而他们仅仅提出了这个思想,却没有给出算法。真正给出算法的是1977年由Ron Rivest, Adi Shamir和Leonard Adleman提出。算法以他们姓的首字母命名。这几位也因为发明RSA算法获得2002年的图领奖。

那么非对称加密算法是什么样的呢?和对称算法不一样的是,非对称加密算法有两个密钥:私钥和公钥。其中一个用于加密一个用于解密。通常来说,私钥自己保存,公钥公开发布。

非对称加密算法

两个不同应用

1、私钥用于解密,公钥用于加密。这种情况下只有收件人可以解密,所有的人都可以加密给收件人发消息。通常是用来做信息传输。

2、私钥用于加密,公钥用于解密。这在非对称加密算法里更常用。用来做数字签名。因为加密的只可能是持有私钥的人,而解密的则是全地球任何持有公钥的人。所以这种方式并不是为了传递秘密的信息,而是为了让大家知道这个加密是谁做的。

在比特币环境下,非对称加密算法主要用于数字签名。其目的是为了证明一条交易记录是由那个人发起的。比特币中的非对称加密算法是基于椭圆曲线的算法,而非更常用的RSA。有关椭圆曲线的具体算法就不展开说了。大部分人是看不懂的。

比特币里的钱包地址并非是简单的公钥,其生成过程如下:

1、使用secp256k1的椭圆曲线生成私钥与公钥

2、将公钥通过SHA256哈希算法处理得到32字节的哈希值

3、后对得到的哈希值通过RIPEMD-160算法来得到20字节的哈希值 —— Hash160

4、把版本号+Hash160组成的21字节数组进行双次SHA256哈希运算,得到的哈希值的头4个字节作为校验和,放置21字节数组的末尾。

5、对组成25位数组进行Base58编码,就得到地址。

6、当一笔交易发生的时候,交易需要提供交易方的钱包公钥,而比特币系统需要验证这个公钥的确生成了这个地址。

为什么比特币的地址在公钥的基础上要搞那么多次的哈希呢?很多人都进行过讨论。中本聪为什么这样设计的初衷可能是说不清楚了。比较流传广泛的说法有两个,一个是说这种方式可以防止量子计算机的攻击。毕竟量子计算机能攻击非对称加密算法,但目前尚对SHA256之类的哈希算法无力。另外一个说法是为了防止密码学上一些不为人知的坑。

比特币选取椭圆曲线算法作为非对称加密算法算不上新奇,但是其选择了secp256k1是一件令人费解的事情。一般而言椭圆曲线被分成两类:伪随机曲线,比如secp256r1,和Koblitz曲线,比如secp256k1。目前由美国NSA主导的标准是前者。

最近揭露的一些说法是美国的NSA掌握了不为人知弱化特定的伪随机曲线的能力,而标准里面的那条曲线就是精心选择的,可以以某种方式被NSA弱化破解。但是Koblitz曲线则至今为止没有发现被破解。

比特币是为数不多的几个采用secp256k1而不是secp256r1的程序。我不知道是不是中本聪早就知道NSA掌握了秘密的破解方式。无论如何,要是传闻是真的,比特币是少数几个躲过了被破解的非对称加密应用。

极客社区:区块链极客社区起源于北美顶尖的工程师社群,核心成员来自于各大科技公司、顶尖学府。社区以打造世界级区块链生态为宗旨,以促进区块链技术的普及为己任,希望站在区块链时代的风口上将最优质的区块链资源分享给用户!在这里,你将获得最权威的区块链教程、最新鲜的区块链资讯,以及对接最顶级区块链生态圈的机会。

加入我们,与硅谷大牛、藤校学霸一起,把酒言欢,链上论道;

加入我们,拥抱区块链去中心化的朝阳,破旧立新,让思维碰撞,让智慧共享;

加入我们,肩负起区块链时代赋予我们的独特使命,不忘初心, 砥砺前行!

不割韭菜,只谈技术,专属于工程师的社区!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180812G0BHNX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券