awesome-blockchain/Basic/crypto.md
2018-04-02 17:01:04 +08:00

5.8 KiB
Raw Blame History

数字加密相关知识

非对称加密

对称加密指加密和解密使用相同密钥的加密算法。它要求发送方和接收方在安全通信之前,商定一个密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密。

每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。同时,对称加密算法能够提供加密和认证却缺乏了签名功能,使得使用范围有所缩小。

具体算法DES算法3DES算法TDEA算法Blowfish算法RC5算法IDEA算法。

非对称加密指加解密密钥不相关典型如RSA、EIGamal、椭圆曲线算法。

椭圆曲线加密

公开密钥算法总是要基于一个数学上的难题。比如RSA 依据的是给定两个素数p、q 很容易相乘得到n而对n进行因式分解却相对困难。那椭圆曲线上有什么难题呢

考虑如下等式:

K=kG  [其中 K,G为Ep(a,b)上的点k为小于nn是点G的阶的整数]  

不难发现给定k和G根据加法法则计算K很容易但给定K和G求k就相对困难了。
这就是椭圆曲线加密算法采用的难题我们把点G称为基点base point

现在我们描述一个利用椭圆曲线进行加密通信的过程:

  1. 用户A选定一条椭圆曲线Ep(a,b)并取椭圆曲线上一点作为基点G。
  2. 用户A选择一个私有密钥k并生成公开密钥K=kG
  3. 用户A将Ep(a,b)和点KG传给用户B。
  4. 用户B接到信息后 将待传输的明文编码到Ep(a,b)上一点M编码方法很多这里不作讨论并产生一个随机整数r
  5. 用户B计算点C1=M+rKC2=rG。
  6. 用户B将C1、C2传给用户A。
  7. 用户A接到信息后计算C1-kC2结果就是点M。因为 C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
    再对点M进行解码就可以得到明文。

在这个加密通信中如果有一个偷窥者H他只能看到Ep(a,b)、K、G、C1、C2而通过K、G 求k 或通过C2、G求r 都是相对困难的。因此H无法得到A、B间传送的明文信息。

公钥与私钥

公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
通过公钥是无法(或极其困难)推算出私钥的。注意这里公钥与私钥都可以用来加密,只是私钥是自己保存,而公钥是公开的。

比如A发信息给B就用B的公钥加密信息然后发给BB用自己的私钥解密就可以看到信息内容。

数字签名

A把要加密的内容用hash函数生成摘要digest再用自己的私钥对digest加密生成数字签名signature。连同加密的内容一起发给B。

B收到后摘要用A的公钥解密内容(用自己的私钥解密) 都解密再对内容使用相同hash看得到的digest是否相同相同说明发送的内容没有被修改。

同时用A的公钥对digest进行解密还能验证这是不是A发来的内容但是这里有个潜在的问题。

如果B存储的A的公钥被C替换成了C的公钥那么C就可以冒充A和B进行通信而B却完全不知道。

数字证书

证书中心用自己的私钥对A的公钥和一些相关信息一起加密,形成数字证书
A在发送内容的同时在数字签名后再附上数字证书。
B收到后先用CA的公钥解密数字证书得到A真正的公钥再用A的公钥来验证签名是否是A的签名。

B可以每次都到CA的网站上或者什么别的官方途径获得CA的公钥。

这么做的目的是为了验证:

  1. 确认该信息确实是A所发
  2. 确认A发出的信息是完整的。
  • 公钥防泄漏,私钥防篡改
    • B收到后只有用B自己的私钥才能解密内容别人是无法解密的。防泄漏
    • 再用上述数字证书来验证数字签名是否来自A发送内容有没有被篡改。防篡改
      数字证书一般挂靠在可信任的机构,无法篡改和伪造。

Merkle Tree

默克尔树又叫哈希树由一个root节点一组中间节点和一组叶节点组成。
叶节点包含存储数据或者其哈希值中间节点和root节点都是其孩子的hash值。

markle tree

应用:
1. 快速比较数据,两个默克尔树的根节点相同,那么其所代表的数据必然相同
2. 快速定位修改比如上面D1数据被修改可通过root->N4->N1快速定位到发生改变的D1
3. 零知识证明比如要证明某个数据中包含D0那就构造一个默克尔树公开root、N4、N1、N0D0拥有者可以检测到D0存在但不知道其他内容。D0拥有者可以看到hash值但看不到完整的数据内容

Reference

  1. 数字签名是什么?
  2. 比特币背后的密码学原理