密码学

  • 密码学
  • 1 密码学的基本概念
  • 1.1 密码学的基本原理及流程
  • 1.2 两类重要密码体制
  • 1.3 流密码的基本思想
  • 2 分组密码体制
  • 2.1 DES
  • 2.2 AES
  • 2.3 SM4
  • 2.3 DES、AES、SM4的优缺点及安全强度
  • 3 公钥密码体制
  • 3.1 公钥密码体系
  • 3.2 公钥加密算法步骤
  • 3.3 RSA公钥加密体制
  • 3.3.1 密钥的产生
  • 3.3.2 加密
  • 3.3.3 解密
  • 3.4 ElGamal公钥加密体制
  • 3.4.1 密钥的产生
  • 3.4.2 加密
  • 3.4.3 解密
  • 3.5 ECC公钥加密体制
  • 3.5.1 密钥的产生
  • 3.5.2 加密
  • 3.5.3 解密
  • 3.6 基于身份的公钥密码算法
  • 3.7 对称密码算法和公钥加密算法
  • 3.7.1 共同点
  • 3.7.2 不同点
  • 4 数字签名
  • 4.1 数字签名的概念与基本特性
  • 4.2 数字签名的步骤
  • 4.3 RSA数字签名
  • 4.3.1 参数建立(同RSA加密)
  • 4.3.2 签名生成
  • 4.3.3 签名验证
  • 4.4 ECC数字签名
  • 4.4.1 参数建立(同ECC加密)
  • 4.4.2 签名生成
  • 4.4.3 签名验证
  • 4.5 公钥密码算法用于加密与签名的不同
  • 5 哈希函数
  • 5.1 Hash函数的概念和基本性质
  • 5.2 MD5
  • 5.3 SHA-1
  • 6 密钥交换协议
  • 6.1 Diffie-Hellman密钥交换协议
  • 6.2 X.509证书标准
  • 7 密码学的实际应用
  • 8 计算题例题
  • 8.1 RSA计算
  • 8.2 ECC计算


密码学

1 密码学的基本概念

1.1 密码学的基本原理及流程

密码学的基本属性:机密性、完整性、不可否认性、认证。

密码算法的安全性仅依赖于对密钥的保密。

密码学中的对象包含:明文、密文、密钥、加密算法、解密算法。

加密算法加密后字符串长度不变 加密的长度取决于_公钥密码

1.2 两类重要密码体制

私钥密码体制:私钥密码体制又称对称密码体制,加密密钥和解密密钥相同,包括了流密码、分组密码。

公钥密码体制:公钥密码体制又称非对称密码体制,加密密钥和解密密钥不同。在加密领域,用公钥加密数据,用私钥解密数据。在数字签名领域,用私钥签名,用公钥解密认证。

1.3 流密码的基本思想

流密码的基本思想是利用密钥加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_02产生一个密钥流加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_03,并利用相应的规则对明文串加密算法加密后字符串长度不变 加密的长度取决于_密码学_04进行加密,所得到的密文为加密算法加密后字符串长度不变 加密的长度取决于_密码学_05

2 分组密码体制

2.1 DES

分组长度:64比特

密文长度:64比特

密钥长度:64比特(56+8),56比特有效长度、8比特奇偶校验

循环次数:16轮

DES主体由初始置换、Feistel网络、逆初始置换组成。

加密算法加密后字符串长度不变 加密的长度取决于_密码体制_06


圈变换包括扩展变换、异或运算、S盒代替、P盒置换、异或运算。

2.2 AES

分组长度:128比特

(Rijndael算法的分组长度为128比特、192比特、256比特)

密文长度:128比特

密钥长度:128比特、192比特、256比特

循环次数依据密钥长度的不同而不同,分别为10轮(128比特)、12轮(192比特)、14轮(256比特)。

加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_07


圈变换包含字节代换、行移位、列混合、圈密钥加。最后一个圈变换不包含列混合。

2.3 SM4

分组长度:128比特

密文长度:128比特

密钥长度:128比特(解密密钥是加密密钥的逆序)

循环次数:32轮

轮变换:

加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_08

其中T称为合成置换,是一个由非线性变换(S盒)和一个线性变换(循环移位、异或运算)复合而成的可逆变换。算法中非线性变换由4个S盒并行组成,但为同一个S盒。

加密算法加密后字符串长度不变 加密的长度取决于_密码学_09

2.3 DES、AES、SM4的优缺点及安全强度

DES密钥长度短,运算速度较快,但安全性低。AES密钥长度可变,计算效率高,安全性高,能抗各种攻击,但算法实现复杂。SM4密钥长度固定为128比特,且解密算法与加密算法一致,解密密钥和加密密钥互为逆序,算法实现简单快速,安全性高。

3 公钥密码体制

3.1 公钥密码体系

(1)基于大数分解(大整数素因子分解)问题的公钥密码体制,其中包括RSA密码体制;

(2)基于有限乘法群上离散对数问题的公钥密码体制,其中包括EIGamal密码体制;

(3)基于椭圆曲线加法群上的离散对数问题的公钥密码体制,其中包括椭圆曲线密码体制。

3.2 公钥加密算法步骤

(1)接收方生成密钥对(公钥加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_10,私钥加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_11);

(2)公开公钥加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_10,私密保存私钥加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_11

(3)发送方将消息加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_14通过公钥加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_10加密,产生密文加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_16;

(4)接收方收到密文加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_17后通过私钥加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_11解密,获得明文加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_19

3.3 RSA公钥加密体制

3.3.1 密钥的产生

(1)取不同的大素数加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_20

(2)计算加密算法加密后字符串长度不变 加密的长度取决于_密码体制_21加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_22

(3)取加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_23,且加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_24加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_25互素;

(4)计算加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_26加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_27,即加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_28

(5)公钥加密算法加密后字符串长度不变 加密的长度取决于_密码学_29,私钥加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_30

3.3.2 加密

(1)明文加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_31

(2)密文加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_32

3.3.3 解密

(1)密文加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_33

(2)明文加密算法加密后字符串长度不变 加密的长度取决于_密码体制_34

3.4 ElGamal公钥加密体制

3.4.1 密钥的产生

(1)取大素数加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_35加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_36为乘法群加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_37的生成元;

(2)取随机数加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_38作为私钥;

(3)计算加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_39作为公钥。

3.4.2 加密

(1)明文加密算法加密后字符串长度不变 加密的长度取决于_密码学_40,取随机数加密算法加密后字符串长度不变 加密的长度取决于_密码学_41

(2)密文加密算法加密后字符串长度不变 加密的长度取决于_密码学_42加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_43

3.4.3 解密

(1)密文加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_44

(2)密文加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_45

3.5 ECC公钥加密体制

3.5.1 密钥的产生

(1)有限域加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_46上的椭圆曲线加密算法加密后字符串长度不变 加密的长度取决于_密码学_47,基点加密算法加密后字符串长度不变 加密的长度取决于_密码体制_48具有较大素数阶加密算法加密后字符串长度不变 加密的长度取决于_密码学_49

(2)取随机数加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_50作为私钥;

(3)计算加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_51作为公钥。

3.5.2 加密

(1)取随机数加密算法加密后字符串长度不变 加密的长度取决于_密码体制_52加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_53

(2)密文加密算法加密后字符串长度不变 加密的长度取决于_密码学_54加密算法加密后字符串长度不变 加密的长度取决于_密码学_55加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_56

3.5.3 解密

(1)密文加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_57

(2)计算加密算法加密后字符串长度不变 加密的长度取决于_密码学_58

(3)明文加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_59加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_60

3.6 基于身份的公钥密码算法

基于身份的公钥密码算法思想就是简化公钥基础设施对证书的管理,即把用户的身份和公钥结合在一起。因为用户的公钥就是用户的身份,故而加密方不需要验证公钥证书。用户把自己的身份提交给可信密钥生成中心,可信密钥生成直行返回给用户私钥,不用证书机构CA来授权,这是基于身份加密体制的最大优点。

3.7 对称密码算法和公钥加密算法

3.7.1 共同点

均有加密算法、解密算法、加密密钥、解密密钥。

3.7.2 不同点

(1)对称密码算法加密密钥和解密密钥相同。公钥加密算法加密密钥和解密密钥不同,分为公钥和私钥。

(2)假设系统中有加密算法加密后字符串长度不变 加密的长度取决于_密码学_49个用户,使用对称加密体制实现保密通信,系统共需要管理加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_62个密钥;使用公钥加密体制,需要管理加密算法加密后字符串长度不变 加密的长度取决于_密码体制_63个密钥。

4 数字签名

4.1 数字签名的概念与基本特性

数字签名是手写签名的数字化形式,与所签信息绑定在一起。包含下列基本特性:签名可信性、不可抵赖性、不可复制性、不可伪造性、数据完整性。

4.2 数字签名的步骤

(1)参数建立(产生用户的公私钥对);

(2)签名生成(产生消息的签名);

(3)签名验证(验证消息的签名是否合法)。

4.3 RSA数字签名

4.3.1 参数建立(同RSA加密)

(1)取不同的大素数加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_20

(2)计算加密算法加密后字符串长度不变 加密的长度取决于_密码体制_21加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_22

(3)取加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_23,且加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_24加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_25互素;

(4)计算加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_26加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_27,即加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_28

(5)公钥加密算法加密后字符串长度不变 加密的长度取决于_密码学_29,私钥加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_30

4.3.2 签名生成

消息加密算法加密后字符串长度不变 加密的长度取决于_密码体制_75加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_76加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_77是对消息的签名。

4.3.3 签名验证

获取公钥加密算法加密后字符串长度不变 加密的长度取决于_密码学_29后,验证加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_79是否成立。

4.4 ECC数字签名

4.4.1 参数建立(同ECC加密)

(1)有限域加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_46上的椭圆曲线加密算法加密后字符串长度不变 加密的长度取决于_密码学_47,基点加密算法加密后字符串长度不变 加密的长度取决于_密码体制_48具有较大素数阶加密算法加密后字符串长度不变 加密的长度取决于_密码学_49

(2)取随机数加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_50作为私钥;

(3)计算加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_51作为公钥;

(4)确定哈希函数加密算法加密后字符串长度不变 加密的长度取决于_密码学_86

4.4.2 签名生成

(1)对于消息加密算法加密后字符串长度不变 加密的长度取决于_密码学_40,取随机整数加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_88,计算加密算法加密后字符串长度不变 加密的长度取决于_密码体制_89

(2)计算加密算法加密后字符串长度不变 加密的长度取决于_密码体制_90加密算法加密后字符串长度不变 加密的长度取决于_密码学_91

(3)加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_92即为消息的签名。

4.4.3 签名验证

(1)计算加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_93

(2)计算加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_94加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_95

(4)计算加密算法加密后字符串长度不变 加密的长度取决于_密码学_96,如果加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_97为无穷远点,则签名无效;

(5)否则令加密算法加密后字符串长度不变 加密的长度取决于_密码学_98加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_99为的横坐标);

(6)若加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_100,则签名有效,若加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_101,则签名无效。

4.5 公钥密码算法用于加密与签名的不同

加密时,发送方需要用对方的公钥进行加密,接收方收到密文后用私钥解密。签名时,信息由发送方用自己的私钥进行签名,接收方收到后,用公钥进行验证。

加密提供可靠信息传输的功能,签名提供认证服务。

5 哈希函数

5.1 Hash函数的概念和基本性质

Hash函数是一种将任意长度的输入变换为固定长度的输出且不可逆的单向密码体制。Hash函数有下列性质:(1)单向性、(2)弱抗碰撞性、(3)强抗碰撞性。强抗碰撞包含弱抗碰撞、单向性。

5.2 MD5

分组长度:512比特

消息摘要长度:128比特

基本算法步骤:

(1)填充消息:首先对消息进行填充处理,使得填充后的消息总长度为加密算法加密后字符串长度不变 加密的长度取决于_密码学_102。填充的方法是在最后添加一位“1”,后续都是“0”。

(2)添加原消息长度:在填充后的消息后面再添加一个64比特的二进制数表示填充前原始消息的长度。

(3)初始化缓冲区:MD5中有四个32位缓冲区,用A、B、C、D表示,用来存储散列计算的中间结果和最终结果。

(4)循环散列计算:以512比特为单位,将消息分成N个分组,对每个分组进行散列处理,每一轮的处理会对缓冲区(A、B、C、D)进行更新。压缩函数有4轮,每轮对缓冲区进行16步迭代。

(5)输出散列值:所有的N个分组消息都处理完后,最后一轮得到的四个缓冲区的值即为整个消息的散列值。

5.3 SHA-1

分组长度:512比特

消息摘要长度:160比特

基本算法步骤:

(1)填充消息:首先对消息进行填充处理,使得填充后的消息总长度为加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_103。填充的方法是在最后添加一位“1”,后续都是“0”。

(2)添加原消息长度:在填充后的消息后面再添加一个64比特的二进制数表示填充前原始消息的长度。

(3)初始化缓冲区:SHA-1中有五个32位缓冲区,用A、B、C、D、E表示,用来存储散列计算的中间结果和最终结果。

(4)循环散列计算:以512比特为单位,将消息分成N个分组,对每个分组进行散列处理,每一轮的处理会对缓冲区(A、B、C、D、E)进行更新。压缩函数有4轮,每轮对缓冲区进行20步迭代。

(5)输出散列值:所有的N个分组消息都处理完后,最后一轮得到的五个缓冲区的值即为整个消息的散列值。

6 密钥交换协议

6.1 Diffie-Hellman密钥交换协议

(1)假设Alice与Bob要在他们之间建立一个共享的密钥。Alice与Bob首先选定一个大素数加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_35,并选取加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_105为乘法群加密算法加密后字符串长度不变 加密的长度取决于_密码学_106中一个生成元;

(2)Alice秘密选定一个整数加密算法加密后字符串长度不变 加密的长度取决于_密码体制_107,并计算加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_108。发送加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_109给Bob;

(3)Bob秘密选定一个整数加密算法加密后字符串长度不变 加密的长度取决于_密码体制_110,并计算加密算法加密后字符串长度不变 加密的长度取决于_密码体制_111。发送加密算法加密后字符串长度不变 加密的长度取决于_密码体制_112给Alice;

(4)Alice计算加密算法加密后字符串长度不变 加密的长度取决于_密码体制_113

(5)Bob计算加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_114

因为加密算法加密后字符串长度不变 加密的长度取决于_密码体制_115,Alice与Bob计算得到加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_02的是相同的。加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_02可以作为他们以后通信的共享会话密钥。

6.2 X.509证书标准

证书包括公钥和有关证书授予的人员或实体的信息、有关证书的信息以及有关颁发证书的认证机构(CA,Certification Authority)的可选信息。接收证书的实体是证书的主体。证书的颁发者和签名者是CA。

加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_118

7 密码学的实际应用

云计算拥有强大的计算能力,可以帮助人们执行复杂的计算。但是,保护用户数据私密性是必须解决的关键问题,因为数据一旦加密后,用户是不能对加密结果做任何操作的,只能进行存储、传输。同态加密提供了一种对加密数据进行处理的功能,意味着先计算再加密与先加密再运算所得到的结果是一样的,即存在加密算法E,使得加密算法加密后字符串长度不变 加密的长度取决于_密码体制_119。它允许用户通过加密保护数据的私密性,同时允许云服务器对密文执行任意可计算的运算,得到的结果是对相应明文执行相应运算结果的有效密文。同态加密现在最需要解决的问题在于:效率。效率一词包含两个方面,一个是加密数据的处理速度,一个是这个加密方案的数据存储量。全同态加密的实现,可以为隐私数据在云平台上的分析带来方便,例如同态加密应用机器学习中,可以实现在云服务器的强大算力帮助下进行隐私数据的机器学习。

8 计算题例题

8.1 RSA计算

已知加密算法加密后字符串长度不变 加密的长度取决于_密码体制_120

(1)求私钥。

加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_121加密算法加密后字符串长度不变 加密的长度取决于_密码体制_122

加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_123加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_124

加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_125加密算法加密后字符串长度不变 加密的长度取决于_密码体制_126

(2)明文,求密文,并从密文还原出明文。

加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_127

加密算法加密后字符串长度不变 加密的长度取决于_密码学_128

(3)在消息生成签名,然后验证该签名。

加密算法加密后字符串长度不变 加密的长度取决于_密码学_129

加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_130

8.2 ECC计算

已知加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_131是在有限域加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_132上的椭圆曲线。

(1)证明加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_133加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_134在该椭圆曲线上。

加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_135

加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_136,因此在椭圆曲线上;

加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_137

加密算法加密后字符串长度不变 加密的长度取决于_密码学_138,因此在椭圆曲线上。

(2)计算加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_139

加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_140加密算法加密后字符串长度不变 加密的长度取决于_密码体制_141

加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_142加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_143

(3)计算加密算法加密后字符串长度不变 加密的长度取决于_密码体制_144

加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_145

加密算法加密后字符串长度不变 加密的长度取决于_密码体制_146加密算法加密后字符串长度不变 加密的长度取决于_公钥密码_147

加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_148加密算法加密后字符串长度不变 加密的长度取决于_公钥加密_149

加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_150加密算法加密后字符串长度不变 加密的长度取决于_加密算法加密后字符串长度不变_151

加密算法加密后字符串长度不变 加密的长度取决于_密码体制_152