怎么对一个大的文件进行签名,因为文件比较大,非对称签名很慢。那么想,我能把这个大的文件通过一种函数变换,变成一个和源文件唯一对应的的小的文件吗?答案是可以的。

Hash Function

这里任何的文件都抽象成一个字节流X。

Y就是变换后的结果,他和X有一一对应的关系,也称Y为X的特征码。

f就是一种变换关系,称为Hash Function,这种变换是不可以的,即给定X很容易得到Y;但是给定Y一般无法得到X。

并且这种Hash Function还有一个特性,就是对于输入的X,只要稍微改动,输出的Y就会发生很大的变化。

一旦Hash Function给定,其输出的Y的值的大小就固定了,常见的两种Hash Function分别是MD5和SHA1,他们的产生结果的大小分别为128bit和160bit。

MD5的小插曲

在Hash Function中有个属于叫做collision,冲突或者碰撞。也就是给两个不同的输入,结果输出的值竟然一样,这样的话这个特征码就不能唯一的代表一个东西了。原山东大学的密码学老师王晓云就在理论上证明了MD5的collision的存在,在理论上找到了一种构建冲突的方法,震惊密码学界啊。

Hash Function变换的实验

产生一个文件的MD5的特征码,上面的使用openssl提供的函数。下面的使用Linux自身带的MD5函数。

这样就能产生一个小的,能唯一代表这个文件的特征码。同时只要这个文件有任何的被修改,新的MD5码就会跟原来的产生巨大的变化。

SHA1的函数产生文件的特征码。

提示:

openssl dgst后面跟参数 -c 可以控制特征码的输出的形式,中间冒号隔开。

以openssl这个软件为例,产生他的特征码。这里产生的特征码和在其官方网站上的特征码是一样的,官网给出其特征码的目的也就是防止该安全软件被恶意的修改,防止安全问题出在安全软件本身。

在文件的加密中,有一种应用就是:我发布了一些软件在网站上供大家使用,但是这个文件有可能被黑客恶意的修改,比如所往文件里注入一些木马等病毒。那么用户增么才能有效的辨别呢?就是引入哈希函数。

哈希函数就是一种尽量做到唯一对应的一种映射关系。它的输入是一个大的文件,然后通过函数的映射关系,产生一个有限长度的字符串,这个字符串唯一的对应这个文件。这样的话,用户就能够通过比对软件的发布者公布的文件对应字符串和下载下来的文件对应的字符串来确定这个文件是否被恶意篡改过。

实现这种对应关系,需要复杂的算法支持,常见的算法是MD5和SHA1。

数字签名的完善

首先有一个明文,这个明文可大可小。通过一个Hash Function产生他的特征码,对明文不加密,因为这里是数字签名认证不是加密传输,所以不需要加密明文。

但是我们要对特征码进行签名(私钥加密) ,发送方对特征码签名了,所以他要对特征码的真实性负法律责任,同时特征码和原名文是一一对应的关系,所以发送方也要对明文的真实性负法律责任。但是前提是这个特征码是和明文有对应关系的。

也就是说任何人都可以看可以使用 这个明文,但是不能修改。一旦你修改了,别人也能很容易的看到这个不是原发送方的那个明文了,因为你没有原发送方的私钥,你无法对特征码签名,别人用原发送方的公钥验证的时候很容易就能发现你的明文是被修改过的。

遗留问题

在非对称加密中,我们想给谁发送信息就用谁的公钥加密文件,然后只有我们想要的发送方能解密文件。但是漏洞来了,我们怎么确认自己手里的公钥就是我们心中的数据接收方呢?会不会有个人冒充呢,会不会被钓鱼呢?

比如说我们想给习大大写一封信,然后有个人自称是习大大,然后他给出了自己的公钥(到处散发),我们用公钥加密然后把信息一股脑的都给了这个人。但是万一他不是习大大怎么办,我们的信息就被窃取了。

加密传输SSL协议5_Hash Function的更多相关文章

  1. 加密传输SSL协议7_SSL协议概述

    SSL(Secure Sockets Layer) SSL的功能,可以在通信的双方中建立一个加密的通信通道 同时还可以确认通信的双方是不是就是其声称的人,防止被钓鱼. SSL在网络协议栈中的位置:可以 ...

  2. 加密传输SSL协议8_Apache服务器的安装

    学习了那么多的理论的知识,下面通过在Apache服务器中安装和使用SSL协议,实现安全传输,但是首先要安装好Apache服务器. Apache服务器的安装 Linux下所有的软件的原码的安装都是三部曲 ...

  3. 加密传输SSL协议6_验证公钥

    如上图所示,我怎么能确定我手里的公钥就是我心中的接收方的公钥呢?怎么防止被钓鱼呢? 解决的办法就是引入一个第三方,一个权威机构,一个我们都相信的机构. 验证公钥,Digital Certificate ...

  4. 加密传输SSL协议1_OpenSSL的安装

    终于在自己不断的奋斗之后,来到科大的一波考试过去了,但是为了不使自己过于放松,回顾一下之前的东西,做一下笔记.所以新开一个专题笔记: Using Apache with SSL 引入:首先我们在平时的 ...

  5. 加密传输SSL协议4_综合方案

    隔了那么多天终于有时间继续把这个专题做完了,这次一定连续写完这方面的笔记. 上篇博文说明了非对称加密和对称加密各自的优缺点,那么就很自然的衍生出了一种综合的方案. 两种方案的结合--扬长避短 首先发送 ...

  6. 加密传输SSL协议2_传统加密

    原本到了睡觉的时间,但是做完了SSL的笔记还有GCC和Oracle等的好多的笔记,所以刻苦一点. The Priciple of Encryption/Decryption --conventiona ...

  7. 加密传输SSL协议3_非对称加密

    困死了,这里对非对称加密体系开个头,具体的实验明天写 非对称加密体系 为了解决对称加密中密钥的传输的问题,一些天才的数学家就提出了非对称式的加密体系,也称为公钥加密体系. 加密和解密的密钥是不同的.一 ...

  8. 学习笔记: MD5/DES/RSA三类加密,SSL协议解析

    1. 不对称可逆加密的 的2种用法 (1)保证信息不被篡改 (2) 保证信息只能被我看到 2. CA证书的基本原理 流程如下:  百度公司 向CA机构报备 持有者姓名, 有效期, 要发布的公钥 , 扩 ...

  9. HTTPS(身披SSL协议的HTTP)

    参考链接: HTTP 与 HTTPS 的区别 HTTPS科普扫盲帖 HTTPS小结 HTTP 和 HTTPS 区别 HTTP是明文传输未加密,安全性差,HTTPS(HTTP + SSL)数据传输是加密 ...

随机推荐

  1. Swift的初始化方法

    我们在深入初始化方法之前,不妨先再想想Swift中的初始化想要达到一种怎样的目的. 其实就是安全.在Objective-C中,init方法是非常不安全的:没有人能保证init只被调用一次,也没有人保证 ...

  2. OpenGLES 怎样在十天内掌握线性代数 - 希望这是真的!

    OpenGLES 怎样在十天内掌握线性代数 - 希望这是真的! 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&q ...

  3. C#整理7——函数

    数据类型--变量常量--运算符表达式--语句(顺序,分支,循环)--数组--函数 函数 1.定义:能够独立完成某个功能的模块.2.好处:1.结构更清析(编写.维护方便 ).2.代码重用.3.分工开发. ...

  4. 根据Model有值的自动生成添加的Sql语句

    static string Table_Name = ""; /// <summary> /// model实体中的字段名相对数据库表添加的字段 /// 如: /// ...

  5. 如何:控制命名空间前缀 (C#) (LINQ to XML)

    Visual Studio 2010 本主题介绍在序列化 XML 树时如何控制命名空间前缀. 在很多情况下,不需要控制命名空间前缀. 但是,某些 XML 编程工具需要命名空间前缀的特定控制. 例如,您 ...

  6. 图的广度优先/层次 遍历(BFS) c++ 队列实现

    在之前的博文中,介绍了图的深度优先遍历,并分别进行了递归和非递归实现.BFS 无法递归实现,最广泛的实现是利用队列(queue).这与DFS的栈实现是极其相似的,甚至代码几乎都很少需要改动.从给定的起 ...

  7. Oracle EBS-SQL (PO-9):检查期间采购订单执行情况.sql

    --采购订单执行情况查询(七天内接收情况)select pha.segment1       采购订单,         msib.segment1      物料编码,         pla.qu ...

  8. 本地化SilverLight应用程序(多语言支持)

    原文 http://www.cnblogs.com/seaworm/archive/2010/11/30/1892325.html 利用资源文件(Resources File)使SilverLight ...

  9. 用ATL和MFC来创建ActiveX控件

    摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所 ...

  10. Ubuntu之修改用户名和主机名

    记得曾几何时,想把自己电脑的“乌班兔儿”取个响亮的名字,但是问了很久度娘和谷哥,都要我把当前用户删除了(userdel -r xxx),重新建一个用户(adduser xxx),但是,我的电脑是所有环 ...