等保2.0系列安全计算环境之数据完整性、保密性测评

一、前言

等级测评中,相信很多测评师在内的人都不是很了解数据的完整性和数据的保密性,因此本文将结合商密测评角度浅淡数据的完整性和保密性的理解和测评。如有错误,欢迎指正。

二、定义

2.1完整性

通俗的来说就是数据不被篡改和非授权访问。目前完整性主要是通过哈希算法来实现。

国密算法中,能够提供数据完整性的算法主要是:SM3。

国际算法中,能够提供数据完整性的算法主要是:MD5、SHA256、SHA512。

2.2保密性

通俗的来说就是数据不能是明文,目前保密性主要是通过加密算法来实现。

国密算法中,能够提供数据保密性的算法主要是:SM1和SM2,少数使用祖冲之,无线局域网中使用SM4。

国际算法中,能够提供数据保密性的算法主要是:DES、3DES、RSA、AES、ECC等。

三、数据的完整性测评

a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;

测评理解:重点有3个,1校验技术或密码技术;2传输过程中的完整性;3包括不仅限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。

先一个个来看,1校验技术其实很好理解,就是类似TCP协议的CRC校验码或者海明校验码等,这是协议层面的,如果按照这要求利街,那么这条指标基本全部符合,所以目前测评难点不是在这里,而是在密码技术如何实现完整性,这里是一个容易弄混的的知识点,可能大部分人有疑惑,密码技术不是i用来加密的吗,怎么能用来保证完整性呢?其实在商用密码中,密码算法分为加密算法和哈希算法两大类,其中哈希算法常见是MD5和SHA系列,哈希算法也属于密码算法,所以通过密码技术完全可以实现完整性校验,

2传输过程中的完整性,传输过程中的完整性主要通过协议来实现,比如TLS、SSH协议,通过MAC(消息校验码)来实现整个数据报文的完整性和加密性,无论报文本身内容是否进行加密和哈希校验,这个应该比较好理解把,因此,测评中,如果采用TLS协议、SSH协议,默认其实应该是符合传输过程中的完整性要求的。

3重要数据的理解,主要数据包括鉴别数据、审计数据、业务数据等。

b)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。

操作系统的存储过程完整性。操作系统鉴别数据主要就是用户名、口令、组ID等。其中WindowsNT中默认采用SAM文件保存鉴别信息,其中口令字段采用SHA哈希算法进行加密。而在Linux中,口令保存shadow文件中,口令也是采用SHA哈希算法进行加密,主要有三类:$1表示MD5 ; $6 表示SHA-512 ; $5 SHA-256。可能在这里大家有疑惑,为什么不采用加密算法对口令加密,而采用哈希算法进行加密?个人觉得原因主要有2个:1是加密算法分为对称加密算法和非对称加密算法,无论哪种,都需要安全的保存密钥,这就导致鸡生蛋和蛋生鸡的问题,2加密算法时间长,哈希算法时间较短。因此,操作系统的数据传输过程的完整性要求中默认是符合的。

至于业务数据、审计数据存储过程中的完整性,主要是核查数据库表(业务数据、审计数据)是否存在哈希字段,在业务数据或审计数据中,数据在前端一般通过json或xml格式进行传输,那么数据的完整性应该是核查相关数据库表字段中是否包含完整性校验字段。目前测评项目中极为少见,一般均为不符合,印象中好像只有个一个系统实现存储过程中的完整性校验。但是如果通过TLS、SSH等协议,可以通过传输过程中的完整性在一定程度上弥补存储过程中的完整性。

其实在开发过程中,技术方面进行哈希校验并不难,因为常见开发语言均内置哈希函数,比如php的hash()、java的hashcode()等,但是问题重点在主流开发语言目前少于内置SM3等国密哈希算法,随着商密应用的测评,日后要求支持国密的哈希算法估计会成为测评要求判定之一,当然商密局官网有现成的php、java、c++源代码库下载,可以用来在开发项目中直接调用。

四、数据的保密性测评

a)应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等;

传输过程中的保密性测评中,这个比较简单,主要核查是否采用TLS、SSH等加密协议,其中常见的问题主要集中在以下两个地方:

1)Windows远程桌面RDP是否符合传输过程中的保密性?笔者查过相关资料,Windows的RDP安全主要有安全层和加密级别两个参数,其中安全层有RDP安全层、协商和TLS1.0共3个值,其中默认值是协商,

安全层 值

描述

协商

强制使用客户端支持的最安全的方法。如果支持传输层安全(TLS)版本1.0 ,则它将用于验证RD会话主机服务器如果不支持TLS ,则使用本地远程桌面协议(RDP)加密来保证通信安全,但不验证RD会话主机服务器。

RDP安全层

使用本地RDP加密来保证客户端和RD会话主机服务器之间的通信安全。如果选择此设置.则不验证RD会话主机服务器。

SSL(TLS1.0)

SSL方法要求使用TLS 1.0验证RD会话:主机服务器。如果不支持TLS ,则连接将失败。

如下图所示:

加密级别也主要有4个值可选,分别是低、客户端兼容、高和符合FIPS标准,区别主要是加密算法,

加密级别值

描述

此级别使用 56 位加密对从客户端向服务器发送的数据进行加密。不对从服务器向客户端发送的数据进行加密。

兼容

这是默认设置,此级别以客户端支持的最大密钥强度对在客户端与服务器之间发送的数据进行加密。终端服务器在包含混合客户端或旧版客户端的环境中运行时使用此级别。

此级别使用 128 位加密对从客户端向服务器发送的数据以及从服务器向客户端发送的数据进行加密。终端服务器在只包含 128 位客户端(例如远程桌面连接客户端)的环境中运行时使用此级别。不支持此加密级别的客户端无法连接。

符合FIPS标准

此级别使用联邦信息处理标准 (FIPS) 140-1 经过验证的加密方法,对从客户端向服务器发送的数据以及从服务器向客户端发送的数据进行加密和解密。不支持此加密级别的客户端无法连接。

由此可知,其实在WindowsServer2008及以上系统,默认RDP就支持加密,差别就是加密长度和加密算法不同,至于采用何种算法,网上也没有统一的答案,抓包也没有发现,猜测可能是RC-4,如果是Windows10客户端连接WindowsServer2008,默认配置下使用的是TLSV1.0协议进行加密,如下图:

b)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。

存储过程中的保密性这个就比较简单了,主要是核查相关账户的口令、业务数据、审计数据是否加密存储,无论使用是何种加密算法,只要非明文,这条就符合,实践中,操作系统鉴别数据全部符合,默认都是使用哈希算法,业务系统的鉴别数据,这个一般核查下数据库表,部分系统可能仍然是明文存储,至于业务数据、审计数据之类基本实践中未见过使用加密存储,一来没有必要,二来会影响性能,所以一般不符合。d但是如果使用数据库加密功能,默认该项为符合,数据库加密 主要分库内加密和库外加密,库内加密主要是调用的数据库本身的加密功能,比如MSSQLSERVER的TDE功能、Oracle的DBMS_CRYPTO,有兴趣的可以自己百度,库外加密主要通过第三方厂家的数据库加密功能,为了避免推销,这里就不举例了。

精彩推荐