#每日三件事,第786天#
《网络安全等级保护基本要求》中有关数据保密性的要求有两项,其中一项为:应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。
要确保数据在传输过程中的保密性,首先要检查系统设计文档,鉴别数据、重要业务数据和重要个人信息是否在传输过程中采用密码技术保证了保密性;其次要通过抓包的方式查看这些信息在传输过程中是否被加密。
《密码法》施行以来,商用密码的应用迎来了一片新天地,法律、行政法规和国家有关规定要求使用商用密码进行保护的关键信息基础设施,其运营者应当使用商用密码进行保护。其实,就算非关键信息基础设施也应当使用商用密码对数据进行保护。《网络安全等级保护基本要求》中关于数据保密性的这个要求,就可以考虑使用商用密码。
TLS是一种密码学协议,用于保证两个团体之间的会话安全。目前最新的协议版本是TLS1.3,在RFC8446等对TLS1.3进行了描述。TLS和SSL协议总是被大家认为是同一回事儿,其实差异较小,这样说也不算有多大的问题。
想要核查数据在传输过程中到底有没有被加密,就得把传输过程中的各种数据包抓下来进行分析。宏观上,TLS以记录协议(record protocol)实现。它负责在传输连接上交换的所有底层消息,并可以配置加密。每一条TLS记录以一个短标头开始。标头包含记录内容的类型(或子协议)、协议版本和长度。
TLS协议中的握手时最精密复杂的部分,在这个过程中,通信双方协商连接参数,并且完成身份验证。根据使用的功能的不同,整个过程通常需要交换6~10条消息。
客户端和服务器完成一次完整的握手流程来协商TLS会话,将进行四个主要步骤:
1)交换各自支持的功能,对需要的连接参数达成一致;
2)验证出示的证书,或使用其他方式进行身份验证;
3)对将用于保护会话的共享主密钥达成一致;
4)验证握手消息并未被第三方团体修改。
![](https://img.haomeiwen.com/i7092611/0b8e7ea2107ce284.png)
如果对一个完整的TLS握手进行抓包的话,就会看到ClientHello和ServerHello数据包。
![](https://img.haomeiwen.com/i7092611/aba6ffe8f3a1a32e.png)
![](https://img.haomeiwen.com/i7092611/06c8e26a4e730400.png)
ServerHello数据包里面就包括了双方协商好的密码套件:
![](https://img.haomeiwen.com/i7092611/25f3bc19368b30e7.png)
接下来就可以查看数据是否被加密了:
![](https://img.haomeiwen.com/i7092611/1126824a886f029e.png)
从“Encrypted Application Data:2751……”就可以看出来,数据时以密文的方式传输的。
不过,需要说的是,我没有把抓到的所有包都贴出来。这些数据应该是客户端和服务器之间传输的信息,如果是东边抓一个西边抓一个包的话,有可能不是同一个数据流。那当然就不能说吗任何问题了,更不能说明数据在传输过程中的保密性。
网友评论