# 18、等保2.0___安全计算环境之数据完整性、保密性测评

LLMS index: [llms.txt](/wikis/llms.txt)

---

#   
一、定义
### 1.1完整性
通俗的来说就是数据不被篡改和非授权访问。目前完整性主要是通过哈希算法来实现。  
国密算法中，能够提供数据完整性的算法主要是：SM3。国际算法中，能够提供数据完整性的算法主要是：MD05、SHA256、SHA512。

### **1.2保密性**
通俗的来说就是数据不能是明文，目前保密性主要是通过加密算法来实现。  
国密算法中，能够提供数据保密性的算法主要是：SM1和SM2，少数使用祖冲之，无线局域网中使用SM4。国际算法中，能够提供数据保密性的算法主要是：DES、3DES、RSA、AES、ECC等。

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

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

先一个个来看：

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

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

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

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个值，其中默认值是协商。

![](/wikis/_resources/18%E3%80%81%E7%AD%89%E4%BF%9D2.0___%E5%AE%89%E5%85%A8%E8%AE%A1%E7%AE%97%E7%8E%AF%E5%A2%83%E4%B9%8B%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7%E3%80%81%E4%BF%9D%E5%AF%86%E6%80%A7%E6%B5%8B%E8%AF%84/89e51d55d4179062c190f8ba6e574951_MD5.jpg)

如下图所示:

![](/wikis/_resources/18%E3%80%81%E7%AD%89%E4%BF%9D2.0___%E5%AE%89%E5%85%A8%E8%AE%A1%E7%AE%97%E7%8E%AF%E5%A2%83%E4%B9%8B%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7%E3%80%81%E4%BF%9D%E5%AF%86%E6%80%A7%E6%B5%8B%E8%AF%84/e62e11692f8232fe33d64712d6d95bfc_MD5.jpg)

![](/wikis/_resources/18%E3%80%81%E7%AD%89%E4%BF%9D2.0___%E5%AE%89%E5%85%A8%E8%AE%A1%E7%AE%97%E7%8E%AF%E5%A2%83%E4%B9%8B%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7%E3%80%81%E4%BF%9D%E5%AF%86%E6%80%A7%E6%B5%8B%E8%AF%84/3a629e2b01358a327c56773a6ba69876_MD5.jpg)

![](/wikis/_resources/18%E3%80%81%E7%AD%89%E4%BF%9D2.0___%E5%AE%89%E5%85%A8%E8%AE%A1%E7%AE%97%E7%8E%AF%E5%A2%83%E4%B9%8B%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7%E3%80%81%E4%BF%9D%E5%AF%86%E6%80%A7%E6%B5%8B%E8%AF%84/465f7f9075c1b78b3545919de909893b_MD5.jpg)

  


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


![](/wikis/_resources/18%E3%80%81%E7%AD%89%E4%BF%9D2.0___%E5%AE%89%E5%85%A8%E8%AE%A1%E7%AE%97%E7%8E%AF%E5%A2%83%E4%B9%8B%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7%E3%80%81%E4%BF%9D%E5%AF%86%E6%80%A7%E6%B5%8B%E8%AF%84/3c4bee6d2b7f5ead0ae473b2472108ba_MD5.jpg)

![](/wikis/_resources/18%E3%80%81%E7%AD%89%E4%BF%9D2.0___%E5%AE%89%E5%85%A8%E8%AE%A1%E7%AE%97%E7%8E%AF%E5%A2%83%E4%B9%8B%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7%E3%80%81%E4%BF%9D%E5%AF%86%E6%80%A7%E6%B5%8B%E8%AF%84/92854caa0f1b977c125c21f07899de9b_MD5.jpg)

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

![](/wikis/_resources/18%E3%80%81%E7%AD%89%E4%BF%9D2.0___%E5%AE%89%E5%85%A8%E8%AE%A1%E7%AE%97%E7%8E%AF%E5%A2%83%E4%B9%8B%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7%E3%80%81%E4%BF%9D%E5%AF%86%E6%80%A7%E6%B5%8B%E8%AF%84/04f1184de0569f4a25ed3213aea8c74b_MD5.jpg)

  


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

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



## **五、**数据传输和存储完整性、数据传输和存储保密性算法分析
## 1）数据存储完整性算法是用于验证和维护数据在存储过程中的完整性的技术。以下是一些常见的数据存储完整性算法：
1. 校验和（Checksum）：校验和是一种简单的完整性算法，通过对数据进行算术运算生成一个固定长度的校验值。接收方可以在接收数据后重新计算校验和，并与发送方的校验和进行比较，以验证数据的完整性。
2. 哈希函数（Hash Function）：哈希函数将任意长度的数据映射为固定长度的哈希值。哈希值是唯一的，即使输入数据发生微小的变化，哈希值也会发生很大的变化。接收方可以使用相同的哈希函数对接收到的数据进行计算，并与发送方的哈希值进行比较，以验证数据的完整性。
3. 循环冗余校验（CRC）：CRC是一种通过多项式除法来计算校验值的算法。发送方将数据和计算得到的校验值一起发送，接收方可以通过使用相同的多项式除法算法对接收到的数据进行计算，并将计算得到的校验值与发送方的校验值进行比较，以验证数据的完整性。
4. 数字签名（Digital Signature）：数字签名使用公钥密码体系，结合哈希函数和非对称密钥算法来实现数据的完整性和认证。发送方使用私钥对数据进行签名，接收方使用发送方的公钥对签名进行验证，从而确保数据的完整性和发送方的身份。

## 2）数据传输完整性算法是用于验证和维护数据在传输过程中的完整性的技术。以下是一些常见的数据传输完整性算法：
1. 循环冗余校验（CRC）：CRC算法也可以用于数据传输的完整性验证。发送方在数据中添加一个CRC校验值，接收方收到数据后使用相同的算法计算CRC校验值，并将计算得到的值与发送方的校验值进行比较，以验证数据的完整性。
2. 哈希函数（Hash Function）：哈希函数可以用于数据传输完整性的验证。发送方使用哈希函数对数据进行计算，生成一个固定长度的哈希值，并将该哈希值发送给接收方。接收方在接收到数据后使用相同的哈希函数计算哈希值，并将计算得到的哈希值与发送方的哈希值进行比较，以验证数据的完整性。
3. 消息认证码（Message Authentication Code，MAC）：MAC是一种使用共享密钥的算法，用于验证数据传输的完整性和认证。发送方使用密钥对数据进行加密生成MAC值，并将MAC值与数据一起发送给接收方。接收方使用相同的密钥对接收到的数据进行加密，并将计算得到的MAC值与发送方的MAC值进行比较，以验证数据的完整性和发送方的身份。
4. 数字签名（Digital Signature）：数字签名也可以用于数据传输的完整性验证。发送方使用私钥对数据进行签名，将签名和数据一起发送给接收方。接收方使用发送方的公钥对签名进行验证，从而验证数据的完整性和发送方的身份。

## 3）数据传输保密性算法是用于在数据传输过程中保护数据机密性的技术。以下是一些常见的数据传输保密性算法：
1. 对称加密算法：对称加密算法使用相同的密钥对数据进行加密和解密。常见的对称加密算法包括AES（高级加密标准）、DES（数据加密标准）和3DES（三重数据加密算法）等。发送方使用密钥对数据进行加密，接收方使用相同的密钥进行解密，以保护数据的机密性。
2. 非对称加密算法：非对称加密算法使用一对密钥，包括公钥和私钥。发送方使用接收方的公钥对数据进行加密，接收方使用自己的私钥进行解密。常见的非对称加密算法包括RSA（Rivest-Shamir-Adleman）和ECC（椭圆曲线加密算法）等。非对称加密算法通常用于密钥交换和数字签名。
3. 混合加密算法：混合加密算法结合了对称加密算法和非对称加密算法的优势。发送方使用非对称加密算法对对称密钥进行加密，并将加密后的对称密钥与数据一起发送给接收方。接收方使用私钥解密对称密钥，然后使用对称密钥对数据进行加密和解密。这种方法同时提供了数据的机密性和安全密钥的交换。
4. VPN（Virtual Private Network）：VPN是一种建立安全通信通道的技术，通过使用加密协议和隧道技术，将数据在传输过程中进行加密和解密，以保护数据的机密性。常见的VPN协议包括IPSec（Internet Protocol Security）和SSL/TLS（Secure Socket Layer/Transport Layer Security）等。

## 4）数据存储保密性算法是用于在数据存储过程中保护数据机密性的技术。以下是一些常见的数据存储保密性算法：
1. 对称加密算法：对称加密算法可以用于在数据存储时对数据进行加密。常见的对称加密算法包括AES（高级加密标准）、DES（数据加密标准）和3DES（三重数据加密算法）等。使用对称加密算法，数据在存储之前进行加密，存储在安全的存储介质上，只有授权的用户拥有解密密钥才能解密数据。
2. 文件级加密：文件级加密是一种将整个文件进行加密的方法。文件级加密可以应用于单个文件或整个存储设备上的文件。在文件级加密中，文件在存储时进行加密，并且只有在解密密钥的授权下才能访问和查看文件内容。
3. 数据库加密：数据库加密是一种在数据库存储过程中对数据进行加密的方法。数据库加密可以通过对整个数据库进行加密，或者对特定字段进行加密。这可以确保即使数据库被未经授权的访问或泄露，数据仍然是加密的。
4. 分区加密：分区加密是一种将存储设备分成多个加密区域的方法。每个区域都有自己的加密密钥，只有在解密密钥的授权下才能访问该区域的数据。分区加密可以应用于硬盘驱动器、闪存设备等存储介质。
5. 去标识化（De-identification）：去标识化是一种将敏感数据中的个人标识信息删除或替换为伪造的值的方法。这样可以保护数据的机密性，同时保留数据的可用性和有效性。去标识化通常应用于需要进行数据分析或共享的场景。

## 5）密码存储保密性算法是用于在存储密码时保护密码的机密性的技术。以下是一些常见的密码存储保密性算法：
1. 哈希函数加盐存储：哈希函数是将密码转换为固定长度的哈希值的算法。为了增加密码的安全性，通常会将密码与一个随机生成的盐值进行组合，再通过哈希函数进行计算。将计算得到的哈希值和盐值一起存储，以保护密码的机密性。
2. 密码加密存储：密码加密存储是将密码使用对称加密算法进行加密后存储的方法。只有具有解密密钥的授权用户才能解密密码。常见的对称加密算法如AES（高级加密标准）可以应用于密码加密存储。
3. 彩虹表：彩虹表是一种用于破解密码存储的密码破解技术。为了防止彩虹表攻击，可以在存储密码时使用盐值并应用多次哈希函数计算。通过增加计算复杂度，可以防止彩虹表攻击。
4. 密码哈希函数（Password Hashing Function）：密码哈希函数是专门为密码存储而设计的哈希函数。与一般的哈希函数不同，密码哈希函数通常使用特定的算法和技术，如迭代哈希、密钥扩展和盐值等，以提高密码的安全性。
5. 双向加密存储：双向加密存储是一种将密码使用非对称加密算法进行加密后存储的方法。发送方使用接收方的公钥加密密码并存储，接收方使用私钥解密密码进行验证。这种方法同时提供了密码的机密性和数据的完整性。
