网络安全基础技术扫盲篇 — 名词解释之完整性

admin 2023年12月14日11:55:15评论9 views字数 6144阅读20分28秒阅读模式
知识宝库在此藏,一键关注获宝藏
完整性
在网络安全中,完整性是指确保数据在传输、存储、处理等过程中不被未经授权的修改、删除或损坏,保持数据的完整和可信性。完整性是信息安全的一项重要特性,确保数据的准确性和可靠性,防止数据被篡改或破坏。
完整性常见实现方式
1. 哈希函数(Hash Function):使用哈希函数对数据进行计算,生成固定长度的哈希值。在传输过程中,接收方可以再次计算接收到的数据的哈希值,并与发送方传输的哈希值进行比对,如果一致则说明数据没有被篡改,保证了数据的完整性。
2. 数字签名(Digital Signature):数字签名使用公钥密码学算法来对数据进行加密和签名,确保数据的完整性和身份认证。发送方使用私钥生成数字签名,附加在数据中,接收方使用发送方的公钥验证数字签名的正确性,如果验证通过,则说明数据没有被篡改。
网络安全基础技术扫盲篇 — 名词解释之完整性
数据传输过程中的完整性

常见配置可有以下几种方式:

1. 数据传输协议配置

采用SSL(Secure Sockets Layer)或其继任者TLS(Transport Layer Security)协议是一个常见且有效的方式来保证数据传输过程中的完整性。SSL/TLS协议使用加密和身份验证机制来确保数据的安全和完整性。

https建立安全连接的过程(SSL原理)原文:

https://blog.csdn.net/xiaopang_yan/article/details/78709574

step1“客户”向服务端发送一个通信请求

“客户”->“服务器” :你好

step2“服务器”向客户发送自己的数字证书。证书中有一个公钥用来加密信息,私钥由“服务器”持有

“服务器”->“客户”:你好,我是服务器,这是我的数字证书

step3:“客户”收到“服务器”的证书后,它会去验证这个数字证书到底是不是“服务器的”,数字证书有没有什么问题,数字证书如果检查没有问题,就说明数字证书中的公钥确实是“服务器”的。检查数字证书后,“客户”会发送一个随机的字符串给“服务器”用私钥去加密,服务器把加密的结果返回给“客户”,“客户”用公钥解密这个返回结果,如果解密结果与之前生成的随机字符串一致,那说明对方确实是私钥的持有者,或者说对方确实是“服务器”。

“客户”->“服务器”:向我证明你就是服务器,这是一个随机字符串。

“服务器”->“客户”:{一个随机字符串}[私钥|RSA]

“客户”用公钥解密随机字符串

step4:验证“服务器”的身份后,“客户”生成一个对称加密算法和密钥,用于后面通信的加密和解密。这个堆成加密算法和密钥,“客户”会用公钥加密后发给“服务器”,别人截获了也没用,因为只有“服务器”手中有可以解密的私钥。这样,后面“服务器”和“客户”就都可以用对称加密算法来加密和解密通信内容了。

“客户”->“服务器”:{对称加密算法和密钥}[公钥|RSA]

“服务器”->“客户”:{OK,已经收到你发来的对称加密算法和密钥!有什么可以帮到你的?}[密钥|对称加密算法]

“客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[密钥|对称加密算法]

“服务器”->“客户”:{你好,你的余额是100元}[密钥|对称加密算法]

……   //继续其他通信

问题:

上面的过程已经十分接近HTTPS的真实通信过程了,完全可以按照这个过程去理解HTTPS的工作原理,为了方便理解,上面有些细节没有说到。
情况1:
在检查完证书后,“客户”发送一个随机的字符串给“服务器”去用私钥加密,以判断对方是否真的持有私钥。但是有一个问题,“黑客”也可以发送一个字符串给“服务器”去加密并且得到加密后的内容,这样对于“服务器”来说是不安全的,因为黑客可以发送一些简单的有规律的字符串给“服务器”加密,从而寻找加密的规律,有可能威胁到私钥的安全。所以,“服务器”随随便便用私钥去加密一个来路不明的字符串并把结果发送给对方是不安全的。
解决方案:
每次收到“客户”发来的加密的字符串时,“服务器”并不是真正的加密这个字符串本身,而是把字符串进行一个hash计算,加密这个字符串的hash值(不加密原来的字符串)后发送给“客户”,“客户”收到后解密这个hash值并自己计算字符串的hash值然后进行对比是否一致。也就是说“服务器”不直接加密收到的字符串,而是加密这个字符串的hash值,这样就避免了加密那些有规律的字符串,从而降低被破解的几率。“客户”自己发送的字符串,因此它自己可以计算字符串的hash值,然后再把“服务器”发送过来加密的hash值和自己计算的进行对比,同样也能确定对方是否是“服务器”。
情况2:
在双方的通信过程中,“黑客”可以截获发送的加密了的内容,虽然他无法解密这个内容,但是他可以捣乱,例如把信息原封不动的发送多次,扰乱通信过程。
解决方案:
可以给通信的内容加上一个序号或者一个随机的值,如果“客户”或者“服务器”接收到的信息中有之前出现过的序号或者随机值,那么说明有人在通信过程中重发信息内容进行捣乱,双方会立刻停止通信。有人可能会问,如果有人一直这么捣乱怎么办?那不是无法通信了? 答案是的确是这样的,例如有人控制了你连接互联网的路由器,他的确可以针对你。但是一些重要的应用,例如军队或者政府的内部网络,它们都不使用我们平时使用的公网,因此一般人不会破坏到他们的通信。 
情况3:
在双方的通信过程中,“黑客”除了简单的重复发送截获的消息之外,还可以修改截获后的密文修改后再发送,因为修改的是密文,虽然不能完全控制消息解密后的内容,但是仍然会破坏解密后的密文。因此发送过程如果黑客对密文进行了修改,“客户”和“服务器”是无法判断密文是否被修改的。虽然不一定能达到目的,但是“黑客”可以一直这样碰碰运气。
解决方案:
在每次发送信息时,先对信息的内容进行一个hash计算得出一个hash值,将信息的内容和这个hash值一起加密后发送。接收方在收到后进行解密得到明文的内容和hash值,然后接收方再自己对收到信息内容做一次hash计算,与收到的hash值进行对比看是否匹配,如果匹配就说明信息在传输过程中没有被修改过。如果不匹配说明中途有人故意对加密数据进行了修改,立刻中断通话过程后做其它处理。

常见采用SSL的通信协议有以下几种:

HTTPS(HTTP Secure):HTTPS是HTTP协议的安全版本,通过使用SSL/TLS协议对HTTP通信进行加密和身份验证,保证数据在传输过程中的机密性和完整性。HTTPS通常用于安全的Web浏览器和服务器之间的通信,如网上银行、电子商务等。

SMTPS(SMTP Secure):SMTPS是SMTP协议的安全版本,通过使用SSL/TLS协议对电子邮件的传输进行加密和身份验证,防止邮件被窃听和篡改。SMTPS通常用于安全的电子邮件传输。

POP3S(POP3 Secure):POP3S是POP3协议的安全版本,通过使用SSL/TLS协议对电子邮件的接收进行加密和身份验证,确保邮件在传输过程中的安全性和完整性。POP3S通常用于安全的电子邮件接收。

FTPS(FTP Secure):FTPS是FTP协议的安全版本,通过使用SSL/TLS协议对文件传输进行加密和身份验证,确保文件在传输过程中的安全性和完整性。FTPS通常用于安全的文件传输。

 SSH(Secure Shell):SSH是一种通过加密和身份验证来保证安全通信的网络协议。它通过在不安全的网络上提供一个安全的通信渠道,防止数据被窃听、篡改和伪造。SSH协议可以使用公钥加密和对称密钥加密来保证数据的机密性,并通过MAC算法对数据的完整性进行校验。通过SSH协议,用户可以远程登录到其他计算机上,并进行安全的文件传输、命令执行等操作。SSH协议是一种常用的安全远程管理工具,被广泛应用于服务器管理、远程维护和安全通信等领域。

2. 使用哈希算法验证数据完整性

网络安全基础技术扫盲篇 — 名词解释之完整性

使用哈希函数(如MD5、SHA-256等)计算数据的哈希值,并将哈希值附加在数据上。在接收数据的一方,使用相同的哈希函数计算接收到的数据的哈希值,并与附加的哈希值进行比对,如果不一致则说明数据可能被篡改。示例:
假设我们要使用校验和验证机制来保证数据传输过程中的完整性,以及使用SHA-256哈希函数进行哈希值验证:
1)发送方操作配置:
   - 在发送方,假设我们有一个名为`test.txt`的文件需要传输。
   - 使用校验和工具(如md5sum on Linux系统)计算文件的校验和,生成一个校验和值。
   - 将校验和值附加在数据文件中。
   示例命令(在Linux环境下):
   md5sum test.txt

网络安全基础技术扫盲篇 — 名词解释之完整性

2)接收方操作配置:

   - 在接收方,接收到传输来的`test.txt`文件。

   - 使用校验和工具(CertUtil)计算接收到的文件的校验和。
   - 将计算得到的校验和值与附加在数据文件中的校验和值进行比对,如果一致,则数据的完整性得到保证;如果不一致,则可能发生数据篡改。
   示例命令(在Windows环境下):
   certutil -hashfile 文件路径 MD5
网络安全基础技术扫盲篇 — 名词解释之完整性
发现MD5一致,那么此时,我们修改test.txt文件,例如仅文末添加一个。
网络安全基础技术扫盲篇 — 名词解释之完整性

可以发现其MD5值产生了天翻地覆的变化

3)哈希值验证操作配置:

使用方法与上述一致,仅需要调整使用的哈希函数

网络安全基础技术扫盲篇 — 名词解释之完整性

网络安全基础技术扫盲篇 — 名词解释之完整性

3. 使用数字签名验证数据完整性

网络安全基础技术扫盲篇 — 名词解释之完整性

   - 发送方使用私钥生成数字签名,将签名附加在数据上。

   - 接收方使用发送方的公钥验证数字签名的正确性,并使用相应的算法对数据的完整性进行验证。

简单做个实验,首先我们生成两个公私钥文件
    openssl genpkey -algorithm RSA -out private.key     
   - 执行命令后,私钥文件private.key将被生成。
从私钥文件中导出公钥文件:
     openssl pkey -in private.key -pubout -out public.key
   - 执行命令后,公钥文件public.key将被生成。

网络安全基础技术扫盲篇 — 名词解释之完整性

接着我们生成数字签名:
使用私钥和相应的数字签名算法(如RSA、DSA等),对待签名文件进行签名。假设私钥文件为private.key,待签名文件为data.txt,签名结果为signature.txt
使用命令行工具(如OpenSSL)执行以下命令进行数字签名生成:
 openssl dgst -sign private.key -sha256 -out signature.txt data.txt
网络安全基础技术扫盲篇 — 名词解释之完整性

执行命令后,会使用私钥对data.txt文件进行数字签名,生成签名结果保存为signature.txt 文件,这个文件将用于验证文件完整性。

最后我们来验证文件完整性:
使用公钥和相同的数字签名算法(如RSA、DSA等),对待验证文件和相应的数字签名进行验证。
使用命令行工具(如OpenSSL)执行以下命令进行数字签名验证:
openssl dgst -verify public.key -sha256 -signature signature.txt data.txt

执行命令后,会使用公钥对signature.txt文件进行数字签名验证,如果验证通过,则表示文件的完整性得到了保证。

网络安全基础技术扫盲篇 — 名词解释之完整性
如果我们修改data.txt数据,例如和之前一样,给他加个.
网络安全基础技术扫盲篇 — 名词解释之完整性
此时文件的完整性就受到了破坏,提示验证失败。其实就是在数据传输过程中,通过将原来的文件进行签名,再与你接受到的文件进行签名比对,来确定完整性是否收到破坏。
存储程中的完整性

上面传输过程中的完整性就是确保你的数据在存储到你计算机上时,没有在传输过程中被改变,那么接下来就会有一个存储完整性的过程,例如哪天你可能一个误操作,不小心修改了文件中的一些内容,那么此时我们如何去发现这一系列的问题呢?

这里可以先看一下以前客户现场的一张截图,下面有期望版本与当前版本两列

网络安全基础技术扫盲篇 — 名词解释之完整性

判断存储数据是否被篡改,其实就是需要一个比对过程,一般采用哈希算法进行完整性比对。哈希值的特点就是原数据改变(即使在一串字符中加入了一个1),所计算出来的哈希值也会有天差地别。所以要求是要有比对的手段,来判断其是否具有存储完整性校验措施,而与数据存储采用的算法无关,比如鉴别数据采用MD5,但是没有比对过程,是与等保要求的完整性校验没有任何关系的

能力验证官方给的答案也是要求需要这类完整性校验工具去实现。

网络安全基础技术扫盲篇 — 名词解释之完整性
具体的可看等保2.0测评深入理解—Linux操作系统(十)与 2022能力验证—linux系统配置核查(四)中介绍了Linux系统中常用的两款完整性校验工具。

所以类比数据库,对于存储数据中的哈希值的完整性,算法本身并不能提供保护,无法验证哈希值的完整性或检测其是否被篡改。

网络安全基础技术扫盲篇 — 名词解释之完整性

假设上图的adminpass字段,我故意篡改了数据,此时你并不知道表内数据被人改了,同时应用系统死活登不上了,你还以为是自己密码输错了。
为了防止这种情况发生,在数据库中存储数据的同时,还存储与数据相关联的哈希值。使用哈希算法对原有的数据进行计算,并将计算后的哈希值与数据一起存储在数据库中,在获取数据时验证其完整性是否遭受到篡改。
假设有这么一张数据表,password 字段存放的是用户口令的MD5值,password_hash 字段存放的是password 字段的MD5值(用于做完整性校验)

网络安全基础技术扫盲篇 — 名词解释之完整性

正常情况下,我们使用下列语句进行查询,可以发是否存在篡改项
SELECT t1.* FROM users t1 INNER JOIN (SELECT password, password_hash FROM users WHERE password_hash <> MD5(password)) t2 ON t1.password = t2.password;
网络安全基础技术扫盲篇 — 名词解释之完整性
具体解释如下:
1)`SELECT t1.*`:这个语句表示我们要选择原始表的所有列。即查询结果将会返回被篡改的行的所有列数据。
2)`FROM 表名 t1`:这里的 `表名` 是你要查询的数据表的名称,`t1` 是此表的别名,用于在查询过程中引用这个表。
3)子查询部分 `(SELECT password, password_hash FROM 表名 WHERE password_hash <> MD5(password)) t2`:在这个子查询中,我们选择了表中的密码和密码哈希值列,并筛选出密码哈希值与通过MD5哈希算法计算得到的哈希值不匹配的行。通过将这个子查询的结果与原始表进行连接,我们可以找到被篡改密码的行。
4)`ON t1.password = t2.password`:这个条件指定了连接两个表的方式,通过比较两个表中的密码列来进行连接。只有当两个表中的密码匹配时,才会返回对应的行。

5)最终查询结果将会是原始表中密码哈希值与计算得到的MD5哈希值不匹配的行,即被篡改的行。

例如现在们在admin用户的password字段开头数字2改成3
网络安全基础技术扫盲篇 — 名词解释之完整性
此时再用该语句检查,就发现该行的完整性受到了破坏,我们就能发现哪行数据被篡改了
网络安全基础技术扫盲篇 — 名词解释之完整性

以上的完整性相关实验,仅用于帮助理解“完整性”概念,如果发现存在有问题的点,欢迎大家留言讨论。

原文始发于微信公众号(等保不好做啊):网络安全基础技术扫盲篇 — 名词解释之完整性

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月14日11:55:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   网络安全基础技术扫盲篇 — 名词解释之完整性https://cn-sec.com/archives/2297315.html

发表评论

匿名网友 填写信息