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