概述
花了一天多粗略的翻了《图解密码技术》,图解系列真是入门神书,能够迅速的建立起一门学科的体系,强烈推荐。
一些基本的概念
密码算法和密钥
密码算法和密钥是分开的两个概念。比如凯撒密码中,将字母表中的字母平移这个操作是密码算法,而平移的字母数量就是密钥。
密钥空间
在某个密码算法下,所有的密钥就是密钥空间。
暴力破解
将密钥空间中所有的密钥全部试一遍,就是暴力破解。
重放攻击
窃听并保存A发往B的通信包,重复发送给B。
此时,Bob银行会收到多次Alice银行转账数据,且每次验证都是正确的。消息认证码、数字签名都不能防御
防御手段
- 序号:每个消息都有一个编号
- 时间戳:发送者和接受者的时钟必须一致,而且考虑通信的延迟,必须在时间的判断上留下缓冲,于是多多少少还是会存在可以进行重放攻击的空间。
- nonce:通信之前,接受者都向发送者发送一个一次性的随机数,称为nonce,发送者在消息中包含这个nonce并计算MAC值。
密码学家的工具箱
在本书中,最重要的概念就是密码学家的工具箱,全书都是围绕工具箱中的各个工具以及各个工具的相互关系来讲述的。看懂了这个工具箱,密码学就入门了,而后各个工具都是一门博大精深的学问,需要再花时间细细研读。
- 对称密码
- 公钥密码
- 单向散列函数
- 消息认证码
- 数字签名
- 伪随机数生成器
下面是我认为书中最重要的两个图:
图一:信息安全面临的威胁和用来应对的密码技术
图二:各个密码技术之间的关系
对称密码
定义
对称密码是指加密和解密时使用同一密钥的方式。
例子
比如加密和解密都用异或的方式。(对同一个比特序列进行两次XOR之后就会回到最初的状态)
A是比特序列,B是随机生成的比特序列:
- 将明文A用密钥B进行加密,得到密文(A XOR B)
- 将密文(A XOR B)用密钥B进行解密,得到明文A
密码算法
- DES
- 三重DES
- AES
缺点
使用一种密钥空间巨大,且在算法上没有弱点的对称密码,就可以通过密文来确保明文的机密性。巨大的密钥空间能够抵御暴力破解,算法上没有弱点可以抵御其他类型的攻击。但是对称密码仍然有弱点:
- 密钥的配送问题:如何将密钥安全地发送给接受者。(通过公钥解决)
公钥密码
公钥密码用于解决密钥配送问题。
公钥密码无需向接受者配送解密的密钥,是密码学上最伟大的发明。
公钥和私钥
- 公钥即加密密钥,可以任意公开,使用时应将公钥发送给需要使用公钥进行加密的通信对象。
- 私钥即解密密钥,绝对不能公开。
密码算法
- RSA
缺点
- 公钥密码的处理速度只有对称密码的几百分之一。(通过混合密码系统解决)
- 公钥认证问题:需要判断得到的公钥是否合法。(通过证书解决)
混合密码系统
混合密码系统即用对称密码来加密明文,用公钥密码来加密对称密码中所使用的密钥。
会话密钥:为本次通信而生成的临时密钥,一般是通过伪随机数生成器生成的。会话密钥是对称密码的密钥,同时也是公钥密码的明文。
加密图:
解密图:
单向散列函数
单向散列函数用于检测文件的完整性,即文件有没有被篡改。
性质
- 根据任意长度的消息计算出固定长度的散列值
- 能够快速计算出散列值
- 消息不同散列值也不同:抗碰撞性
- 单向性:无法通过散列值反算出消息
算法
- MD4
- MD5
- SHA-1
缺点
- 无法识别伪装:无法检查出发送者的身份的真实性。(通过消息认证码解决)
消息认证码(对称密钥+单向散列)
使用消息认证码可以判断消息是否被篡改,以及是否有人伪装成发送者发送了该消息。
可以这么理解:消息认证码是一种与密钥相关的单向散列函数。输入包括任意长度的数据和一个发送者与接收者之间共享的密钥,输出固定长度的数据,这个数据称为MAC值。
认证
要计算MAC值必须持有共享密钥,没有共享密钥的人就无法计算MAC值,消息认证码是利用这种性质来完成认证的。
完整性
和单向散列函数的散列值一样,哪怕消息中发生1比特的变化,MAC值也会发生变化,消息认证码正式利用这一性质来确认完整性的。
算法
- HMAC
缺点
- 依然存在密钥配送问题
- 无法防止否认(通过数字签名来解决)
数字签名(公钥+单向散列)
数字签名是将公钥加密和解密反过来用。即用私钥加密,用公钥解密。
用私钥加密相当于生成签名
用公钥解密相当于验证签名
数字签名的方法
- 直接对消息签名
- 对消息的散列值签名
图中省略了Alice发送公钥给Bob的过程。
缺点
- 无法验证公钥是属于真正的发送者的(通过证书来解决)
证书
所谓证书,就是将公钥当做一条消息,由一个可信的第三方对其签名后所得到的公钥。
证书用来对公钥的合法性进行证明。
具体步骤
下图中默认Alice持有的认证机构的公钥是可信的。
PKI
PKI即公钥基础设施(public-key infrastructure)是为了能够更有效的运行公钥而制定的一系列规范和规格的总称。
组成元素:
- 用户:使用PKI的人
- 认证机构(certificate authority):颁发证书的人
- 仓库:保证证书的数据库
用户
- 希望使用PKI注册自己的公钥的人
- 希望使用已注册的公钥的人。
认证机构
- 生成密钥对(也可由用户生成)
- 在注册公钥时对本人身份进行认证
- 生成并颁发证书
- 作废证书
仓库
证书的层级结构
认证机构的公钥也需要认证,所以用一个认证机构来验证另一个认证机构的公钥,这样的关系可以迭代好几层。最终我们需要一个“可信的种子”,因为不可能在完全不可信的状态下创造出信任关系。