密码学概览 
- 加密 / 解密算法 - 对称加密
- 非对称加密
 
- 数字签名
- 哈希(散列函数)
- 其他:密码分析
科尔霍夫原则 (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) 
- 一种依靠哈希来快速确认某个值是否在一个集合中的数据结构
- 常用于区块存储交易,发行白名单确认等场景
