TLS协议分析 (八) 实现与开源项目
三. TLS协议的代码实现
TLS的主要实现:
- OpenSSL
- boringssl(Google)
- libressl
- s2n(Amazon)
- nss(Mozilla)
- polarssl
- botan
- gnutls(gpl)
- cyassl
- go.crypto
openssl是其中代码最糟糕的(没有之一)。
openssl提供了的api都太过于底层,api设计的也很费解,而且严重匮乏文档。
请参考 [《令人作呕的OpenSSL》] 链接 http://blog.csdn.net/dog250/a...
不幸的是,OpenSSL是用的最广泛的,是事实上的标准。
boringssl
Google’s OpenSSL fork by Adam Langley (@agl__)
https://github.com/sweis/cryp...
四. TLS协议的部署与优化
这个方面网上的文章还是不少的,本文就简略一点。
全站https时代正在到来!,
移动互联网对人们生活的介入越来越深人,用户越来越多的隐私数据和支付数据通过网络传输,人们的隐私意识安全意识不断提高;运营商流量劫持,强行插入广告越来越引起反感。因此,各互联网大厂都开始切换到https。
例如,2015年3月百度全站切换到https,百度运维部的介绍文章:[《全站 https 时代的号角 : 大型网站的 https 实践系列》] 链接 http://op.baidu.com/2015/04/h... 。
不久后淘宝切了全站https,https://www.taobao.com/
http://velocity.oreilly.com.c...
国外:由Snowden爆料,美国人发现NSA在大范围深度地监听互联网; 还有openssl连续被爆多个严重安全漏洞。之后近2年,各种加密通信协议,软件,项目开始热门,各大厂商开始关注密码协议,做数据加密,信息安全。(openssl资助,pfs被重视,)
Google的性能数据:
“In January this year (2010), Gmail switched to using HTTPS forgoogle的优化:
everything by default. .. In order to do this we had to deploy no
additional machines and no special hardware. On our production
frontend machines, SSL accounts for < 1% of the CPU load, < 10 KB of
memory per connection, and < 2% of network overhead…
If you stop reading now you only need to remember one thing: SSL is
not computationally expensive any more.”
— Overclocking SSL blog post by Adam Langley (Google https://www.imperialviolet.or... )
https://bit.ly/gottls
https://www.imperialviolet.or...
https://istlsfastyet.com/
https://www.ssllabs.com/downl...
http://chimera.labs.oreilly.c...
文章图片
baidu的经验:
http://op.baidu.com/2015/04/h...
aws的配置
http://docs.aws.amazon.com/El...
可以参考byron之前给出的一个介绍nginx配置的文章 [Nginx下配置高性能,高安全性的https TLS服务] https://blog.helong.info/blog... ,本人提供售后咨询服务,哈哈。
CipherSuite配置(Mozilla的权威配置)
https://wiki.mozilla.org/Secu...
hardenedlinux的这个文档:SSL/TLS部署最佳实践v1.4:
http://hardenedlinux.org/jeky...
全站切https,值得关注的一个点是cdn切https,如果cdn资源不使用cdn提供商的域名的话,之前会有私钥必须得交给cdn提供商的安全风险,但是幸运的是cloudflare提出了keyless ssl方案,解决了这个问题
https://github.com/cloudflare...,cdn切https应该可以借鉴。
有时候我们会用wireshark之类的工具抓包,来调试http协议,但是切换到https后,都变成二进制密文了,直接抓包是行不通了,那怎么调试协议呢?
解决办法是有的,可以参考 https://imququ.com/post/how-t...
参考 https://developer.mozilla.org...
五. 更多的加密通信协议case:QUIC,iMessage,TextSecure, otr, ios HomeKit,libsodium
时间有限,下面有些协议就没有做详细的分析了,读者自己去看吧。
1. QUIC
QUIC = TCP+TLS+SPDY
https://www.chromium.org/quic
其中的 crypto design文档是本文关注的。
http://network.chinabyte.com/...
http://blog.chromium.org/2015...
截止2015.04,从Chrome到Google server的流量的大概50% 是走的QUIC协议,而且还在不断增加。
据说减少了YouTube的30%的卡顿。
https://github.com/devsisters...
2. apple ios iMessage
iOS Security Guide : https://www.apple.com/busines...
Apple 的 iMessage系统的密码学安全机制设计,端到端加密,前向安全(PFS),签名使用ECDSA P-256,非对称加密使用RSA 1280 bit,苹果自己维护一个 用户名—》公钥 的目录服务。
iMessage在注册时,给每个用户生成一对 RSA-1280 密钥用作非对称加密,一对 NIST P-256 ECDSA 密钥用作签名,2个私钥本地保存,公钥上传给Apple的目录服务器(IDS)。
当要发送消息的时候,根据接收方的用户名,从IDS里面找到RSA公钥 和 APNS 地址。然后随机生成 128 比特密钥,用 AES-CTR-128 加密要发送的消息,用接收方的 RSA 1280 公钥,使用 OAEP 填充加密 128比特aes密钥。然后拼接 aes密文和rsa密文,对结果使用发送方的 ECDSA 私钥,用sha1算一次数字签名。
然后把aes密文,rsa密文,数字签名拼接起来,发给 APNS 投递给接收方。
如果要发送大文件,就生成一个key,用 aes-ctr-256 加密文件,并计算一个sha1,然后把key和sha1 放入消息里面发送。
3. apple ios HomeKit
iOS Security Guide : https://www.apple.com/busines...
Apple的HomeKit,是 WWDC2014 上提出的 iot 智能家居开发平台 (iot啊,目前最火的概念啊,各种高大上啊)。
可以看到 HomeKit 作为一个全新的协议, 抛弃了历史遗留算法,直接采用了目前最先进的算法
HomeKit 密码学安全机制的设计:
使用Ed25519做 公钥签名/验证,使用 SRP(3072 bit) 做来在iOS设备和HomeKit配件之间交换密码并做认证,使用 ChaCha20-Poly1305做对称加密,
使用HKDF-SHA512做密钥拓展。每个session的开始用Station-to-Station 协议做密钥协商和认证,
随后使用Curve25519做密钥协商,生成共享key。
4. TextSecure
TextSecure是一个端到端im加密通信协议,由WhisperSystem公司设计,目前whatsapp和WhisperSystem公司有合作,看网上资料,2014年11月开始,whatsapp已经开始使用TextSecure协议来做端到端加密(消息来源: https://whispersystems.org/bl...
http://www.wired.com/2014/11/...)。
TextSecure V2 协议:
https://github.com/WhisperSys...
https://github.com/trevp/axol...
https://whispersystems.org/bl...
The TextSecure encrypted messaging protocol 是otr的一个衍生协议,主要有2个不同点:
1.ECDSA代替DSA
2.某些数据结构压缩
5. otr 协议
标准文档见:https://otr.cypherpunks.ca/Pr...
open kullo协议
https://www.kullo.net/protocol/
Choice of algorithms
Whenever we write about symmetric or asymmetric encryption or signatures, we mean the following algorithms, modes and parameters:
symmetric encryption: AES-256 in GCM mode
asymmetric encryption: RSA-4096 with OAEP(SHA-512) padding
asymmetric signatures: RSA-4096 with PSS(SHA-512) padding
6. libsodium/NaCL
libsodium/NaCL 值得重点介绍,大力推广 。
新的没有兼容包袱的系统,都值得考虑用 NaCL来代替 openssl。
libsodium是对NaCL的封装,NaCL大有来头,作者 DJB 是密码学领域的权威人物,chacha20,Curve25519 的作者 。
没有历史包袱的项目,强烈建议使用 libsodium/NaCL。
这篇文章介绍了NaCL和openssl相比的各方面改进
http://cr.yp.to/highspeed/coo...
https://cryptojedi.org/peter/...
http://nacl.cr.yp.to/
7. Tox.im
一款实用NaCL的端到端加密im
https://github.com/irungentoo...
8. CurveCP
http://curvecp.org/security.html
9. tcpcrypt
http://tcpcrypt.org/
10.noise
https://github.com/trevp/nois...
11.tcpcrypt
http://tcpcrypt.org/
12. netflix MSL
http://techblog.netflix.com/2...
http://www.infoq.com/cn/news/...
13.Amazon KMS 密钥管理服务 白皮书
https://d0.awsstatic.com/whit...
值得注意和借鉴的点:
- 对称加密算法选择了 AES-GCM-256
- 数字签名有2种:ECDSA,RSA,
- ECDSA 的曲线选择了 secp384r1 (P384),hash 算法选择了 SHA384
- RSA 选择2048位,签名体制选择 RSASSA-PSS,hash 算法选择了 SHA256
- 密钥协商,使用ECDH,选择曲线 secp384r1 (P384),有2种用法
- one-pass ECDH.
- ECDHE
- 电子信封加密,KMS内置了电子信封。
电子信封就是,你预先知道对方的长期公钥,你有一个消息要发送给对方,所以你生成一个随机的msgKey,然后 ciphertext = Encrypt(msgKey, message), 并且用对方的公钥加密 msgKey: encKey = Encrypt(k, msgKey), 最后把(encKey, ciphertext) 发给对方,这样,只有公钥对应私钥的拥有者才能打开信封。典型应用比如 OpenPGP。
发起方有一对长期使用的签名密钥对,发起方生成一对临时的 ECDH 密钥,用自己的长期签名密钥签署 临时ECDH公钥。对端有一对长期 ECDH 密钥,收到发起方发来的 ECDH 公钥后,验证签名,并且用自己的长期ECDH私钥和收到的公钥协商出共享密钥。
整个过程中,只是用了一对临时ECDH密钥,2对长期密钥。
ECDHE就是比较典型的ECDHE了,和TLS用法一样:双方都持有一对长期使用的签名密钥对,并拥有对方的签名公钥,然后分别生成一对临时ECDH密钥,用自己的签名私钥签署ECDH公钥,把得出的签名和ECDH公钥发给对方,
双方收到对方的ECDH公钥后,验证签名,通过后用对方的ECDH公钥和自己的ECDH私钥协商出共享密钥。DONE。
白皮书中还举了几个例子.
? 本文转自微信后台团队,如有侵犯,请联系我们立即删除
OpenIMgithub开源地址:
https://github.com/OpenIMSDK/...
OpenIM官网 : https://www.rentsoft.cn
OpenIM官方论坛:https://forum.rentsoft.cn/
更多技术文章:
开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构
https://forum.rentsoft.cn/thr...
【OpenIM原创】简单轻松入门 一文讲解WebRTC实现1对1音视频通信原理
https://forum.rentsoft.cn/thr...
【OpenIM原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型
https://forum.rentsoft.cn/thr...
推荐阅读
- 如何寻找情感问答App的分析切入点
- D13|D13 张贇 Banner分析
- 自媒体形势分析
- 2020-12(完成事项)
- Android事件传递源码分析
- Python数据分析(一)(Matplotlib使用)
- 泽宇读书会——如何阅读一本书笔记
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- ffmpeg源码分析01(结构体)
- 关于两种潜能生的性格分析