讲到计算机密码学,就不得不从网络的发展说起,网络初期,主要用于科学研究,只在几个大学之间互联网络,使得设计之初并没有考虑到数据传输安全问题。
随着网络发展,特别是从网络应用于军事,再到后来进入人们的日常生活,网络安全问题日益突出,从而发展出计算机密码学。
到目前为止,不论是系统开发还是应用开发,只要有网络通信,很多信息都需要进行加密,以防止被截取、篡改。所以了解密码学的相关知识,了解在何时使用何种密码技术,已经成为开发人员必不可少的知识。
本篇文章将会科普一下有关密码学的相关知识。
基本术语
- 明文: 原始信息
- 密文: 加密之后的信息
- 加密: 将明文转换成密文的过程
- 解密: 将密文转换成明文的过程
- 加密算法: 用于加密的算法
- 密钥: 用于加密或解密的工具
密码学发展阶段
- 第一阶段
- 密码学在这一阶段不是科学,是艺术
- 特点是数据的安全基于算法的保密
- 第二阶段
- 计算机使得基于复杂计算的密码成为可能
- 特点是数据的安全基于密钥的保密
- 第三阶段
- 提出公开密钥体系
- 公钥密码使得发送端和接收端无密钥传输的保密信息成为可能
加密算法分类
根据使用密钥的个数可分为:
- 单密钥算法或共享密钥算法或对称加密算法
- 双密钥算法 或公开密钥算法或非对称加密算法
对称加密
- 也称为单密钥加密或共享密钥加密
- 发送方和接收方共享相同的密钥
- 是 20 世纪 70 年代公钥加密之前仅有的加密类型
对称加密算法包括: DES 加密算法、3DES 加密算法和 AES 加密算法等。
非对称加密
微积分是现代数学的分水岭,非对称加密算法是密码学的分水岭
- 也称为双密钥加密或公开密钥加密
- 解决了密钥分发的安全性问题
- 巧妙运用数论概念
- 与对称加密互为补充,而不是替代(与对称加密相比,运算慢 100 倍左右)
最著名的非对称加密算法: RSA 加密算法(由 MIT 三个教授提出)。
- 公钥:任何人都可以知道,可以用来加密消息或验证签名
- 私钥:只能接收者知道,可以用来解密消息或进行签名
现代计算机通讯加密方式
通过非对称加密分发密钥,之后的信息通过对称加密算法进行加密。
数字签名和认证
认证
问:为什么需要消息认证?
答:消息在传递过程中可能被篡改,为了消息的完整性验证。(要注意认证只是为了消息的完整性,而不是加密性)
我们可以通过短字符串追加到原消息之后,用以认证该消息。
获取短字符
散列函数(哈希函数):可以将变长字符串转为定长字符串的函数。如 MD5,SHA1,SHA256 等算法。
特点:
数字签名:
数字签名是笔迹签名的模拟。
特征:
- 可以验证作者
- 可以验证内容
- 必须由第三方验证以解决争议
因此,数字签名包含了认证功能。
签名过程就是先通过哈希算法计算出信息摘要,再使用私钥对摘要进行签名。
通过数字签名我们可以保证消息是由正确的人所发送的。
CA(Certificate Authority)
通过非对称加密可以解决用于对称加密的密钥分发的问题,但是又引入了另一个问题,如何保证我们分发出去的公钥是未被篡改的?
我们可以通过 CA 颁发的数字证书来解决此问题。
CA 是可信任的颁发证书的服务器。
世界上存在很多 CA,他们以树形结构组织。
CA 使用私钥来签名证书, 我们使用 CA 的公钥来验证证书的合法性。如果合法则从证书上提取公钥,否则认为证书有问题。
我们常用的是 X.509 格式证书:
- 基于公钥加密和数字签名
- 为用户提供公钥证书
- 常用于 IPS TLS/SSL 等地方
我们可以看一下使用数字证书的实例:https
第一阶段:算法协商与传递数字证书
- 客户端向服务器发起请求建立 https 链接,告知服务器客户端可以使用的对称加密算法,密钥交换算法以及支持的哈希函数
- 服务器收到请求,确定通信使用的对称加密算法,密钥交换算法以及哈希函数并向客户端发送数字证书
第二阶段:客户端校验证书,生成并传递通信密钥
- 客户端根据操作系统内置的受信任 CA 列表对证书进行校验。若校验证书合法,就读取其中的公钥。否则断开连接
- 客服端生成加密密钥
- 客户端使用公钥加密通信密钥,传输给服务器
- 服务器使用私钥解密加密的通信密钥
第三阶段:服务器获取通信密钥,双方进行通信
- 客户端使用通信密钥加密要传递的信息
- 服务器获取加密的信息,使用通信密钥解密,生成响应信息,使用通信密钥加密并回传给客户端
至此一个 https 请求响应完成。
关于申请 TLS 证书,要经过如下三部
- 在你的服务器上,生成一个 CSR 文件(TLS 证书请求文件,TLS Certificate Signing Request)
- 使用 CSR 文件,购买 TLS 证书
- 安装 TLS 证书
也就是说,你在第二步得到的证书不能用在另一台服务器上。
如果你需要这样做,就必须以其他格式输出证书。
比如,IIS 的做法是生成一个可以转移的 .pfx 文件,并加以密码保护。