Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

[原]数据完整性

0
0

#简介

完整性用来确保信息没有被修改,也可以防止假冒的信息。

一个印刷在书面上的文件,要想通过修改其上面的文字或者数字来破坏其完整性是不容易的,你可以涂抹文件上面的文字,但可能很容易就被发现了。相对于现实世界而言,存储在计算机中的数字信息的完整性受到破坏的风险就大大增加了。一个存储在计算机中重要的文本文件,可能被其他人恶意修改了其中一个重要的数字而你没有发现就发出去了,甚至可能整个文件都给替换了而你没有再看一眼就发出去了,后果可想而知。在网络传输中,完整性面临的风险就更大,这种风险有两种,一种是恶意攻击,一种是偶尔的事故,恶意攻击者可以监听并截获你的信息包,然后修改或替换其中的信息,再发给接收方,这样能够不知不觉地达到其目的。网络是一个物理设备,虽然其出错的可能性极低,但还是有可能发生的,如果你在给某个商家转账的过程中其中的付款数字在网络传输时发生了错误而没有发现,后果是严重的。

目前完整性的解决方案主要是基于单向散列函数和加密算法。单向散列函数能够将一个大的文件映射成一段小的信息码并且不同文件散列成相同信息的概率极低。通常我们将会将原始信息使用单向散列函数处理得到一段信息码,然后将其加密,跟文件一起保存。如果有人更改了文件,那么当我们再次使用该文件时,先使用同样的单向散列函数得到信息码,然后用自己的密钥解密原来生成的信息码跟新得到的信息码对比,那么就会发现不一样,就可以发现文件已经被修改。

单向散列函数(one-way hash function)有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash value),单向散列函数也称为消息摘要函数,哈希函数,或者杂凑函数。

说明:

这里的消息不一定是人类能够读懂的文字,也可以是图像文件或者声音文件。单向散列函数不需要知道消息实际代表的含义,无论任何消息,单向散列函数都会将它作为单纯的比特序列来处理。 散列值的长度和消息的长度无关。无论消息是1比特,还是100MB,甚至100GB,单向散列函数都会计算出固定长度的散列值。

#单向散列函数的性质

根据任意长度的消息计算出固定长度的散列值

首先,单向散列函数的输入必须能够是任意长度的消息。其次,无论输入多长的消息,单向散列函数必须能够生成长度很短的散列值,如果消息越长生成的散列值也越长的话使用就不是很方便了,从使用方便的角度来看,散列值的长度最好是短且固定的。

能够快速计算出散列值

计算散列值所花费的时间必须要短。尽管消息越长,计算散列值的时间也会越长,但是如果不能在现实的时间内完成计算就没有意义了。

消息不同散列值也不同

如果单向散列函数计算出的散列值没有发生变化,那么消息很容易就会被篡改,这个单向散列函数也就无法被用于完整性检查。两个不同的消息产生同一个散列值的情况称为碰撞。理论上单向散列函数的碰撞概率应该为0,但是实际上不存在这种单向散列函数。

具备单向性

单向性指的是无法通过散列值反算出消息,但是根据消息计算散列值可以很容易。


[原]数据完整性

#单向散列函数的实际应用

检测软件是否被篡改 基于口令加密 消息认证码 数字签名 伪随机数生成器 一次性口令

#单向散列函数具体实例

MD4,MD5是由Rivest分别与1990年,1991年设计的单向散列函数,能够产生128比特的散列值。 SHA-1是由美国国家标准技术研究所设计的一个能够产生160比特的散列值的单向散列函数。 SHA-2系列单向散列函数:SHA-256,SHA224, SHA-384,SHA-512。

#单向散列函数的缺点

单向散列函数能够辨别出篡改,但是无法辨别出真伪。

例如:假设攻击者A伪装成B,向C同时发送了消息和散列值,这时C能够通过单向散列函数检查消息的完整性,但是这只是对A发送的消息进行检查,而无法确定这条消息是否真的是B发送的。

学院Go语言视频主页

https://edu.csdn.net/lecturer/1928

清华团队带你实战区块链开发

扫码获取海量视频及源码 QQ群:721929980


[原]数据完整性

Viewing all articles
Browse latest Browse all 12749

Latest Images

Trending Articles





Latest Images