数字签名

我们需要数字签名 之前的文章我们讲了MAC(Message Authentication Code)消息认证码,MAC是认证消息的完整性的技术。它是由任意长度的消息和在发送者和接受者中间共享的密钥生成的。 MAC有个缺点就是秘钥是共享的,因为是共享的所以发送者可以计算MAC值,接收者也可以计算出同样的MAC值。因为两者都可以计算出同样的MAC值,所以我们无法判断这个MAC值到底是由谁来计算出来的。…

单向散列函数

单向散列函数 在介绍单向散列函数之前,我们先了解一下什么情况下需要使用到单向散列函数。 如果你需要从国外的网站上下载一个软件,但是因为种种原因,国外的网络太慢了,下载几个G的数据几乎是不可能的。刚好国内有镜像网站,可以从国内下载数据。但是如何保证国内的镜像不是被篡改过后的呢?这个时候就需要单向散列函数了。一般来说网站会提供MD5或者SHA的值作为验证值。 单向散列函数有一个输入和输出。输入称为消息…

混合密码系统

之前的文章我们讲了两种加密方式,一种是对称加密,一种是非对称加密。 对称加密可以解决通信的机密性的问题,但是不能解决密钥配送的问题。而非对称加密算法虽然可以解决密钥配送的问题,但是它的加密速度比较慢,并且无法抵御中间人攻击。 那么如果将对称加密算法和非对称加密算法结合起来,是不是就能够得到一种既不用配送密钥,加密速度又快的系统呢? 答案是肯定的,著名的SSL/TLS协议就是这样的加密系统。这样的系…

中间人攻击

前面的文章我们讲到了RSA算法以目前的手段是很难被攻破的,那么使用RSA算法是不是就一定安全了呢? 答案当然是否,因为我们并没有考虑到网络传输中的各种情况。本文会讲一种攻击叫做中间人攻击,为了抵御这种攻击,我们引入证书的概念。我们会在后续的文章中讲解证书的概念。这里我们重点讲一下中间人攻击。 所谓中间人攻击就是在A和B通信的过程中加入了恶意攻击者C。C作为中间人转发两者的请求。 示意图如下: 上面…

RSA算法详解

什么是RSA 前面文章我们讲了AES算法,AES算法是一种是对称加密算法,本文我们来介绍一个十分常用的非对称加密算法RSA。 非对称加密算法也叫公钥密码算法,通过生成的公私钥来对明文密文进行加密解密。 RSA的名字是由它的三个开发者Ron Rivest, Adi Shamir和 Leonard Adleman的首字母而来的。 RSA公司在1983年为RSA算法申请了专利。 RSA的加密 RSA的加…

公钥私钥

密钥配送问题 上面几篇文章我们讲到了对称加密,包括它的几种实现AES,DES算法。那么有了对称加密算法,我们是否就可以安全的和第三方进行通信了呢? 考虑如下情况: 小明想写一封情书给小红,但是这封情书是很私密的东西, 小明不想让除了小红之外的其他人知道。小明看过flydean的博客,他知道了有个对称加密的好东西。 于是小明想,如果我将情书使用对称加密算法进行加密,然后再把加密后的情书传给小红岂不就…

分组密码与模式

什么是分组密码和模式 前面我们讲过了DES和AES算法,他们每次都只能加密固定长度的明文,这样的密码算法叫做分组密码。 如果需要加密更长的明文则需要对分组密码进行迭代。而分组密码的迭代方法就称为分组密码的模式。 本文我们会讲如下几种模式: ECB模式:电子密码本模式 CBC模式: 密码分组链接模式 CFB模式: 密文反馈模式 OFB模式: 输出反馈模式 CTR模式: 计数器模式 ECB模式 ECB…

AES算法

AES的由来 前面一篇文章我们讲到了DES算法。鉴于DES可以被破解和加密效率不高的缺陷。美国的NIST(National Institute of Standards and Technology,国家标准技术研究所)在2000年通过选拔,从多个候选算法中确认了Rijndael算法为最新的AES算法,成为联邦信息处理标准(FIPS)。 什么是Rijndael Rijndael是由比利时密码学家J…

DES算法

什么是DES DES全称叫(Data Encryption Standard), 是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称加密算法。 DES之前一直使用很普遍,但是随着计算机的进步,现在DES已经可以被暴力破解了,处理历史的原因外,我们不再建议使用DES算法。 DES的加密解密 DES的密钥长度是64比特,也就是8个字节。但是DES每隔7 比特会设置一个错误校验位,所以真正的…

一次性密码本-绝对不会被破译的密码

一次性密码本 一次性密码本即Vernam Cipher,是由Gilbert Vernam在1917年, 开发的一种加密算法。 之所以叫做一次性密码本,是因为加密所用的密钥是一次性的,即密钥只会使用一次,不会出现因为密钥泄露导致之前的加密内容被解密。 即使密钥被泄露了,也只会影响一次通信过程。 加密之前的准备 通常来说,如果我们想将一个消息加密传输需要做什么工作呢? 在现代计算机社会,大家都知道计算…