9.2 数据安全加密(第二部分)

比如说我们平时写论文,写论文都要写一个内容摘要,内容摘要它的意义就是说从主体的论文当中提取一些主要的关键性的话语放到摘要里面,这样子呢我们一看到摘要就能够大体上知道这一个论文里面有些什么主体的内容.其实这个摘要就相当于论文的一个索引,信息摘要也是如此.信息摘要呢就是从信息当中根据一定的规则抽取一定的信息出来.比如说:

但是我们往往在计算机中运算这个信息摘要的时候是采用的哈希函数.哈希函数得到的一个固定的一个串,那就不是这么简单的几个文字了.因为简单的文字它有可能能够找出一些规律,但是哈希函数就比较难找出规律了.


所以信息摘要其实是一个单向的散列函数.对数据块进行散列函数的计算得到的呢是一个固定长度的散列值.你就比如说还是我们这一句话,得到的真正的信息摘要是一串散列值,一串散列值.如果说攻击者要伪造这么一个信息的话,或者是想得知这一个信息是什么内容的话,拿到摘要是没有一点用处的.

其实摘要只是原文中的一小部分,抽取的一些采样点.然后我们是无法根据这样子的一个采样信息来得到完整信息的.因为产生摘要的过程已经就把原文丢弃了很多信息,这样子是不可能还原为原文的.所以说呢我们是无法将这个散列值、将这个信息摘要还原为原文的,也无法呢伪造一个和原文信息摘要相同的这么一段原文来.无法伪造和这个信息摘要相同的、但是内容不同的原文来.

我们现在常用的信息摘要算法主要有MD5和SHA.MD5使用广泛,但是SHA也有自己的特色.


其实信息摘要的应用还是非常广泛的.我们就讲一个最常见的.

最常见的就比如说我们经常要上论坛或者说我们每个人都有自己的银行卡.银行卡有密码.我的银行卡密码比如说是123456,是不是这一个密码就直接存入数据库了呢?如果说用户的所有密码都用明文的方式放在数据库中,那么维护这一个数据库的管理员岂不是知道所有人的银行卡密码了?所以这种方式它是不科学的.那么我们应用这个信息摘要如何来做好这个用户密码保存的工作呢?比如说我在希赛网社区的用户名呢是test,用户密码呢是www.csai.cn.当你设定这个用户密码的时候密码要存入数据库.那么存入数据库它并不是就把这一串存入数据库,而是做了处理的.它是对这一个串产生信息摘要,产生的信息摘要是这么一长串乱码.而把这一串乱码呢存入数据库.当我们输入密码的时候,当然我们是输www.csai.cn,输入这个密码之后呢,并不是把密码直接和数据库里面的进行比对.我们知道如果直接比对的话,那肯定密码是不相符的.而是把我们输入的这个密码又用这个信息摘要的算法,产生信息摘要的算法再运算一次.运算完了之后又得到了一串乱码.我们再对比这两串密码它是否相同.如果相同那代表输入的密码也是相同的.如果不同的话,就代表你输入的密码错误了.所以说呢这种情况下管理员即使是后台的管理员也只能够看到这么一串乱码.然而呢他输入这一串乱码显示的密码肯定是错误的.这样子就达到了很好的这个密码的保存的一个方式.这是信息摘要它的一个应用.

另外一方面信息摘要还有一项应用.就是一段密文你对它产生了信息摘要,如果这一段密文在传输的过程中被人修改过篡改过,那么最后传到目的地之后对它的信息摘要进行验算,进行对比核对的时候,能够发现信息已经被篡改过.因为你对一段明文如果说产生了一段信息摘要,只要你在明文当中有很小很小的改动即使是一个标点符号的改动,都会使信息摘要产生不同的效果.所以说一旦被修改了,我们是从信息摘要中能够看出来的.


例题:

MD5算法输出的是一个定长的一个信息摘要.这个定长的信息摘要是128位.所以呢SHA的160位的信息摘要就比MD5的128位的要长.SHA算法的信息摘要的长度是160.


在书面的文件上面进行传统的签名主要是两方面的作用:我在一份文件上面签了字,别人一看就知道这东西已经受到我认可,我已经确认了.签名不易仿冒是因为每个人都有自己的写字习惯,然后笔的那个落笔的轻重,这一点有笔迹专家他是能够辨认出来的.再放开一点,一般人他的那个写字风格模仿是很难模仿像的.

在网络上面很多东西是虚的.你比如说张三给李四发一份合作合同,是一个电子文档.然后委托李四帮他完成一项任务,同样给一定的报酬酬劳.但是李四完成之后呢张三说我没邀请你做过这些事情,否认他要求李四委托李四办过这些事情.那么呢李四如果说没有这个张三的数字签名,就无法说张三要求他做了这件事情.因为普通的电子文档是可以修改的,这样子修改之后就是无法确认的.因为张三打的一份文档和李四打的一份文档在电脑上是完全一样的,它没什么区别,难以区分.如果说有了数字签名那就好办了,张三可以用自己的私钥对这个文件进行加密.然后李四要看这份文件的时候用张三的公钥进行解密.这个密文还保存在这里作为证据.一旦张三想否认他给李四发了这么一个文件的时候,李四可以把密文拿出来.然后用张三的公钥去解密.如果说能够解开,就证明这个文件一定是张三发的.因为只有张三有自己的私钥.只有私钥加密的文件公钥才能够解开.这是一个铁的事实.所以从中呢这一个文件就相当于是一个进行了数字签名的一个过程的东西.

数字签名的应用.数字签名的内容通常不会把整篇的作为数字签名.而是一小段的.你比如说我要把这么一段明文从A发送到B,而且呢B要求A做数字签名,这样子确保信息是从A发过来的.具体的处理流程是:

首先将明文产生信息摘要,产生信息摘要的目的是把明文的位数缩短.本来明文呢可能有几千个字符或者是几万个字符,但是通过信息摘要那么就产生了128位的(我们用MD5码产生信息摘要)摘要.得到摘要之后A就要用他的私钥对这个信息摘要进行加密.加完密之后呢明文和信息摘要同时传输,传输到B之后B收到的有一段密文,还有一段明文.B首先是对明文产生信息摘要,得到信息摘要之后B再把接收到密文用A的公钥进行解密.解密得到的这一个串和信息摘要产生的串进行对比,如果它们相同就代表这个信息没有被篡改过.同时这个信息是有A的数字签名的.因为A用自己的私钥加密了一部分数据发送过来,然后呢用A的公钥能够对这个密文进行解密得到正确的明文.

这就是数字签名的全过程.


例题:

如果说这个消息有甲的数字签名,那么乙就不怕他否认了.


 数字签名最大的功能是防止发送者不承认他发过这个信息.那么也就是否认.第二点接收者不能够篡改接收到的信息.为什么不能够篡改呢?因为接收者接收到的有一个文件是明文,也可以是加了密的文件,还有一个数字签名.而数字签名呢是通过明文的信息摘要而产生的,然后再通过发送者他的一个加密的,发送者私钥加密.如果说接收者修改明文,修改明文是很容易的.但是一旦修改明文之后,它所产生的信息摘要就和原始文件的信息摘要不同.而这个信息摘要呢接收者又没有发送者的私钥进行加密,就无法产生数字认证,这个数字签名.所以接收者他是不能够随意地篡改接收到的消息的.篡改之后就会被人发现的.

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/7371487.html