综述
Web 1:静态门户,只读
Web 2:可读可写
Web 3:可拥有
密码学
区块链底层安全机制的保障。
概览
-
加密算法 / 解密算法(对称加密、非对称加密)
-
数字签名
-
哈希(散列函数)
科尔霍夫原则
对于一个密码学系统,应当仅有密钥是保密的,其余算法和一切参数都应该是公开的。
并不一定要数学上完全不可破解,只要在现实中不可能破解即可。
对称加密
概念:加解密时使用相同的密钥
古典密码学 - 凯撒密码:单表代换
凯撒密码加密时,会将明文中的每个字母、都按其在字母表中的顺序往后(或往前)循环移动固定数目
现代对称加密算法
-
分组密码:DES / AES
-
流密码:伪随机数生成器(PRG)
优点:效率高
缺点:双方必须事先共享密钥
非对称加密
概念:加解密使用的密钥不同。分为公钥(对外公开)和私钥(只有自己知道)
缺点:效率较低。
传统使用方式:通过非对称交换密钥,再用对称加密通信。
椭圆曲线 ECC
因为并不是在每个群上的离散对数都是难解的,但是在某些椭圆曲线群上难解,因为一个群对应一组 abcde 参数
比特币选取的曲线是 secp256k1
加解密
a 给 b 传消息。a 用 b 的公钥加密完消息,b 用自己的私钥解密
在没有私钥的情况下,其他人无法获取到明文相关信息
数字签名
a 想证明某个消息是自己发的。
a 用自己的私钥签名,其他人可以用 a 的公钥验证签名有效性
在没有私钥的情况下,无法伪造签名
ECDSA:基于椭圆曲线的数字签名算法
消息摘要
-
把无穷空间内的消息映射到有限空间内的摘要(哈希)
-
H(M) = x
-
碰撞:不同的内容可能会被哈希成相同的结果
-
确定性算法:无论哈希多少次,或者换设备换时间进行哈希,得到的结果都是一样的
-
消息一旦改变,摘要也会改变
哈希算法性质
-
不可逆(单向性):拿到哈希值的人,无法知道原始明文是什么
-
抗碰撞:无法找到两个摘要相同的不同消息(计算意义上不可能)
-
确定性
-
混淆性
-
不可预测性
钱包地址
每个地址实际上对应了一对公私钥对
随机出一个私钥 -> 用私钥产生公钥 -> 把公钥进行一些乱七八糟的转换 -> 得到地址
私钥是证明你拥有该账户的唯一方式。一旦私钥泄露,该账户将被别人拥有
交易
实际上实现了一个数字签名的过程(用私钥对其进行签名)
每个交易就是一条 message。先对 message 进行哈希,再对它进行签名
靠哈希算法性质维护最长链,防止攻击
每一个块的头部,都包含了上一个区块的哈希(链式结构)
想要修改之前区块中的某个内容,从那个块开始的、所有后面的块都要进行修改,哈希值也会完全不同
枚举哈希很难,所以很难对抗全网算力计算出新的链
默克尔树
基于哈希的树状结构。依靠哈希来快速确认某个值是否在一个集合中。
常用于区块存储交易、发行白名单确认等场景。

原理
l1、l2、l3、l4 分别进行哈希。l1 和 l2 哈希后的结果再一起进行哈希,得到 hash0;l3 和 l4 哈希后的结果再一起进行哈希,得到 hash1。最后 hash0 和 hash1 再次进行哈希,得到最终值
同样是只要 l1、l2、l3、l4 其中有一个产生了变化,整个哈希后的值都会变
如何验证是不是在一个集合
假设要验证 l1,那么只要得到 l2 哈希后的值,以及 hash1,然后和 l1 一起验算,看最后得到的哈希值正不正确