iOS开发iOS进阶首页投稿(暂停使用,暂停投稿)

WWDC 2017:Your Apps and Evolving

2017-09-27  本文已影响761人  Joy___

本文首发于《iOS 成长之路》,购买可查看更多 WWDC 系列文章,转载请联系作者。

现在,我们越来越关注用户的隐私和信息安全,但是随着时间的推移,计算机变得越来越高效,那些年代久远的网络协议和加密算法,在新的硬件和攻击方式下,变得岌岌可危。

针对网络安全,我们要怎样做?

常见的网络攻击

这里总结了一些常见的网络攻击,它们针对的对象有所不同,有的是想窃取数据,有的是想伪装身份,它们在图中以颜色进行区分。我将会通过一些实践来告诉你,如何去避免这些攻击,具体来说就是关于加密(encryption)、密码散列(cryptographic hashes)、公共密钥(public keys)、网络协议(protocols)、证书吊销检查(revocation)等内容的一些实践。

TLS 协议

现在大多数的 App 网络都已经切换到 HTTPS 了,HTTPS 其实就是在 HTTP 下加入了 TLS 层,TLS 是保证网络安全的基础,它可以对传输内容加密、进行身份验证、避免传输内容被篡改。

TLS 协议是由 TLS 握手协议和 TLS 记录协议两部分组成,TLS 记录协议负责对传输内容加密,TLS 握手协议又分为四个子协议,负责协商加密算法、共享密钥、传达警告等工作。

TLS 协议中涉及到多种不同的密码技术,比如在握手协议中使用到了非对称加密、散列函数、数字签名技术,在 TLS 记录协议中使用到了对称加密、散列函数等技术。具体的这些技术,在下面会详细介绍,并且说明哪些技术已经过时了,需要更换更安全的加密算法来保证安全。

密码技术介绍

本文中,涉及到一些加密算法,根据密钥的使用方式,可以分为对称加密和非对称加密:

除了上述两种加密算法,还有一些用来确保信息完整性和身份认证的技术:

加密

加密是我们众所周知的用来防止信息被窃听的手段,但是一些加密算法已经非常不安全,很容易被攻击者攻破。特别是 RC4, 目前可以在短短三天之内就可以攻破它。而且,Triple-DES 和 AES 加密算法在 BEAST 和 Lucky 13 这些攻击面前,也无法保证安全性。苹果正在计划在所有平台上弃用 Triple-DES 和 RC4,同时也不推荐使用 AES-CBC 算法,但是还没给出具体的日期。Apple 推荐我们使用 AES-GCM 或者 ChaCha20/Poly1305 算法。

密码散列

密码散列会有一个输入值和一个输出值,输入的称为消息,输出的称为散列值。密码散列会根据输入的内容计算一个散列值出来,这个散列值可以用来判断信息是否完整。但是其中一些密码散列已经不安全了,黑客可以通过碰撞攻击的方式来篡改数据。碰撞攻击是通过大量的尝试,来找到不同的输入值,但是输出值是一样的情况,进而篡改数据。因为篡改后的散列值并没有发生变化,所以你无法判断数据是否被修改过。

MD-5 和 SHA-1 已经不安全了,Apple 已经在前几年在移除了 MD-5 算法的签名证书。SHA-1 在今年的早些时候,也遭遇了攻击。所以,Apple 将也不再信任 SHA-1 算法的签名证书。为了保证绝对的安全,开发者应该使用 SHA-2 算法。

公钥密码

一般情况下,经过公钥加密的内容,只能通过私钥打开加密内容。但是,768 位的 RSA 在2009 年被攻破,Apple 在 2016 年春天已经移除了对 1024 位以下 RSA 签名的证书的支持。由此来看,对 1024 位 RSA 加密的攻击也快要来到了,所以 Apple 也宣布将不再对 2048 位以下 RSA 签名的证书信任。你应该使用 2048 位以上的 RSA 加密,或者其他 Apple 平台信任的椭圆曲线密码。

协议

如果开发者正在使用HTTP协议,那就代表着你传输的内容,任何监听者都可以获取到。同时,一些老化的 TLS 版本,也是不安全的,比如 SSL 3.0、TLS1.1 和 TLS1.0。应该避免使用这些协议,开发者应该使用基于 TLS1.2 的 HTTPS 协议。

同时,Apple 宣布发布 TLS 1.3 Beta 版,后续会详细讲。

吊销

当私钥泄漏或者或者其他一些情况出现时,我们可能需要吊销证书。客户端在收到证书的时候,需要确认证书的吊销情况。

Apple平台默认是不进行吊销检查的。目前存在的吊销机制有以下几种:

尽管 Apple 鼓励开发者在服务端采用 OCSP Stapling 这种方式,但是普及程度远远不够。Apple 同时宣布加强在所有平台的证书吊销验证。Apple 会从 Certificate Transparency log 中获取信赖的证书列表,开发者和CA都可以向 Certificate Transparency log 提交证书,提交的证书会受到监控和审计。然后 Apple 会从证书颁发机构查询证书的吊销状态,把所有吊销证书的信息捆绑到一起,每隔一段时间自动下发给客户端设备,这样客户端就可以周期性的验证证书的吊销状态了。

在进行 TLS 会话时,如果发现证书在吊销列表内,那么客户端则执行一次 OCSP 检查,去校验证书是否真的已经被吊销。如果证书没有在吊销列表中,则不进行 OCSP 检查。这样的话,客户端一般就不需要向 CA 发送额外的网络请求,避免了性能问题。

回顾

Apple 关于加密、散列函数、网络协议、证书吊销校验和公钥密码方面的修改如图所示:

新的证书报错界面

在 Safari 中重新设计了新的证书报错界面,如果你用了不符合要求的证书,那么将会看到如下界面。

可以通过证书查看器,进一步查看证书错误的详细情况。

ATS 与 TLS 1.3

ATS 在 iOS 9 的时候推出,是为了保证开发者使用加密的网络来传输数据。但是 Apple 发现全部转为 ATS 的过渡期要比预期长,所以 Apple 扩大了对 ATS 的豁免的支持。

去年 Apple 发现目前的 ATS 豁免并不能满足所有开发者的需求,所以就开放了对AVFoundation、WebView 和 Webkit 的单独豁免支持。豁免可以限制在一个单一域名内和整个 App 内,同时也支持对本地网络(原始 IP 地址和不合格的主机名)的豁免。

虽然目前扩大了对豁免的支持,但是 Apple 依然相信使用 ATS 才是正确的选择,依然会积极推荐 ATS 的使用。

TLS 发展历程

TLS 的前身其实就是 SSL(Secure Sockets Layer),Netscape 是最早发布 SSL 的公司,后续由于互联网标准化组织的接手,将 SSL 标准化,并在 1999 年将其称为 TLS(Transport Layer Security)。后续又在 2006 年 4 月对 TLS 1.0 进行了更新,这个版本与 1.0 差异不大。2008 年发布了 TLS 1.2,也就是目前 Apple 推荐在 HTTPS 网络上使用的协议。

TLS 1.3 是正在制定的 TLS 新标准,目前还是草案版本。

TLS 1.3

在 WWDC 上 Apple 阐述了 TLS 1.3 相比 TLS 1.2 的一些改变:

关于第四点应该是我们最关心的优化点,TLS 握手从原来的四次握手变成了两次握手,也就是说减少了一个 RTT,TLS 1.3 的密钥交换和加密算法的协商都放在了一块。由于这套更高效的握手方法,Apple 宣布大概可以减少三分之一的握手延迟。

虽然正式的版本还没发布,但是现在你可以对 TSL 1.3 beta 版本进行测试了,你可以在 https://developer.apple.com/go/?id=tls13-mobile-profile 下载安装一个配置文件在手机上,同时手机系统升级到 iOS 11 就可以体验最新的 TLS 协议了。同时,在 macOS High Sierra 中,可以通过以下终端命令启用 TLS 1.3。

defaults write /Library/Preferences/com.apple.networkd tcp_connect_enable_tls13 1

参考

上一篇 下一篇

猜你喜欢

热点阅读