Web3公开课-第二讲.17924171

发布时间 2023-12-24 12:38:42作者: 夏目^_^

Web3公开课-第二讲

为什么讲密码学?

密码学是区块链底层安全机制的保障。(区块链底层基于密码学)

科尔霍夫原则

对于一个密码学系统,应当仅有密钥是保密的,其余算法和一切参数都应该是公开的。(换句话说:保密性只针对于密钥,对于加密过程等其他的内容都应该是公开的)

并不一定在数学上完全不可破解,只要在现实中不可能破解即可(例如:对于一个加密算法,理论上可以破解,但是花费的时间很长)。

加密/解密算法

对称加密

加解密使用相同的密钥,典型的应用:

古典密码学:

  1. 凯撒密码
  2. 维吉尼亚密码

现代对称加密算法:

  1. 分组密码(AES、DES)
  2. 流密码(伪随机数生成器)

优点:加解密效率高

缺点:双方必须事先共享密钥,密钥管理不便,对于传输密钥的信道的安全性要求很高。

非对称加密(重点)

加解密使用不同的密钥(公钥和私钥)公钥公开,私钥自己保存。

如果要保证保密性,使用公钥加密私钥解密。如果用于数字签名(验证发的人是你),那么使用私钥加密,公钥解密。

缺点:效率低(解决:通过非对称加密交换密钥,再用对称加密进行通信)

优点:安全性很高,基于某种数学难题(至今没有什么好的解决方案)(大整数分解等),导致破解密码非常难。

非对称加密算法:

  1. RSA(基于大整数分解)
  2. 离散对数
  3. 椭圆曲线ECC(比特币基于椭圆曲线)

img

数字签名

加解密

Alice给Bob传信息,Alice用Bob的公钥加密,Bob用自己的私钥解密

在没有私钥的情况下,无法获取到明文相关信息

数字签名(基于非对称加密)

  1. Alice想证明某个消息是自己发的
  2. Alice用自己的私钥签名,其他人可以用Alice的公钥验证签名有效性
  3. 没有私钥的情况下,无法伪造签名
  4. ECDSA(基于椭圆曲线的数字签名)(椭圆曲线数字签名算法)

数字签名的流程(来自:https://zhuanlan.zhihu.com/p/629109418):

  1. 发送方 ”张三“对原始数据通过哈希算法计算出数字摘要,使用私钥对数字摘要进行加密,这个加密后的数据就是数字签名;

  2. 数字签名与”张三“的原始数据一起发送给验证签名的任何一方。

验证数字签名的流程(来自:https://zhuanlan.zhihu.com/p/629109418):

  1. 首先,签名的验证方,一定要拥有发送方”张三“的公钥。

  2. 在接收到数字签名与”张三“的原始数据后,首先使用公钥,对数据签名进行解密,得到原始摘要值;

  3. 然后,对”张三“的原始信息通过同样的哈希算法计算出摘要值,再对比通过公钥解密得到的摘要值与重新计算的摘要值是否相同,如果相同,则签名验证通过。

  4. ”张三“的公钥可以解密数字签名,保证了原始数据确实来自”张三“;解密后的摘要值,与原始数据重新计算得出的摘要值相同,保证了原始数据在传输的过程中未经过篡改。

哈希(散列函数)

哈希介绍

哈希算法可以理解为是一种消息摘要,哈希算法可能会产生冲突,如何解决冲突对于哈希算法很重要。

  1. 可以将无穷空间内的消息映射到有限空间内的摘要。(将大范围映射为小范围)
  2. H(M) = x
  3. 确定性算法(对于同一个消息,哈希的结果都是一样的)
  4. 消息一旦改变,摘要也会改变。

img

哈希的性质

  1. 不可逆(单向性):(拿到哈希的人,没办法知道原始明文是什么)
  2. 抗碰撞:哈希函数出现碰撞是不可避免的,一个好的哈希函数应该具有尽量小的碰撞概率(当概率足够小,我们就说这个函数是抗碰撞的)。抗碰撞指:在相同哈希值的情况下,找到两个不同的输入数据的难度(在计算意义上不可能)。
  3. 确定性
  4. 混淆性
  5. 不可预测性:对于原文,只需改动一点,就可以使密文发生翻天覆地的变化。换句话说,无法通过密文去猜测明文。

这里给出其他人在哈希函数抗碰撞性上的理解:

而现在所说的抗碰撞性是指:虽然说会产生哈希碰撞,但这种哈希碰撞很难被人为制造,也就是给定一个输入m,哈希运算得到H(m),但是很难人工找到另外一个输入m',使得2次的哈希结果完全相同,即H(m)=H(m')。

上述内容出自:https://zhuanlan.zhihu.com/p/110128573

区块链中的密码学

钱包地址

每个人都依据钱包地址在区块链上进行交易。

  1. 每个地址实际上对应一对公私钥对
  2. 钱包地址如何生成?生成私钥->公钥->乱七八糟的转换->钱包地址
  3. 私钥是证明你拥有该账户的唯一方式,一旦私钥泄露,该账户将被别人拥有。(代表:任何情况下不要复制私钥/助记词,注意保存)

交易(哈希+数字签名)

  1. 每个交易就是一条message(包含资产的转移等)(简单理解为转钱、金钱的流动等)
  2. 交易的流程:在区块链网络中,每个节点都拥有一份公私钥对,节点发送交易时,先利用自己的私钥对交易内容进行签名,并将签名附加在交易中。其他节点收到广播消息后,首先对交易中附加的数字签名进行验证,完成消息完整性校验和消息发送者身份合法性校验后(验证发送者身份(数字签名),以及发送数据是否被篡改(通过哈希计算报文摘要)),交易才会触发后面的处理流程。(来自:https://zhuanlan.zhihu.com/p/629109418)
  3. 不要签名未知/不可信的交易,可能导致你的财产损失。

靠哈希算法出块(挖矿)

挖矿通俗的理解就是不断地算哈希值,暴力枚举计算哈希小于某个值。如果我能比你先算出来,那么我就可以获得奖励。

有人为了获得奖励,通过很多台机器来进行计算。

哈希算法如何保证区块链的安全性,防止篡改?

每一个块的头部,都包含的上一个区块的哈希(链式结构),想要修改之前区块中的某个内容,需要从那个块开始整个后面的所有块都要修改(计算哈希很难,对算力的要求极高)。

默克尔树(Merkle Tree)

一种依靠哈希来快速确认某个值是否在一个集合中的数据结构(验证一个交易是否在某个区块中)。

常用于区块存储交易,发行白名单确认等场景。

img

致谢

    [1] https://zhuanlan.zhihu.com/p/629109418
    [2] https://www.bilibili.com/video/BV1YM411J7oS?p=2&vd_source=a642bb3ddc5b706845426dc41d73fbda