Skip to content

密码学概览

  • 加密 / 解密算法
    • 对称加密
    • 非对称加密
  • 数字签名
  • 哈希(散列函数)
  • 其他:密码分析

科尔霍夫原则 (Kerckhoffs's principle)

  • 对于一个密码学系统,应当仅有密钥是保密的,其余算法和一切参数都应该是公开的
  • 并不一定要数学上完全不可破解,只要在现实中不可能破解即可

对称加密

加解密使用相同的密钥

现代对称加密算法

  • 分组密码: DES、AES
  • 流密码:伪随机数生成器(RPG)
  • 优点:效率高
  • 缺点:双方必须事先共享密钥

非对称加密算法

加解密使用到密钥不同。分为公钥和私钥。

  • 缺点: 效率低
    • 传统方式:使用非对称交换密钥,再用对称加密通信
  • 安全性来源
    • 基于某种数学难题
      • 破解密码的难度规约到解决某个数学难题的难度
      • RSA:基于大整数分解的困难。N = p * q,已知 N,求解 p 和 q 很困难
      • 离散对数:方程 (y=gxmodp),已知 y,g,p, 求 x 很难
    • 椭圆曲线 ECC: (y2+axy+by=x3+cx3+dx+e)
      • 并不是在每个群上的离散对数都是难解的
      • 在某些椭圆曲线群上难解,一个群对应一组 abcde 参数
      • 比特币选取的曲线是secp256k1

加解密

  • Alice 给 Bob 发消息,Alice 用 Bob 的公钥加密,Bob 用自己的私钥解密
  • 在没有私钥的情况下,无法获取到明文相关信息

数字签名

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

哈希算法

消息摘要

  • 把无穷空间内的消息映射到有限空间内的摘要
  • H(M) = x
  • 确定性算法
  • 消息一旦改变,摘要也会改变

重要性质

  • 不可逆(单向性)
    • 拿到哈希的人,没办法知道原始明文是什么
  • 抗碰撞
    • 无法找到两个不同的消息,但是摘要相同(计算意义上的不可能)
  • 确定性
  • 混淆行
  • 不可预测性

区块链中的密码学

钱包地址

  • 每个地址实际上对应一对公私钥对
  • 私钥 ——> 公钥 —— 转换 ——> 地址
  • 私钥是证明你拥有该账户的唯一方式,一旦私钥泄露,该账户将被别人拥有。
    • 任何情况下不要复制私钥 / 助记词,注意保存。

交易

  • 每个交易就是一条 message
  • 用你的身份发出一笔交易,即签名
    • 不要签名未知 / 不可信交易,可能导致你的财产损失

靠哈希算法来出块

  • 暴力枚举计算哈希小于某个值
  • 由于哈希算法的性质,没有除了暴力枚举以外的挖矿方法
  • 通过算力的分散性保证去中心化出块

靠哈希算法性质维护最长链,防止攻击

  • 每一饿块的头部,都包含了上一个区块的哈希
    • 链式结构
  • 想要修改之前区块中的某个内容,需要从那个块开始整个后面的所有块都要修改
  • 枚举哈希很难,所以很难对抗全网算力算出新的链

默克尔树 (Merkle Tree)

  • 一种依靠哈希来快速确认某个值是否在一个集合中的数据结构
  • 常用于区块存储交易,发行白名单确认等场景