区块链中的密码学基础
为什么要讲密码学
- crypto
- 区块链底层安全机制的保障
- web3安全必备知识
密码学概述
-
加密/解密算法
- 对称加密
- 非对称加密
-
数字签名
-
哈希(散列函数)
-
其他:密码分析
科尔霍夫原则
Kerckhoffs‘s principle
- 对于一个密码学系统,应当仅有密钥是保密的,其余算法和一切参数都应该是公开的
- 并不一定要数学上完全不可破解,只要在现实中不可破解即可
对称加密算法
-
什么是对称加密
- 加解密使用相同的密钥
-
古典密码学
-
凯撒密码
-
单表代换
-
-
维吉尼亚密码
- 多表代换
-
-
现代对称加密算法
-
分组密码
- DES,AES…
-
流密码
-
伪随机数生成器(PRG)
-
-
-
优点
- 效率较高
-
缺点
- 双方必须事先共享密钥(对称)
非对称加密算法
- 非对称
- 加解密使用的密钥不同
- 公钥、私钥
- 缺点:效率较低
- 传统方式:通过非对称交换密钥,再用对称加密通信
- 安全性来源
- 基于某种数学难题
- 破解密码的难度规约到解决某个数学难题的难度
- RSA:基于大整数分解的困难.N=p * q,已知N,求p和q很困难
- 离散对数:方程y = g^x mod p,已知y,g,p,求x很困难
- 基于某种数学难题
- 椭圆曲线ECC
- 并不是在每个群上的离散对数都是难解的
- 在某个椭圆曲线群上难解,一个群对于一组abcde参数
- 比特币选取的曲线是secp256k1
y 2 + a x y + b y = x 3 + c x 2 + d x + e y^2+axy+by=x^3+cx^2+dx+e y2+axy+by=x3+cx2+dx+e
-
加解密
- Alice给Bob传信息,Alice用Bob的公钥加密,Bob用自己的私钥解密
- 在没有私钥的情况下,无法获取到明文相关信息
-
数字签名
- Alice想证明某个消息是自己发的
- Alice用自己的私钥签名,其他人可以用Alice的公钥验证签名有效性
- 在没有私钥的情况下,无法伪造签名
- ECDSA
哈希算法
- 消息摘要
- 把无穷空间内的消息映射到有限空间内的摘要
- H(M)=X
- 确定性算法
- 消息一旦改变,摘要也会改变
-
重要性质
- 不可逆(单向性)
- 拿到哈希的人,没办法知道原始明文是什么
- 抗碰撞
- 无法找到两个不同的消息,但是摘要相同(计算意义上不可能)
- 确定性
- 混淆性
- 不可预测性
- 不可逆(单向性)
区块链中的密码学
- 钱包地址
- 每个地址实际上对应一对公私钥对
- 私钥—>公钥—乱七八糟 转换—>地址
- 私钥是证明你拥有该账户的唯一方式,一旦私钥泄露,该账户将被别人拥有
- 任何情况下不要复制私钥/助记词,注意保存
- 交易
- 每个交易就是一条message
- 用你的身份发出一笔交易,即签名
- 不要签名未知/不可信交易,可能导致你的财产损失
- 靠哈希算法来出块
- 此处只讨论PoW类
- 暴力枚举计算哈希小于某个值
- 由于哈希算法的好性质,没有除了暴力枚举以外的挖矿方法
- 通过算力的分散性保证去中心化出块
- 靠哈希算法性质维护最长链,防止攻击
- 每一个块的头部,都包含了上一个区块的哈希
- 链式结构
- 想要修改之前区块中的某个内容,需要从那个快开始整个后面的所以块都要修改
- 枚举哈希很难,所以很难对抗全网算力算出新的链
- 每一个块的头部,都包含了上一个区块的哈希
- Merkle Tree(默克尔树)
- 一种依靠哈希来快速确认某个值是否在一个集合中的数据结构
- 常用于区块存储交易,发行白名单确认等场景
总结
-
非对称加密算法
-
哈希函数
-
区块链中的应用
[外链图片转存中…(img-6k0sKe9a-1713613242523)]
- Merkle Tree(默克尔树)
- 一种依靠哈希来快速确认某个值是否在一个集合中的数据结构
- 常用于区块存储交易,发行白名单确认等场景
总结
-
非对称加密算法
-
哈希函数
-
区块链中的应用