非对称加密及其应用
怎么证明你是你?
-
去银行开户
- 难点:KYC (Know Your Customer)
- 目的:可证明 + 不可抵赖
- 方法:人脸识别 + 身份证
怎么证明你的服务/应用是你的?
-
产商验证快应用
- 难点:怎么证明你的快应用是你的
- 目的:可证明、完整性、不可抵赖
-
https
- 难点:通过不可信的网络,建立可信任的连接
- 目的:可证明、完整性
方法是什么?
数学
-
RSA 加密算法
- 互质数相乘容易 5 * 9 = 45
- 互质数因数分解很难 45: 1,5,3,9,15,和 45
- 越大的数越难
-
椭圆曲线加密算法
- 从起始点做切线,找到切线与曲线相交点很容易
- 从相交点,找到起始点非常难
- 传言常规的椭圆曲线加密算法,被美国埋下了漏洞
密码学
- 非对称加密需要两把钥匙
- 用于其中一把进行加密,只能用另一把进行解密
- 留给自己的叫做私钥,暴露给外界的叫公钥
演示
- 使用 openssl 生成 keys
- 公钥加密,私钥解密 Demo
- 私钥加密,公钥解密 Demo
非对称加密
方案:怎么证明你的快应用是你的?
- 快应用: 数学 (生成)=> 私钥 + 公钥
- 快应用: 私钥 + 程序 (非对称加密)=> 加密的快应用
-
厂商:加密的快应用 + 公钥 (非对称解密)=> 快应用
- 如果公钥私钥不匹配,解密出来的是乱码
解决的问题
- 可证明: 你有办法证明,快应用是你的
- 完整性:快应用没有被第三方修改过
- 不可抵赖:快应用被查水表的,产商找你对账,你否认不了
方案:怎么证明浏览器请求的服务器返回的消息是服务器的?
- 服务器:数学 (生成)=> 私钥 + 公钥
- 浏览器:公钥 + 临时通讯密码 (非对称加密)=> 加密的密码
- 服务端: 私钥 + 加密的密码 (非对称解密)=> 临时通讯密码
- 服务端:临时通讯密码 + 信息 (对称加密)=> 加密的信息
- 浏览器: 临时通讯密码 + 加密的信息 (对称解密) => 信息
解决的问题
- 可证明 服务器有办法证明,response 是他发送的
- 完整性 response 被人修改后,可以查出来
非对称加密表达式
-
Alice
- hash: x = hash(data)
- send: c(x) and data
-
Bob
- receive: c(x) and data
- verify: d(c(x)) = x = hash(data)
非对称加密完整流程
问题
- 产商怎么知道你的快应用公钥是你的?
- 浏览器怎么知道你的服务器的公钥是你的?
谁能证明?
Alice 和 Bob 找一个第三方来证明
- Certificate Authority 数字证书认证机构担任可信的第三方角色
- 对比:电信服务商 担任不可信的第三方角色
数字签名获取实现(个人推理未验证)
- Alice: 数学 (生成)=> 公钥 + 私钥
- Alice : 公钥 (发送)=> CA
- CA: 公钥 + 信息 (非对称加密)=> 加密的信息1
- Alice: 私钥 + 加密的信息1 (非对称解密)=> 信息
- Alice: 私钥 + 信息 (非对称加密) => 加密的信息2
- CA: 公钥 + 加密的信息2 (非对称解密) => 信息
- CA: 数学 (生成)=> 公钥2 + 私钥2
- CA: 公钥2 + 信息(公钥、过期时间等) (非对称加密)=> 数字证书
简化版获取证书
- 快应用获取证书
- CA 的生成算法是公开的,Alice 可以验证 CA 不会保留自己的私钥
- Alice 的公钥和私钥由 CA 生成,而不是 Alice 自己生成
- CA 只需给将证书和私钥给 Alice 即可
思考: CA 如何证明自己是 CA?
再找个可信的第三方来证明
...
最后的可信的第三方是操作系统的 CA
Https 流程
我的一些错误操作
- 我把快应用的私钥和证书传到了 gitlab 上了
- 两次打包过程中,使用了两个不同的私钥和证书
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。