非对称加密及其应用


怎么证明你是你?

  • 去银行开户

    • 难点:KYC (Know Your Customer)
    • 目的:可证明 + 不可抵赖
    • 方法:人脸识别 + 身份证

怎么证明你的服务/应用是你的?

  • 产商验证快应用

    • 难点:怎么证明你的快应用是你的
    • 目的:可证明、完整性、不可抵赖
  • https

    • 难点:通过不可信的网络,建立可信任的连接
    • 目的:可证明、完整性

方法是什么?


数学

  • RSA 加密算法

    • 互质数相乘容易 5 * 9 = 45
    • 互质数因数分解很难 45: 1,5,3,9,15,和 45
    • 越大的数越难

  • 椭圆曲线加密算法

    • 从起始点做切线,找到切线与曲线相交点很容易
    • 从相交点,找到起始点非常难
    • 传言常规的椭圆曲线加密算法,被美国埋下了漏洞


密码学

  • 非对称加密需要两把钥匙
  • 用于其中一把进行加密,只能用另一把进行解密
  • 留给自己的叫做私钥,暴露给外界的叫公钥


演示

  • 使用 openssl 生成 keys
  • 公钥加密,私钥解密 Demo
  • 私钥加密,公钥解密 Demo

非对称加密


方案:怎么证明你的快应用是你的?

  1. 快应用: 数学 (生成)=> 私钥 + 公钥
  2. 快应用: 私钥 + 程序 (非对称加密)=> 加密的快应用
  3. 厂商:加密的快应用 + 公钥 (非对称解密)=> 快应用

    • 如果公钥私钥不匹配,解密出来的是乱码

解决的问题

  • 可证明: 你有办法证明,快应用是你的
  • 完整性:快应用没有被第三方修改过
  • 不可抵赖:快应用被查水表的,产商找你对账,你否认不了

方案:怎么证明浏览器请求的服务器返回的消息是服务器的?

  1. 服务器:数学 (生成)=> 私钥 + 公钥
  2. 浏览器:公钥 + 临时通讯密码 (非对称加密)=> 加密的密码
  3. 服务端: 私钥 + 加密的密码 (非对称解密)=> 临时通讯密码
  4. 服务端:临时通讯密码 + 信息 (对称加密)=> 加密的信息
  5. 浏览器: 临时通讯密码 + 加密的信息 (对称解密) => 信息

解决的问题

  • 可证明 服务器有办法证明,response 是他发送的
  • 完整性 response 被人修改后,可以查出来

非对称加密表达式

  • Alice

    1. hash: x = hash(data)
    2. send: c(x) and data
  • Bob

    1. receive: c(x) and data
    2. verify: d(c(x)) = x = hash(data)

非对称加密完整流程


问题

  • 产商怎么知道你的快应用公钥是你的?
  • 浏览器怎么知道你的服务器的公钥是你的?

谁能证明?


Alice 和 Bob 找一个第三方来证明


  • Certificate Authority 数字证书认证机构担任可信的第三方角色
  • 对比:电信服务商 担任不可信的第三方角色


数字签名获取实现(个人推理未验证)

  1. Alice: 数学 (生成)=> 公钥 + 私钥
  2. Alice : 公钥 (发送)=> CA
  3. CA: 公钥 + 信息 (非对称加密)=> 加密的信息1
  4. Alice: 私钥 + 加密的信息1 (非对称解密)=> 信息
  5. Alice: 私钥 + 信息 (非对称加密) => 加密的信息2
  6. CA: 公钥 + 加密的信息2 (非对称解密) => 信息
  7. CA: 数学 (生成)=> 公钥2 + 私钥2
  8. CA: 公钥2 + 信息(公钥、过期时间等) (非对称加密)=> 数字证书

简化版获取证书

  1. 快应用获取证书
  2. CA 的生成算法是公开的,Alice 可以验证 CA 不会保留自己的私钥
  3. Alice 的公钥和私钥由 CA 生成,而不是 Alice 自己生成
  4. CA 只需给将证书和私钥给 Alice 即可

思考: CA 如何证明自己是 CA?


再找个可信的第三方来证明

...


最后的可信的第三方是操作系统的 CA


Https 流程


我的一些错误操作

  • 我把快应用的私钥和证书传到了 gitlab 上了
  • 两次打包过程中,使用了两个不同的私钥和证书

fitfish
1.6k 声望950 粉丝

前端第七年,写一个 RN 专栏。