密码学基础

本文最后更新于:2022年5月9日 晚上

〇、前言

本篇旨在梳理密码学的知识体系,以及密码学在计算机网络协议中的实际应用,提供协议设计、分析方向的理论基础。并不设计复杂的数学、信息论、编码学等知识算法

一、概述

密码学主要提供的功能有:

  1. 保密性:保证只有通信双方能够理解消息的内容,第三方即使能够截获消息也无法获得其中承载的信息
  2. 完整性:保证消息在传输过程中不被篡改,或者篡改后能够被发现
  3. 认证:保证消息来源的可靠性
  4. 不可否认性:保证消息能够追溯到来源

密码学中的五元组:

  1. 明文空间 M:所有可能明文 m 的集合

  2. 密文空间 C:所有可能明文 c 的集合

  3. 密钥空间K:所有可能密钥 k 的集合

  4. 加密算法E:由加密密钥控制的、从M变化到C的加密变换

  5. 解密算法D:由解密密钥控制的、从C变化为M的解密变换

二、保密性

保密性的实现主要依靠加密、解密算法

发送方使用密钥key_1对消息进行加密,接收方使用密钥 key_2对消息进行解密。传输过程中使用密文,即使被截获也无法被第三方获悉

2.1 古典密码学

古典密码学一般指二战前的密码编码学。通常只是经过简单的替换和置换等对信息进行手工加密,如摩斯密码、恺撒密码、维吉尼亚密码等

主要是对加解密算法的保护,算法泄露就得重新设计

缺点是无法完全掩盖信息中的内容,比如长度、词频、字母频率等关键信息,容易被统计分析、拟合等方式破解出来

2.2 现代密码学

现代密码学是依靠香农的信息论以及计算机科学来构建的

它使用替代、置换、异或、选项移位等多次非线性变换,产生全面混乱的消息,确保在加密之后没有任何可用的信息泄露

主要是对密钥的保护,密钥泄露可以再换一个。并且消息具有时效性,只要能够在规定的时间内不泄露就可以达到目的

现代密码学的加解密算法主要分为两类:

  • 对称加密算法

  • 非对称加密算法

对称加密算法

对称加密算法中加解密算法相同,使用相同的 key,即发送方key_1 = 接收方key_2

  • 明文使用这个密钥生成密文
  • 密文再使用相同的密钥还原回明文

对称加密算法

Q:对称加密算法加解密使用相同的密钥,这就必然涉及到一个问题,密钥怎么安全的传输给对方?或者生成密钥的关键信息怎么安全的传输给对方?

非对称加密算法

非对称加密算法中消息的加解密算法使用不同的密钥

  • 非对称加密的密钥通常是成对出现,分为公钥私钥

  • 公钥人人可知,可被传递;私钥仅自己知道,不能传输、泄露

  • 消息使用公钥加密,只能用私钥进行解密,这中方式称为加密

  • 消息使用私钥加密,只能用公钥进行解密,这种方式称为签名

A向B发送消息,会使用B的公钥进行加密,这样只有B的私钥才可以解密(B的私钥只在仅被自己持有),保障了数据的安全

非对称加密算法

针对对称加密算法的问题:

Q:密钥怎么安全的传输给对方?或者是生成密钥的关键信息怎么安全的传输给对方?

A:使用非对称加密算法进行传输

假设Alice和Bob双方使用非对称加密进行数据,双方互换公钥。当 Alice 要给 Bob 发送数据时,使用 Bob 的公钥加密,密文只能使用 Bob 的私钥解密,也就是只能 Bob 解密,完成数据的安全传输

Q:既然非对称加密算法可以安全的传输数据,为什么仍然需要对称加密算法?

A:因为非对称加密算法运算量大,在几乎每个数据都要加密的计算机网络当中,(相比于对称加密算法)效率极低。所以目前网络协议中数据层面的保密性基本是通过对称加密来实现,但是在数据传输前,通常要在通道建立阶段,依靠非对称加密的方式来实现对称加密密钥或者生成对称加密密钥的一些关键信息的交换

常用的加解密算法

目前使用较多的对称加密算法:

  • DES(已经不安全,密钥空间不够,处于废弃阶段)

  • 3DES

  • AES

  • Chacha20(在 arm 架构下通常比 AES 性能高,Google 为移动端发明的)

目前使用较多的非对称加密算法:

  • DH

  • DSA(DSS,发展不好,一般不使用)

  • RSA

其中 DH 与标准非对称加密不同,DH 虽然过程中回生成公钥、私钥,但是最终结果是仅有一个用来加、解密的密钥,加解密符合对称加密算法(相当于非对称加密+对称加密的组合)

三、完整性(数据验证)

通信中除了数据的安全传输外,还要保证数据的可靠传输。

一方面,在网络信道中传输的数据很容易受到噪声干扰,造成数据差错;另一方面,消息本身容易被篡改,造成数据差错。

为保证数据有效,不被篡改(篡改后可以检测出来),根据消息的内容发明了消息摘要

3.1 消息摘要

根据消息的内容生成的一段短的摘要

要求:

  • 哪怕消息只要有一丁点区别,也会产生具有巨大差异的摘要
  • 消息摘要的长度固定,与消息本身的长度无关
  • 将消息摘要还原回消息的运算量巨大,可以认为不可能实现,保证摘要不会泄漏消息内容

消息摘要

消息摘要存在的问题:长度固定,即摘要空间固定,可能会发送碰撞

目前使用较多的消息摘要(HASH 算法):

  • MD5(不安全;设计问题引发碰撞;目前多用于文件传输、校验,保证没有差错)

  • SHA-1(不安全)

  • SHA-2

四、身份认证

假设 Alice 与 Bob 要进行加密通话,Candy 作为攻击方

在加密和完整性校验的作用下,Candy 无法获得消息的有效内容,于是 Candy 决定换个思路,伪装成 Alice 与 Bob 进行通信,套取信息

Q:如何识别攻击方的伪装?

4.1 数字签名

在非对称加密中:公钥加密只能私钥解密;私钥加密只能公钥解密。

由于消息的保密性,Alice 向 Bob 发送消息会使用 Bob 的公钥加密,Bob 收到后使用自己的私钥解密,保障了数据的安全

  • 如果 Alice 发送消息时使用自己的私钥加密,那么所有人都可以用她的公钥进行解密,从而获得消息内容消息

  • 消息摘要作为对消息内容的验证,既保证了消息本身没有差错,又确保消息内容没有被泄漏

两者结合:如果 A 使用自身私钥对消息摘要进行加密,B 使用 A 的公钥进行解密得到消息摘要,如果消息摘要没有问题,就可以证明 A 的身份没有问题

数字签名

使用自身私钥对消息进行加密称为数字签名

以上过程可以证明 A 身份的前提是:Bob 持有 Alice 的正确的公钥

如果 C 生成自身的公钥、私钥,再伪装成 A,将自身的公钥发送给 B(或者将 A 的公钥调包为自身的公钥),那么 B 依旧不能正确鉴别出存在伪装

4.2 数字证书

为此,引入了权威的第三方(CA)作为担保人

  • 由 CA 给 A 提供一套公私钥

  • CA 对 A 的公钥、状态(到期时间、注册时间、注册机构,所有者信息)等生成摘要

  • CA 自身的私钥对上一步生成的摘要进行签名,这称为数字证书

任何人想验证 A 的身份,就需要去数字证书中获取 A 的公钥

CA 的公钥被认为是可靠的,一般直接注册在系统当中;或者嵌套注册:被另一个更权威的 CA 签名

CA 颁发的公私钥既可用于身份认证(IPSec 中),又可用于密钥交换(HTTPS)

五、不可否认性

数字签名除了认证之外,还有就是不可否认性(不可抵赖性)

用发送方私钥进行加密的消息(摘要),只能被发送发的公钥进行解密。也就保证了消息发出者不能抵赖

六、应用

在目前普遍的协议设计当中,一般采用的结构:

  • 使用非对称加密进行密钥关键信息的交换
  • 使用数字证书对双方身份进行认证
  • 使用对称加密进行数据传输
  • 使用认证算法对传输的所有数据进行完整性校验

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!