BTC 中的密码学

毫无疑问,比特币的技术支撑中密码学可谓是劳苦功高,特别是公钥密码学,也叫做非对称密码学。如果你没有接触或者学习过密码学的人可能是不了解密码学的,首先我们要清楚一些密码学的概念。
密码学中有两个分支,一个是分组密码体制(对称密码),公钥密码体制(非对称密码)。

分组密码体制

对于一个小白来说并不知道什么是秘钥,密文这些名词究竟是什么意思,没关系,我这里简单的给大家说一下概念。

明文 密文

比如现在有个消息“i love my darling”,我们并不想别看看到,朱这是看到这个也不知道是什么意思,就可以利用加密,加密成看不懂的“*********”,那么在加密前的“i love my darling”也就是叫做明文了。加密后看不懂的信息“*********”就是密文了

秘钥

还是接着上一个例子继续说,针对明文“i love my darling”,我们把明文变成十六进制的一个数字,假设这个数字是A,并且这个数字是10,我们要是把这个10传给你的darling,当然这是明文,你的darling肯定是能看懂的,但是你想对其他的人保密,我们就加密这个10,然后就用我自己想得一个算法去加密,比如现在我就选定了一个私钥位250,然后把10与250相加,得到密文260,然后我们把密文发给你的darling,并且把250这个秘钥发给你的darling,然后你的darling拿到这个密文和密码就可以进行解密了,解密过程就是260-250 然后得到10,自然就得到了密文,但是如果别人截获到了消息的密文260但是他并没有秘钥,也就自然无法解密即使是他知道解密的算法是什么。(我这里所举例的加密解密是很简单的数学运算,并不是真正的加密算法,所以可以破解的,但是真正的密码算法几乎都是不可破解的,或者说是以目前计算机的算力还不足以破解)。
以前别人这样给我形象的给我讲的:秘钥好比一把钥匙,加密算法好比一个把锁,明文好比你的家,如果你要出门肯定就要锁门把,你选择一个怎样的锁,好比你选择用什么加密算法来加密明文,如果你想家里安全就去买一个很贵的高大上的锁。你出门用你的这个钥匙去锁上这个门后,你爸爸,妈妈也可以开这个门,因为他们有和你一样的钥匙。对称密码学中也是一样,只要别人有你的秘钥或者一样的秘钥,也可以解密你这个密文。
这里再提一下密码学的安全性,接着说,就算你家里用的是世界上最牛逼的锁,但是你偏偏没有保存好把你的钥匙,给了别人,或者别人去做了一个和你一样的钥匙,他也就可以进你家的大门了。密码学中也是一样,密码的安全性是基于秘钥的安全性。

为什么叫对称密码呢?,因为加密和解密的密钥只有一个,也就是是说:我用密码A加密了一个消息M得到密文C,如果我们要在网络中把消息发给别人,为了不让别人监听到我和那个人交流的内容,就需要加密传输。比如就把密文C发给别人,但是他收到的密文,并不知道消息真实的内容是什么,所以就需要解密这个密文C。因为是用对称密码算法用秘钥A加密的。所有解密也是用秘钥A解密。
总的来说也就是解密加密用的同一个秘钥。

公钥密码体制

公钥密码学中有两个秘钥,一个是公开的秘钥(所有人都可以去得到它),称为公共秘钥,也叫公开钥,但是普遍都叫做公钥,还有一个是私密秘钥,也叫做私钥;只用用户自己知道,并且用户也应该保存好自己的私钥。比如现在你的darling生成了一对秘钥分别是私钥SK,公钥PK。

公钥密码学的特点(重要)

我们用私钥SK加密一个明文M,则只能用公钥PK解密。
我们用私钥SK加密一个明文M,则只能用公钥PK解密。
这有什么用呢?首先我们举这样一个场景。
天天埋头撸码挣钱的你感动了你的darling,一天你darling想告诉全世界人她爱你,于是她在5月22日这天用她的私钥SK加密明文“2501314”,然后把密文在网上广播,别人看到这个消息后找到你darling的公钥PK然后解密后就知道了这个消息(因为公钥是公开的所以别人是可以得到的,具体是怎么得到的大家不用纠结)。同时,用你darling的私钥SK加密的消息,只有用你darling的公钥PK才能解密,同时说明了这个消息肯定是你darling发出的,这样也就起到了签名的作用,也就是说你darling在这个消息上签名了,这是它发出来的。所有公钥密码学可以用到数字签名中。
在前面的分组密码体制中讲到这样的一个例子,你想给你darling发“i love my darling”但是你不想别人知道,所以你就加密,这里讲下怎么用公钥密码学来加密。你用你darling的公钥来加密这个消息,然后发出给你darling,然后你darling可以用她的私钥解密这个消息,如果这个消息被人截获了也不用怕,只要他没有你darling的私钥肯定也是不能解密的,如果那个人是你darling的小情人这种情况也就另当别论了。所以公钥密码学还可以用到加密消息中。

比特币中的公钥密码学

比特币中是用的是椭圆曲线密码学(ECC)的secp256k1算法。
密码学是基于数学难题的,比如著名的RSA算法,就是基于大整数因数分解难题。
而椭圆密码体制则是基于离散对数难题的。
这些数学原理我自然是讲不清楚的,最多也是理解理解。
下面我找了一些资料:
https://www.zhihu.com/question/22399196 #幽默的语言
http://www.8btc.com/btc_ecc_dsa_a
http://kakaroto.homelinux.net/2012/01/how-the-ecdsa-algorithm-works/
http://www.freebuf.com/articles/database/155912.html
http://www.freebuf.com/articles/database/165851.html
下面我截取了很多我们教材上讲解的椭圆曲线,可以这些资料都看一些,实在不懂请教一下大佬好了
推荐一下这是杨波老师出的第四版《现代密码学》清华大学出版社

BTC 中的密码学_第1张图片

BTC 中的密码学_第2张图片
BTC 中的密码学_第3张图片

比特币的私钥、公钥、地址间的数学关系

一文读懂比特币私钥、公钥、钱包地址的来历和关系

如果还不是很清晰可以看看《精通比特币第二版》中第四章

你可能感兴趣的:(BTC 中的密码学)