现代密码学(杨波)【第五版】(个人笔记)

现代密码学(杨波)【第五版】(个人笔记)

以下属于个人笔记,如有不当描述或错误的表达,请自行参考原书籍。本博客只做了重点的概述,书中的很多例子并没有陈列出来。如有需要可自行查看书籍。
参考书籍:现代密码学(杨波)【第一版】,现代密码学(杨波)【第五版】

目录

  • [第1章 引言](#第1章 引言)
    • [1.1 信息安全面临的威胁](#1.1 信息安全面临的威胁)
    • [1.2 信息安全模型](#1.2 信息安全模型)
    • [1.3 密码学基本概念](#1.3 密码学基本概念)
    • [1.4 几种古典密码](#1.4 几种古典密码)
  • [第2章 流密码](#第2章 流密码)
    • [2.1 流密码的基本概念](#2.1 流密码的基本概念)
    • [2.2 线性反馈移位寄存器](#2.2 线性反馈移位寄存器)
    • [2.3 线性移位寄存器的一元多项式表示](#2.3 线性移位寄存器的一元多项式表示)
    • [2.4 m序列的伪随机性](#2.4 m序列的伪随机性)
    • [2.5 m序列密码的破译](#2.5 m序列密码的破译)
    • [2.6 非线性序列](#2.6 非线性序列)
  • [第3章 分组密码体制](#第3章 分组密码体制)
    • [3.1 分组密码概述](#3.1 分组密码概述)
    • [3.2 数据加密标准](#3.2 数据加密标准)
    • [3.3 差分密码分析与线性密码分析](#3.3 差分密码分析与线性密码分析)
    • [3.4 分组密码的运行模式](#3.4 分组密码的运行模式)
    • [3.5 IDEA](#3.5 IDEA)
    • [3.6 AES算法------Rijndael](#3.6 AES算法——Rijndael)
    • [3.7 中国商用密码算法SM4](#3.7 中国商用密码算法SM4)
    • [3.8 祖冲之密码](#3.8 祖冲之密码)
  • [第4章 公钥密码](#第4章 公钥密码)
    • [4.1 密码学中一些常用的数学知识](#4.1 密码学中一些常用的数学知识)
    • [4.2 公钥密码体制的基本概念](#4.2 公钥密码体制的基本概念)
    • [4.3 RSA算法](#4.3 RSA算法)
    • [4.4 背包密码体制](#4.4 背包密码体制)
    • [4.5 Rabin密码体制](#4.5 Rabin密码体制)
    • [4.6 NTRU公钥密码系统](#4.6 NTRU公钥密码系统)
    • [4.7 椭圆曲线密码体制](#4.7 椭圆曲线密码体制)
    • [4.8 SM2椭圆曲线公钥密码加密算法](#4.8 SM2椭圆曲线公钥密码加密算法)
  • [第5章 密钥分配与密钥管理](#第5章 密钥分配与密钥管理)
    • [5.1 单钥加密体制的密钥分配](#5.1 单钥加密体制的密钥分配)
    • [5.2 公钥加密体制的密钥管理](#5.2 公钥加密体制的密钥管理)
    • [5.3 随机数的产生](#5.3 随机数的产生)
    • [5.4 秘密分割](#5.4 秘密分割)
  • [第6章 消息认证和哈希函数](#第6章 消息认证和哈希函数)
    • [6.1 消息认证码](#6.1 消息认证码)
    • [6.2 哈希函数](#6.2 哈希函数)
    • [6.3 MD5哈希算法](#6.3 MD5哈希算法)
    • [6.4 安全哈希算法](#6.4 安全哈希算法)
    • [6.5 HMAC](#6.5 HMAC)
    • [6.6 SM3哈希算法](#6.6 SM3哈希算法)
  • [第7章 数字签名和认证协议](#第7章 数字签名和认证协议)
    • [7.1 数字签名的基本概念](#7.1 数字签名的基本概念)
    • [7.2 数字签名标准](#7.2 数字签名标准)
    • [7.3 其他签名方案](#7.3 其他签名方案)
    • [7.4 SM2椭圆曲线公钥密码签名算法](#7.4 SM2椭圆曲线公钥密码签名算法)
    • [7.5 认证协议](#7.5 认证协议)
  • [第8章 密码协议](#第8章 密码协议)
    • [8.1 一些基本协议](#8.1 一些基本协议)
    • [8.2 零知识证明](#8.2 零知识证明)
    • [8.3 非交互式证明系统](#8.3 非交互式证明系统)
    • [8.4 zk-SNARK](#8.4 zk-SNARK)
    • [8.5 安全多方计算协议](#8.5 安全多方计算协议)
  • [第9章 可证明安全](#第9章 可证明安全)
    • [9.1 语义安全的公钥密码体制的定义](#9.1 语义安全的公钥密码体制的定义)
    • [9.2 语义安全的RSA加密方案](#9.2 语义安全的RSA加密方案)
    • [9.3 Paillier公钥密码系统](#9.3 Paillier公钥密码系统)
    • [9.4 Cramer-Shoup密码系统](#9.4 Cramer-Shoup密码系统)
    • [9.5 RSA-FDH签名方案](#9.5 RSA-FDH签名方案)
    • [9.6 BLS短签名方案](#9.6 BLS短签名方案)
    • [9.7 基于身份的密码体制](#9.7 基于身份的密码体制)
    • [9.8 分叉引理](#9.8 分叉引理)
  • [第10章 网络加密与认证](#第10章 网络加密与认证)
    • [10.1 网络通信加密](#10.1 网络通信加密)
    • [10.2 Kerberos认证系统](#10.2 Kerberos认证系统)
    • [10.3 X.509认证业务](#10.3 X.509认证业务)
    • [10.4 PGP](#10.4 PGP)
  • [第11章 区块链](#第11章 区块链)
    • [11.1 区块链的基本概念、构造及实现](#11.1 区块链的基本概念、构造及实现)
    • [11.2 zerocoin](#11.2 zerocoin)
    • [11.3 zerocash](#11.3 zerocash)

密码技术中的加密方法包括单钥密码体制(又称为对称密码)和公钥密码体制,而单钥密码体制又包括流密码和分组密码。本书在第1章介绍现代密码学的基本概念后,在第2~4章分别介绍流密码、分组密码、公钥密码。不管哪种密码体制都需要用到密钥,因此密钥分配与密钥管理也是密码技术的重要内容,这部分内容在第5章介绍。信息的安全性除要考虑保密性外,还需考虑信息的真实性、完整性、顺序性、时间性以及不可否认性。本书以3章的篇幅(第6章消息认证和哈希算法、第7章数字签名和认证协议、第8章密码协议)介绍这部分内容。第9章可证明安全介绍如何刻画公钥密码体制的语义安全性。第10章网络加密与认证介绍密码技术在网络中的具体应用。第11章介绍区块链,特别是其中使用的密码技术。书中的4.1.5节卡米歇尔数、4.1.11节循环群、4.1.12节循环群的选取、8.3节非交互式证明系统、8.4节zk-SNARK、8.5节安全多方计算协议、第9章可证明安全可供研究生使用。

全书总览思维导图:

模拟发送流程图:

第1章 引言

  • 1.1 信息安全面临的威胁
  • 1.1.1 安全威胁

被动攻击 :被动攻击即窃听,是对系统的保密性进行攻击,如搭线窃听、对文件或程序的非法复制等,以获取他人的信息。被动攻击又分为两类:一类是获取消息的内容,很容易理解;第二类是进行业务流分析,假如我们通过某种手段,例如加密,使得敌手从截获的消息无法得到消息的真实内容,然而敌手却有可能获得消息的格式、确定通信双方的位置和身份以及通信的次数和消息的长度,这些信息可能对通信双方来说是敏感的。被动攻击因不对消息做任何修改,因而是难以检测 的,所以抗击这种攻击的重点在于预防而非检测

主动攻击:非法入侵、攻击者主动向系统骚扰等。这种攻击包括对数据流的某些篡改或产生某些假的数据流。主动攻击又可分为以下3类:中断(中断是对系统的可用性进行攻击,如破坏计算机硬件、网络或文件管理系统)、篡改(篡改是对系统的完整性进行攻击,如修改数据文件中的数据、替换某一程序使其执行不同的功能、修改网络中传送的消息内容等)、伪造(伪造是对系统的真实性进行攻击,如在网络中插入伪造的消息或在文件中插入伪造的记录)。

篡改是修改原数据信息,不增加新的数据。伪造是插入新的数据信息。

  • 1.1.2 入侵者和病毒

需主程序需要依附应用程序或者系统程序运行,不需主程序就是可以在计算机中独立运行,类似一个可行性文件(.exe)

  • 1.2 信息安全模型

通信双方欲传递某个消息,需通过以下方式建立一个逻辑上的信息通道:首先在网络中定义从发方到收方的一个路由,然后在该路由上共同执行通信协议。

如果需要保护所传信息以防对手对其保密性、认证性等构成的威胁,则需要考虑通信的安全性。安全传输技术有以下两个基本成分:

(1)消息的安全传输,包括对消息的加密和认证。加密的目的是将消息搞乱以使敌手无法读懂,认证的目的是检查发送者的身份。

(2)通信双方共享的某些秘密信息,如加密密钥。

为获得消息的安全传输,可能还需要一个可信的第三方,其作用可能是负责向通信双方发布秘密信息或者在通信双方有争议时进行仲裁。

安全的网络通信必须考虑以下 4 个方面:

(1)加密算法;

(2)用于加密算法的秘密信息;

(3)秘密信息的分布和共享;

(4)使用加密算法和秘密信息以获得安全服务所需的协议。

  • 1.3 密码学基本概念
  • 1.3.1 保密通信系统

明文:明文是指未经加密的原始数据,任何人都可以直接读取和理解的内容。

密文:密文是经过加密处理后的数据,只有拥有正确密钥的人才能解密并恢复为明文。密文通常是不可读的,且看起来是随机的字符。

加密:加密是将明文转换为密文的过程。这个过程使用特定的算法和密钥来确保数据的安全性。

解密:解密是将密文转换回明文的过程。这个过程同样使用特定的算法和密钥。

密钥:密钥是用于加密和解密的秘密信息。它可以是一个字符串、数字或其他形式的数据。密钥相对于一个参数,例如,加密C = E(K, P),密文 C 由加密算法 E 在密钥 K 的控制下对明文 P 变换得到,解密P = D(K, C),持有正确密钥才能从密文还原明文。

参考博客:密码学基本概念

单密钥密码体制(对称密码体制):加密密钥和解密密钥相同(使用加密算法可以推出解密算法,例如a = b + 3 ,其中b是明文,a是密文,这个方程就是加密算法,怎么得到b=a-3
这个就是解密算法。)

双密钥密码体制(非对称密码体制):加密密钥和解密密钥不相同(使用加密算法很难推出解密算法。)

  • 1.3.2 密码体制分类

单钥体制:加密密钥和解密密钥相同。对明文加密有两种方式:一种是明文消息按字符(如二元数字)逐位地加密,称为流密码;另一种是将明文消息分组(含有多个字符),逐组地进行加密,称为分组密码。单钥体制不仅可用于数据加密,也可用于消息的认证。

双钥体制:加密密钥和解密密钥不同。

  • 1.3.3 密码攻击概述
攻击类型 攻击者掌握的内容 攻击目标对象
唯密文攻击 • 加密算法 • 截获的部分密文 密文本身(试图恢复明文或密钥)
已知明文攻击 • 加密算法 • 截获的部分密文 • 一个或多个明文密文对 加密密钥(利用已知明文密文对推导密钥)
选择明文攻击 • 加密算法 • 截获的部分密文 • 自己选择的明文消息,及由密钥产生的相应密文 加密密钥或加密算法结构(主动构造明文探测)
选择密文攻击 • 加密算法 • 截获的部分密文 • 自己选择的密文消息,及相应的被解密的明文 解密密钥或解密算法结构(主动构造密文探测)
  • 1.4 几种古典密码

    古典密码的加密是将明文的每一字母代换为字母表中的另一字母,代换前首先将明文字母用等价的十进制数字代替,再以代替后的十进制数字进行运算,字母与十进制数字的对应关系如表 1-2 所示。大致就是将字母映射一个表或者多个表。

  • 1.4.1 单表代换密码

凯撒密码:

移位变换:

k取3的时候就是凯撒密码,就是变换一下位置,把字母代表的数字左移或者右移。

仿射变换

利用数学公式来推的,可以举个例子是反函数和原函数, f 1 : f_1: f1: y= 2 x 2^x 2x 和 f 2 : f_2: f2: x = l o g 2 y log_2y log2y, f 1 f_1 f1 当x=4的时候y=16,把y=16带入到 f 2 f_2 f2中得到x=4。相对我们设计的函数来说,仿射变换就更有深度,gcd(a, 26)=1,表明a和26是互素的。参考视频:单表代换密码 | 多表代换密码 |

  • 1.4.2 多表代换密码

参考视频:单表代换密码 | 多表代换密码 |

第2章 流密码

  • 2.1 流密码的基本概念

流密码组成包括明文、密钥流,1bit的明文和1bit的密钥通过加密算法生成相应的密文。参考视频:流密码,明文有对应的密钥(不像之前密钥是单一的),密钥的生成又和记忆原件有关系(例如c++中使用i++一样或者i+=2,类似的规则运行)。

分组密码:它将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。例如,x1=1001 1000, 就可以分成两组b1 = 1001,b2 = 1000, 分别上图(a)的过程加密。参考文献:分组密码

  • 2.1.1 同步流密码

同步流密码:密钥流生成跟明文字符没有关系 ,只由种子密钥(和初始向量)决定。自同步流密码:密钥流依赖于前面已产生的若干个密文字符。

  • 2.1.2 有限状态自动机

有限状态自动机有限状态自动机就是一个"有记忆的机器":它在任何时刻都处于某个状态,接收一个输入,然后根据规则产生一个输出,并跳转到下一个状态,也就是根据这个规则形成了密钥流生成器。

  • 2.1.3 密钥流生成器

简单来说就是将最初的密钥k,经过密钥流生成器,使得多段明文带有处理后的密钥 k n k_n kn。

  • 2.2 线性反馈移位寄存器

反馈移位寄存器:看下图a1、a2,a3都是存储器,首先a1存储内容输出,将a1存储器内容和a2相乘在同a3存储器内容异或得到新的a3,将a2内容移到a1,原a3内容移到a2,新a3内容放在a3,继续这样循环,得到密钥流。是否是线性还是非线性需要看f反馈函数的操作,反馈函数只由 ⊕(模2加)构成。

密钥生成的方式,参考视频:【流密码 | 线性反馈移位寄存器 | 信息安全|密码学 | 网络安全考研 | 期末速成】

下图是一个三级的线性反馈移位寄存器。

下图是一个三级的非线性反馈移位寄存器。

  • 2.3 线性移位寄存器的一元多项式表示

c 1 c_1 c1, c 2 c_2 c2... c n c_n cn 只取0或1

  • 2.4 m序列的伪随机性

流密码的安全性取决于密钥流的安全性,要求密钥流序列有好的随机性,以使密码分析者对它无法预测。也就是说,即使截获其中一段,也无法推测后面是什么。如果密钥流是周期的,要完全做到随机性是困难的。严格地说,这样的序列不可能做到随机,只能要求截获比周期短的一段时不会泄露更多信息,这样的序列称为伪随机序列。

伪随机性简单来说:攻击者获得我得密钥的一部分(小于我密钥生成算法的一个完整周期,线性反馈移位寄存器生成密钥流是有周期的),攻击者就不能泄露更多信息。

  • 2.5 m序列密码的破译

参考视频:【4.3 反馈移位寄存器与m序列的破译】【【密码学】m-序列密码的破译(LFSR、NFSR、m-序列)】

  • 2.6 非线性序列

密钥流生成器可分解为驱动子系统和非线性组合子系统,驱动子系统常用一个或多个线性反馈移位寄存器来实现,非线性组合子系统用非线性组合函数F来实现。为了使密钥流生成器输出的二元序列尽可能复杂,应保证其周期尽可能大、线性复杂度和不可预测性尽可能高,因此常使用多个LFSR来构造二元序列,称每个LFSR的输出序列为驱动序列。显然密钥流输出序列的周期不大于各驱动序列周期的乘积,因此,提高输出序列的线性复杂度应从极大化其周期开始。二元序列的线性复杂度指生成该序列的最短LFSR的级数,最短LFSR的特征多项式称为二元序列的极小特征多项式。

参考视频:【现代密码学_电子科技大学】

  • 2.6.1 Geffe序列生成器
  • 2.6.2 JK触发器

  • 2.6.3 Pless生成器

  • 2.6.4 钟控序列生成器

第3章 分组密码体制

  • 3.1 分组密码概述

将明文分成n组(x1,x2...xn),x1组全用k1密钥,x2组全用k2密钥...xn组用kn密钥,使用加密算法进行加密,解密原理类似。这里的n和下面的不一致。

设计原则

  • 3.1.1 代换

  • 3.1.2 扩散和混淆

扩散,就是将明文的统计特性散布到密文 中去,实现方式是使得密文中每一位由明文中多 位产生。

混淆是使密文和密钥之间 的统计关系变得尽可能复杂,以使敌手无法得到密钥。

  • 3.1.3 Feistel密码结构

很多分组密码的结构从本质上说都是基于一个称为 Feistel 网络的结构。Feistel 提出利用乘积密码可获得简单的代换密码,乘积密码指顺序地执行两个或多个基本密码系统,使得最后结果的密码强度高于每个基本密码系统产生的结果,Feistel 还提出了实现代换和置换的方法。其思想实际上是 Shannon 提出的利用乘积密码实现混淆和扩散思想的具体应用。

加密结构

每组明文分为左右两半L和R,利用下面公式进行迭代更新。

L r + 1 = R r R r + 1 = L r ⊕ F ( k r , R r ) \begin{array}{l} \mathbf{L}{r+1}=\mathbf{R}{r} \\ \mathbf{R}{r+1}=\mathbf{L}{r} \oplus F\left(k_{r}, \mathbf{R}_{r}\right) \end{array} Lr+1=RrRr+1=Lr⊕F(kr,Rr)

下图左边是Feistel正向网络,右边是逆向网络。

Feistel网络的实现与以下参数和特性有关:
(1) 分组大小。分组越大则安全性越高,但加密速度就越慢。分组密码设计中最为普遍使用的分组大小是 64 比特。
(2) 密钥大小。密钥越长则安全性越高,但加密速度就越慢。现在普遍认为 64 比特或更短的密钥是不安全的,通常使用 128 比特长的密钥。
(3) 轮数。单轮结构远不足以保证安全性,多轮结构可提供足够的安全性。典型地,轮数取为 16。
(4) 子密钥产生算法。该算法的复杂性越高,则密码分析的困难性就越大。
(5) 轮函数。轮函数的复杂性越高,密码分析的困难性也越大。

解密结构

Feistel 解密过程本质上和加密过程是一样的,算法使用密文作为输入,但使用子密钥 K i K_i Ki 的次序与加密过程相反,即第一轮使用 K n K_n Kn,第二轮使用 K n − 1 K_{n-1} Kn−1,一直下去,最后一轮使用 K 1 K_1 K1。这一特性保证了解密和加密可采用同一算法。

  • 3.2 数据加密标准

DES(Data Encryption Standard)是迄今为止世界上最为广泛使用和流行的一种分组密码算法,它的分组长度为 64 比特,密钥长度为 56 比特(原始密钥是64bit,但是其中8bit作为校验位)。

  • 3.2.1 DES描述

流程如下图,64bit的明文输入,根据初始置换表进行置换,置换后的数据进行16轮的Feistel加密迭代,之后进行逆初始置换,输出密文。参考视频:【DES加密算法|密码学|信息安全】【密码学之分组密码】(https://www.bilibili.com/video/BV1Nm42177PQ?vd_source=168824c4edd29b0b905915fd6879c9c8

  • 3.2.2 二重DES
    使用2个DES加密。

  • 3.2.3 两个密钥的三重DES 和 3个密钥的三重DES
    如下图,上面 k 1 k_1 k1、 k 2 k_2 k2、 k 3 k_3 k3就是3个密钥的三重DES,下面的就是2个密钥的。

  • 3.3 差分密码分析与线性密码分析

属于已知明文攻击(Known-Plaintext Attack),即攻击者知道一些明文和对应的密文对,试图推导出密钥。

  • 3.3.1 差分密码分析

差分密码分析是迄今已知的攻击迭代密码最有效的方法之一,其基本思想是:通过分析明文对的差值对密文对的差值的影响来恢复某些密钥比特。

将特定的输入差异和对应的输出差异列成表格,寻找其中期望概率大于基于随机置换发生的概率的输入输出差异。参考博客:差分密码分析,参考视频:,【分组密码差分分析-特征,特征的概率】

寻找特征:分析 S 盒(S-box)的非线性特性,找出高概率的差分路径。
选择明文:选择大量具有特定输入差分 ΔP 的明文对。
筛选密文:加密这些明文对,观察对应的密文对。
密钥恢复:对于满足特定输出差分 ΔC 的密文对,猜测最后一轮的子密钥。如果猜测正确,解密后的差分应该符合预期的特征概率;如果猜测错误,概率会显著降低。通过统计大量数据,可以筛选出正确的子密钥。

  • 3.3.2 线性密码分析

线性密码分析是对迭代密码的一种已知明文攻击,它利用的是密码算法中的"不平衡(有效)的线性逼近"。

  • 3.4 分组密码的运行模式

背景:分组密码加密明文分组的长度是固定的,而实用中待加密消息数据量是不定的,数据格式可能是多样的,所以制定下面4中运行模式,需要这些模式来解决如何把长消息分成块并链接起来的问题。

参考视频:【【SM4加密算法】| SMS4 | 对称加密| 分组加密| 国密| 密码学| 信息安全|】

SM4 算法是分组密码算法,其中,数据分组长度为 128 比特,密钥分组长度也为 128 比特。加密算法与密钥扩展算法都采用 32 轮迭代结构,以字节(8 位)和字(32 位)为单位进行数据处理。

  • 3.8 祖冲之密码
  • 3.8.1 算法中的符号及含义
  • 3.8.2 祖冲之密码的算法结构
  • 3.8.3 祖冲之密码的运行
  • 3.8.4 基于祖冲之密码的机密性算法128-EEA3

第4章 公钥密码

  • 4.1 密码学中一些常用的数学知识
  • 4.1.1 群、环、域

群(半群和群)定义

环定义

域定义

参考视频:【群环域串讲】

  • 4.1.2 素数和互素数

    互素数:2个或者多个整数的最大公因子是1,例如(3, 7, 8, 11, 17)就是互素的,参考博客:互素数(互质数)

  • 4.1.3 模运算

取模运算

  • 4.1.4 模指数运算

取模运算

  • 4.1.5 费尔马定理、欧拉定理、卡米歇尔定理

这 3 个定理在公钥密码体制中起着重要作用。

费尔马定理

这里a可以是p的倍数,上面排除了a是p的倍数,就是互素数gad(a,p)=1。

欧拉定理

其中φ(n)函数(为欧拉函数),找到小于n且与n互素的数的数量,例如n=5时,互素的数量为4,互素数(1,2,3,4),n=3时,互素的数量为2,互素数(1,2),证明参考视频:【欧拉定理的简单证明】

卡米歇尔定理

  • 4.1.6 素性检验

欧拉函数,找到小于n且与n互素的数的数量,例如n=5时,互素数(1,2,3,4),n=3时,互素数(1,2)。使用Miller-Rabin检测法,当p=5时,欧拉素数(1,2,3,4), 1 2 1^2 12mod5=1, 2 2 2^2 22mod5=-1, 3 2 3^2 32mod5=-1, 4 2 4^2 42mod5=1/font,4mod5 等价于 (4-5)mod5= -1>

  • 4.1.7 欧几里得算法

欧几里得(Euclid)算法是数论中的一个基本技术,是求两个正整数的最大公因子的简化过程。而推广的欧几里得算法不仅可求两个正整数的最大公因子,而且当两个正整数互素时,还可求出其中一个数关于另一个数的乘法逆元。

求最大公因子

设a、b是任意两个正整数,gcd()表示求最大公因子,就有以下重要结论:

求乘法逆元

(a,b)=1 等价于gcd(a, b)=1

  • 4.1.8 中国剩余定理

中国剩余定理是数论中最有用的一个工具,它有两个用途:一是如果已知某个数关于一些两两互素的数的同余类集,就可重构这个数;二是可将大数用小数表示、大数的运算通过小数实现。

【最美数学系列 - 什么是中国剩余定理?】https://www.bilibili.com/video/BV1gf4y1S7LR?vd_source=168824c4edd29b0b905915fd6879c9c8

  • 4.1.9 离散对数

  • 4.1.10 平方剩余

  • 4.1.11 循环群
  • 4.1.12 循环群的选取
  • 4.1.13 双线性映射
  • 4.1.14 计算复杂性
  • 4.2 公钥密码体制的基本概念

公钥密码体制的概念是在解决单钥密码体制中最难解决的两个问题时提出的,这两个问题是密钥分配和数字签字。

  • 4.2.1 公钥密码体制的原理

公钥密码算法的最大特点是采用两个相关密钥将加密和解密能力分开,其中一个密钥是公开的,称为公开密钥,简称公开钥,用于加密;另一个密钥是为用户专用,因而是保密的,称为秘密密钥,简称秘密钥,用于解密。因此公钥密码体制也称为双钥密码体制。算法有以下重要特性:已知密码算法和加密密钥,求解密密钥在计算上是不可行的。

加密和解密过程

认证

局限性: 在实际应用中,特别是用户数目很多时,以上认证方法需要很大的存储空间,因为每个文件都必须以明文形式存储以方便实际使用,同时还必须存储每个文件被加密后的密文形式即数字签字,以便在有争议时用来认证文件的来源和内容。改进的方法是减小文件的数字签字的大小,即先将文件经过一个函数压缩成长度较小的比特串,得到的比特串称为认证符。认证符具有这样一个性质:如果保持认证符的值不变而修改文件这在计算上是不可行的。用发送者的秘密钥对认证符加密,加密后的结果为原文件的数字签字。

在以上认证过程中,由于消息是由用户自己的秘密钥加密的,所以消息不能被他人篡改,但却能被他人窃听。这是因为任何人都能用用户的公开钥对消息解密。为了同时提供认证功能和保密性,可使用双重加、解密,如图 4-3 所示。

  • 4.2.2 公钥密码算法应满足的要求
  • 4.2.3 对公钥密码体制的攻击

和单钥密码体制一样,如果密钥太短,公钥密码体制也易受到穷搜索攻击。对公钥密码算法的第二种攻击法是寻找从公开钥计算秘密钥的方法。还有一种仅适用于对公钥密码算法的攻击法,称为可能字攻击。例如,对 56 比特的 DES 密钥用公钥密码算法加密后发送,敌手用算法的公开钥对所有可能的密钥加密后与截获的密文相比较。如果一样,则相应的明文即 DES 密钥就被找出。因此不管公钥算法的密钥多长,这种攻击的本质是对 56 比特 DES 密钥的穷搜索攻击。抵抗方法是在欲发送的明文消息后添加一些随机比特。

  • 4.3 RSA算法

RSA算法迄今为止理论上最为成熟的公钥密码机制。参考视频:【【RSA加密算法】| RSA加密过程详解 | 公钥加密| 密码学| 信息安全|】https://www.bilibili.com/video/BV1YQ4y1a7n1?vd_source=168824c4edd29b0b905915fd6879c9c8

  • 4.3.1 算法描述

  • 4.3.2 RSA算法中的计算问题

  • 4.3.3 一种改进的RSA实现方法

  • 4.3.4 RSA的安全性

为了保证RSA算法的安全性,它的密钥长度需要一再增大。

  • 4.3.5 对RSA的攻击

  • 4.4 背包密码体制

参考视频:【【密码学】背包密码体制】https://www.bilibili.com/video/BV19z421b7uM?vd_source=168824c4edd29b0b905915fd6879c9c8

  • 4.5 Rabin密码体制

对 RSA 密码体制,n 被分解成功,该体制便被破译,即破译 RSA 的难度不超过大整数的分解。但还不能证明破译 RSA 和分解大整数是等价的,虽然这一结论已得到普遍共识。Rabin 密码体制已被证明对该体制的破译与分解大整数是一样困难的。

Rabin 密码体制是对 RSA 的一种修正,它有以下两个特点:

  • 它不是以一一对应的单向陷门函数为基础,对同一密文,可能有两个以上对应的明文。
  • 破译该体制等价于对大整数的分解。
  • 4.6 NTRU公钥密码系统

NTRU 是一种基于环的公钥密码系统,由 Jeffrey Hoffstein 等人在 1998 年提出,系统的特点是密钥短且容易产生、算法的运算速度快、所需的存储空间小。

  • 4.7 椭圆曲线密码体制

4.3 节已经说过,为保证 RSA 算法的安全性,它的密钥长度需一再增大,使得它的运算负担越来越大。相比之下,椭圆曲线密码体制 ECC(Elliptic Curve Cryptography)可用短得多的密钥获得同样的安全性,因此具有广泛的应用前景。ECC 已被 IEEE 公钥密码标准 P1363 采用。

  • 4.7.1 椭圆曲线
  • 4.7.2 有限域上的椭圆曲线
  • 4.7.3 椭圆曲线上的点数
  • 4.7.4 明文消息到椭圆曲线上的嵌入
  • 4.7.5 椭圆曲线上的密码

参考视频:【【ECC加密算法】| ECC加密原理详解| 椭圆曲线加密| 密码学| 信息安全】https://www.bilibili.com/video/BV1v44y1b7Fd?vd_source=168824c4edd29b0b905915fd6879c9c8

  • 4.8 SM2椭圆曲线公钥密码加密算法

SM2 是中国国家密码管理局颁布的中国商用公钥密码标准算法,它是一组椭圆曲线密码算法,其中包含加解密算法、数字签名算法。

SM2 算法与国际标准的 ECC 算法比较:

(1)ECC 算法通常采用 NIST 等国际机构建议的曲线及参数,而 SM2 算法的参数需要利用一定的算法产生。而由于算法中加入了用户特异性的曲线参数、基点、用户的公钥点信息,故使得 SM2 算法的安全性明显提高。

(2)在 ECC 算法中,用户可以选择 MD5 或 SHA-1 等国际通用的哈希算法。而 SM2 算法中则使用 SM3 哈希算法,SM3 算法输出为 256 比特,其安全性与 SHA-256 算法基本相当。

SM2 算法分为基于素数域和基于二元扩域两种。本节仅介绍基于素数域的 SM2 算法。

第5章 密钥分配与密钥管理

  • 5.1 单钥加密体制的密钥分配
  • 5.1.1 密钥分配的基本方法

两个用户(主机、进程、应用程序)在用单钥密码体制进行保密通信时,首先必须有一个共享的秘密密钥,而且为防止攻击者得到密钥,还必须时常更新密钥。因此,密码系统的强度也依赖于密钥分配技术。两个用户 A 和 B 获得共享密钥的方法有以下几种:

  1. 密钥由 A 选取并通过物理手段发送给 B
  2. 密钥由第三方选取并通过物理手段发送给 A 和 B
  3. 如果 A、B 事先已有一密钥,则其中一方选取新密钥后,用已有的密钥加密新密钥并发送给另一方
  4. 如果 A 和 B 与第三方 C 分别有一个保密信道,则 C 为 A、B 选取密钥后,分别在两个保密信道上发送给 A、B。最常用
  • 5.1.2 一个实例
  • 5.1.3 密钥的分层控制
  • 5.1.4 会话密钥的有效期

会话密钥:用来加密大量通话数据的密钥,每次会话更换一次会话密钥。
主密钥:有一个可信的密钥分配中心 KDC,网络中每一用户都与 KDC 有一个共享的密钥,称为主密钥。KDC 为通信双方建立一个短期内使用的密钥,称为会话密钥,并用主密钥加密会话密钥后分配给两个用户。

  • 5.1.5 无中心的密钥分配
  • 5.1.6 密钥的控制使用

因为密钥可根据其不同用途分为会话密钥和主密钥两种类型,所以还希望对密钥的使用方式加以某种控制,会话密钥又称为数据加密密钥,主密钥又称为密钥加密密钥。如果主密钥泄露了,则相应的会话密钥也将泄露,因此主密钥的安全性应高于会话密钥的安全性。一般在密钥分配中心以及终端系统中,主密钥都是物理上安全的,如果把主密钥当作会话密钥注入加密设备,那么其安全性则降低。

2.控制矢量

这一方案比上一方案灵活。方案中对每一会话密钥都指定一个相应的控制矢量,控制矢量分为若干字段,分别用于说明在不同情况下密钥是被允许使用还是不被允许使用,且控制矢量的长度可变。控制矢量是在 KDC 产生密钥时加在密钥之中的。

  • 5.2 公钥加密体制的密钥管理
  • 5.2.1 公钥的分配
  1. 公开发布(公开发布指用户将自己的公钥发给每一其他用户,或向某一团体广播)
  2. 公用目录表(公用目录表指建立一个公用的公钥动态目录表,目录表的建立、维护以及公钥的分布由某个可信的实体或组织承担,称这个实体或组织为公用目录的管理员)
  3. 公钥管理机构
  4. 公钥证书
  • 5.2.2 用公钥加密分配单钥密码体制的密钥
  • 5.2.3 Diffie-Hellman密钥交换

Diffie-Hellman 密钥交换(简称 DH)是一种让双方在不安全信道上协商出相同共享密钥的算法。它本身不加密任何数据,而是解决"如何在不被窃听的情况下,让两个从未见过面的人拥有同一个秘密"这个问题。因为它本身不能加密,导致如果进行攻击将 g a g^a ga换成 g w g^w gw,B在解K的时候就不是和Alice通话了。

  • 5.3 随机数的产生
  • 5.3.1 随机数的使用

在密钥分配与密钥管理中,随机数扮演着"生命线"的角色。可以说,如果没有高质量的随机数,再强大的加密算法也会形同虚设。1. 生成"不可预测"的密钥(防止穷搜索攻击)(如果生成密钥的随机数发生器不够随机(比如总是按时间戳生成),攻击者就可以预测出你下一个密钥是什么。)2. 实现"一次一密"(会话密钥的核心)3. 防止"重放攻击"(抗重放)
生成时: 保证密钥不可预测(防猜)。 使用时: 保证每次会话密钥独一无二(防破)。 验证时: 保证通信的新鲜性(防重放)。 认证时: 保证身份的真实性(防冒充)。

  • 5.3.2 随机数源
  • 5.3.3 伪随机数产生器

  • 5.3.4 基于密码算法的随机数产生器

  • 5.3.5 随机比特产生器

1.BBS(blum-blum-shub)产生器

2.rabin产生器

3.离散指数比特产生器

  • 5.4 秘密分割
  • 5.4.1 秘密分割门限方案
  • 5.4.2 Shamir门限方案

  • 5.4.3 基于中国剩余定理的门限方案

第6章 消息认证和哈希函数

消息认证是一个过程,用于验证接收消息的真实性(的确是由它所声称的实体发来的)和完整性(未被篡改、插入、删除),同时还用于验证消息的顺序性和时间性(未重排、重放、延迟)。除此之外,在考虑网络安全时还需考虑业务的不可否认性,即防止通信双方中的某一方对所传输消息的否认。实现消息的不可否认性可通过数字签字,数字签字也是一种认证技术,也可用于抗击主动攻击。消息认证机制和数字签字机制都有一产生认证符的基本功能,这一基本功能又作为认证协议的一个组成部分。认证符是用于认证消息的数值,它的产生方法又分为消息认证码(Message Authentication Code, MAC)、哈希函数(Hash Function)两大类。

  • 6.1 消息认证码

消息认证码 MAC(Message Authentication Code)是经过特定算法后产生的一小段信息,检查某段消息的完整性,以及作身份验证 。它可以用来检查在消息传递过程中,其内容是否被更改过,不管更改的原因是来自意外或是蓄意攻击。同时可以作为消息来源的身份验证,确认消息的来源。参考博客:消息认证码 https://blog.csdn.net/HinsCoder/article/details/127897196

  • 6.1.1 消息认证码的定义及使用方式

1.消息认证码MAC 是关于消息和密钥的函数,产生固定长度的值作为认证符

2.发送方A 使用双方共享的密钥K 对消息M 计算MAC

3.将MAC 附加在消息M 后一起发送给接收方B

4.相比哈希函数多了个密钥K的参与,这个密钥可以认为是身份认证的依据

  • 6.1.2 产生MAC的函数应满足的要求
  • 6.1.3 数据认证算法

数据认证算法是最为广泛使用的消息认证码中的一个,专门用于检测数据是否遭到未经授权的修改。DAA 通过数据分块、链式加密、生成DAC,发送方将数据和 DAC 一起发送。接收方收到后,用相同的密钥和算法重新计算 DAC,并与收到的 DAC 进行比对。如果两者一致,即可确认数据在传输过程中未被篡改。

  • 6.1.4 基于祖冲之密码的完整性算法128-EIA3
  • 6.2 哈希函数

哈希函数 H 是一个公开函数,用于将任意长的消息 M 映射为较短的、固定长度的一个值 H(M),作为认证符,称函数值 H(M) 为哈希值或哈希码或消息摘要。哈希码是消息中所有比特的函数,因此提供了一种错误检测能力,即改变消息中任何一个比特或几个比特都会使哈希码发生改变。

  • 6.2.1 哈希函数的定义及使用方式

(1)消息与哈希码链接后用单钥加密算法加密。由于所用密钥仅为收发双方 A、B 共享,因此可保证消息的确来自 A 并且未被篡改。同时由于消息和哈希码都被加密,这种方式还提供了保密性。

(2)用单钥加密算法仅对哈希码加密。这种方式用于不要求保密性的情况,可减少处理负担。

(3)用公钥加密算法和发方的秘密钥仅加密哈希码。和(2)一样,这种方式提供认证性,又由于只有发方能产生加密的哈希码,因此这种方式还对发方发送的消息提供了数字签字,事实上这种方式就是数字签字。

(4)消息的哈希值用公钥加密算法和发方的秘密钥加密后与消息链接,再对链接后的结果用单钥加密算法加密,这种方式提供了保密性和数字签字。

(5)使用这种方式时要求通信双方共享一个秘密值 S,A 计算消息 M 和秘密值 S 链接在一起的哈希值,并将此哈希值附加到 M 后发往 B。因 B 也有 S,所以可重新计算哈希值以对消息进行认证。由于秘密值 S 本身未被发送,敌手无法对截获的消息加以篡改,也无法产生假消息。

(6)这种方式是在(5)中消息与哈希值链接以后再增加单钥加密运算,从而又可提供保密性。

由于加密运算的速度较慢,代价较高,而且很多加密算法还受到专利保护,因此在不对要求保密性的情况下,方式(2)和(3)将比其他方式更具优势。

  • 6.2.2 哈希函数应满足的条件
  • 6.2.3 生日攻击

生日攻击(Birthday Attack) 是一种密码学攻击手段,主要用于寻找哈希函数的碰撞(Collision)。它的名字来源于概率论中的"生日悖论"。在哈希函数中,找到两个不同消息具有相同哈希值的难度,远低于找到与特定消息具有相同哈希值的难度。简单来说,使用不同消息的输入(哈希函数规定输入可以无限大,输出长度固定),迫使哈希映射成同一个输出。拿到这个输出,就相当于拿到了数字签名,就可以伪造数字签名。

  • 6.2.4 迭代型哈希函数的一般结构

迭代型哈希函数(Iterated Hash Function) 是现代哈希函数(如 MD5、SHA-1、SHA-256)最基础的架构。它的核心思想是:把任意长度的输入消息,切分成固定长度的小块,然后一块一块地"吞"进一个压缩函数里,逐步更新一个固定长度的内部状态,最后输出哈希值。

  • 6.3 MD5哈希算法

MD5(单向散列算法) 的全称是Message-Digest Algorithm 5(信息-摘要算法)。 输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);不同的输入得到的不同的结果(唯一性);根据128位的输出结果不可能反推出输入的信息(不可逆);

宏观架构:消息 → 填充 → 分组 → 压缩函数迭代 → 输出哈希值

  • 6.3.1 算法描述
  • 6.3.2 MD5的压缩函数
  • 6.3.3 MD5的安全性
  • 6.4 安全哈希算法
  • 6.4.1 算法描述
  • 6.4.2 SHA的压缩函数
  • 6.4.3 SHA与MD5的比较
  • 6.4.4 对SHA的攻击现状
  • 6.5 HMAC

HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码) 是一种使用哈希函数和共享密钥来构造消息认证码(MAC)的标准方法。

HMAC = 哈希函数 + 密钥 + 双层嵌套结构。

  • 6.5.1 HMAC的设计目标

1.对密钥的使用和处理简单 2.直接使用现有Hash函数 3.进行Hash函数的替代很容易 4.保持Hash函数原有的性能 5.已知Hash的强度, MAC强度就可确定

  • 6.5.2 算法描述
  • 6.5.3 HMAC的安全性
  • 6.6 SM3哈希算法
  • 6.6.1 SM3哈希算法的描述
  • 6.6.2 SM3哈希算法的安全性

第7章 数字签名和认证协议

  • 7.1 数字签名的基本概念

数字签名流程

  • 7.1.1 数字签名应满足的要求

因此在收发双方未建立起完全的信任关系且存在利害冲突的情况下,单纯的消息认证就显得不够。数字签名技术则可有效解决这一问题。类似于手书签名,数字签名应具有以下性质:

(1)能够验证签名产生者的身份,以及产生签名的日期和时间。

(2)能用于证实被签消息的内容。

(3)数字签名可由第三方验证,从而能够解决通信双方的争议。

由此可见,数字签名具有认证功能。为实现上述 3 条性质,数字签名应满足以下要求:

(1)签名的产生必须使用发方独有的一些信息以防伪造和否认。

(2)签名的产生应较为容易。

(3)签名的识别和验证应较为容易。

(4)对已知的数字签名构造一个新的消息或对已知的消息构造一个假冒的数字签名在计算上都是不可行的。

  • 7.1.2 数字签名的产生方式

数字签名的产生可用加密算法(指将消息或消息的摘要加密后的密文作为对该消息的数字签名)或特定的签名算法。

加密算法产生

1.单钥加密

如图 7-1(a)所示,发送方 A 根据单钥加密算法以与接收方 B 共享的密钥 K 对消息 M 加密后的密文作为对 M 的数字签名发往 B。该系统能向 B 保证所收到的消息的确来自 A,因为只有 A 知道密钥 K。再者 B 恢复出 M 后,可相信 M 未被篡改,因为敌手不知道 K 就不知如何通过修改密文而修改明文。具体来说,就是 B 执行解密运算 Y=D_K(X),如果 X 是合法消息 M 加密后的密文,则 B 得到的 Y 就是明文消息 M,否则 Y 将是无意义的比特序。

2.公钥加密

如图 7-1(b)所示,发方 A 使用自己的秘密钥 SK_A 对消息 M 加密后的密文作为对 M 的数字签名,B 使用 A 的公开钥 PK_A 对消息解密,由于只有 A 才拥有加密密钥 SK_A,因此可使 B 相信自己收到的消息的确来自 A。

然而由于任何人都可使用 A 的公开钥解密密文,所以这种方案不提供保密性。为提供保密性,A 可用 B 的公开钥再一次加密,如图 7-1©所示。

签名算法产生

  • 7.1.3 数字签名的执行方式

数字签名的执行方式有两类:直接方式(数字签名的产生和验证只在发送方和接收方之间直接进行,不依赖任何第三方)和具有仲裁的方式( 数字签名的产生或验证,需要引入一个双方都信任的第三方(仲裁者/仲裁机构)来参与)。

  • 7.2 数字签名标准
  • 7.2.1 DSS的基本方式

DSS算法只能提供数字签名功能。

  • 7.2.2 数字签名算法DSA
  • 7.3 其他签名方案
  • 7.3.1 基于离散对数问题的数字签名体制

基于离散对数问题的数字签名体制是数字签名体制中最为常用的一类,其中包括 ElGamal 签名体制、DSA 签名体制、Okamoto 签名体制等。

  • 7.3.2 基于大数分解问题的数字签名体制
  • 7.3.3 基于身份的数字签名体制
  • 7.4 SM2椭圆曲线公钥密码签名算法
  • 7.5 认证协议

6.1 节介绍过消息认证的基本概念,事实上安全可靠的通信除需进行消息的认证外,还需建立一些规范的协议对数据来源的可靠性、通信实体的真实性加以认证,以防止欺骗、伪装等攻击。本节就网络通信的一个基本问题的解决介绍认证协议的基本含义,这一基本问题陈述如下:A 和 B 是网络的两个用户,他们想通过网络先建立安全的共享密钥再进行保密通信。那么 A(B)如何确信自己正在和 B(A)通信而不是和 C 通信呢?这种通信方式为双向通信,因此此时的认证称为相互认证。类似地,对于单向通信来说,认证称为单向认证。

  • 7.5.1 相互认证

通信双方都需要向对方证明自己的身份。A 要确认对面是 B,同时 B 也要确认对面是 A。

A、B两个用户在建立共享密钥时需要考虑的核心问题是保密性和实时性。为了防止会话密钥的伪造或泄露,会话密钥在通信双方之间交换时应以密文形式,所以通信双方事先就应有密钥或公开钥。

实时性则对防止消息的重放攻击极为重要,实现实时性的一种方法是对交换的每一条消息都加上一个序列号,一个新消息仅当它有正确的序列号时才被接收。但这种方法的困难性在于要求每个用户分别记录与其他每一用户交换的消息的序列号,从而增加了用户的负担,所以序列号方法一般不用于认证和密钥交换。保证消息的实时性常用以下两种方法:

(1)时间戳。如果 A 收到的消息包括一个时间戳,且在 A 看来这一时间戳充分接近自己的当前时刻,A 才认为收到的消息是新的并接受之。这种方案要求所有各方的时钟是同步的。

(2)询问-应答。用户 A 向 B 发出一个一次性随机数作为询问,如果收到 B 发来的消息(应答)也包含一个正确的一次性随机数,A 就认为 B 发来的消息是新的并接收之。

时间戳法不能用于面向连接的应用过程,这是由于时间戳法在实现时固有的困难性。首先是在不同的处理器时钟之间保持同步,那么所用的协议必须是容错的,以处理网络错误;并且是安全的,以对付恶意攻击。第二,如果协议中任一方的时钟出现错误而暂时地失去了同步,则将使敌手攻击成功的可能性增加。最后还由于网络本身存在着延迟,因此不能期望协议的各方能保持精确的同步。所以任何基于时间戳的处理过程、协议等都必须允许同步有一个误差范围。考虑到网络本身的延迟,误差范围应足够大,考虑到可能存在的攻击,误差范围又应足够小。

而询问-应答方式则不适合于无连接的应用过程,这是因为在无连接传输以前需经询问-应答这一额外的握手过程,与无连接应用过程的本质特性不符。

  • 7.5.2 单向认证

通信中只有一方向另一方证明自己的身份,而另一方不需要证明。

第8章 密码协议

  • 8.1 一些基本协议
  • 8.1.1 智力扑克
  • 8.1.2 掷硬币协议
  • 8.1.3 数字承诺协议
  • 8.1.4 不经意传输协议
  • 8.2 零知识证明

参考视频:【北邮现代密码学第十讲-密码协议1】https://www.bilibili.com/video/BV19nLJzeERk?vd_source=168824c4edd29b0b905915fd6879c9c8

  • 8.2.1 交互式证明系统
  • 8.2.2 交互式证明系统的定义
  • 8.2.3 交互式证明系统的零知识性
  • 8.2.4 零知识证明协议的组合
  • 8.2.5 图的三色问题的零知识证明
  • 8.2.6 知识证明
  • 8.2.7 简化的Fiat-Shamir身份识别方案
  • 8.2.8 Fiat-Shamir身份识别方案
  • 8.3 非交互式证明系统
  • 8.3.1 非适应性安全的非交互式零知识证明
  • 8.3.2 适应性安全的非交互式零知识证明
  • 8.3.3 BGN密码系统
  • 8.3.4 BGN密码系统的非交互式零知识证明
  • 8.4 zk-SNARK
  • 8.4.1 高级语言转化为电路举例
  • 8.4.2 算术电路
  • 8.4.3 QAP
  • 8.4.4 从QAP到zk-SNARK
  • 8.5 安全多方计算协议

【北邮现代密码学第十讲-密码协议2】https://www.bilibili.com/video/BV15nLJzvEs3?vd_source=168824c4edd29b0b905915fd6879c9c8

  • 8.5.1 安全多方计算问题
  • 8.5.2 半诚实敌手模型
  • 8.5.3 恶意敌手模型

第9章 可证明安全

任何一个现代密码算法或协议都需要先经过完整的安全性证明, 才能去讨论其理论和应用价值。 如果一个密码方案无法做到可证明安全, 那么它声称的各种能力都将只是空中楼阁.在现代密码学发展早期, 人们"证明"方案的安全性就是去寻找是否存在有效的攻击, 如果暂时找不到, 就认为这个方案是安全的. 显然, 在这种方式下, 密码学很难被认为是一门严肃的学科. 直到上世纪80年代-90年代, Goldwasser与Bellare才先后提出了密码学的可证明安全理论模型, 这也才让安全性证明具有了与一般数学证明相同的形式和框架. 那在安全性证明中, 假设、待证明结论以及用到的证明技术分别又是什么或代表什么意义呢 ?

  • 9.1 语义安全的公钥密码体制的定义
  • 9.1.1 选择明文攻击下的不可区分性
  • 9.1.2 公钥加密方案在选择密文攻击下的不可区分性
  • 9.1.3 公钥加密方案在适应性选择密文攻击下的不可区分性
  • 9.1.4 归约
  • 9.2 语义安全的RSA加密方案
  • 9.2.1 RSA问题和RSA假设
  • 9.2.2 选择明文安全的RSA加密
  • 9.2.3 选择密文安全的RSA加密
  • 9.3 Paillier公钥密码系统
  • 9.3.1 合数幂剩余类的判定
  • 9.3.2 合数幂剩余类的计算
  • 9.3.3 基于合数幂剩余类问题的概率加密方案
  • 9.3.4 基于合数幂剩余类问题的单向陷门置换
  • 9.3.5 Paillier密码系统的性质
  • 9.4 Cramer-Shoup密码系统
  • 9.4.1 Cramer-Shoup密码系统的基本机制
  • 9.4.2 Cramer-Shoup密码系统的安全性证明
  • 9.5 RSA-FDH签名方案
  • 9.5.1 RSA签名方案
  • 9.5.2 RSA-FDH签名方案的描述
  • 9.5.3 RSA-FDH签名方案的改进
  • 9.6 BLS短签名方案
  • 9.6.1 BLS短签名方案所基于的安全性假设
  • 9.6.2 BLS短签名方案描述
  • 9.6.3 BLS短签名方案的改进一
  • 9.6.4 BLS短签名方案的改进二
  • 9.7 基于身份的密码体制
  • 9.7.1 基于身份的密码体制定义和安全模型
  • 9.7.2 随机谕言机模型下的基于身份的密码体制
  • 9.8 分叉引理

第10章 网络加密与认证

  • 10.1 网络通信加密
  • 10.1.1 开放系统互连和TCP/IP分层模型
  • 10.1.2 网络加密方式

为了将数据在网络中传送,需要在数据前面加上它的目的地址,称加在数据前面的目的地址为报头,用户数据加上报头称为数据报。加强网络通信安全性的最有效且最常用的方法是加密。网络加密的基本方式有两种:链路加密和端端加密。

链路加密

链路加密简答来说就是在路由器直接加密解密

链路加密是指每个易受攻击的链路两端都使用加密设备进行加密,因此整个通信链

路上的传输都是安全的。缺点是数据报每进入一个分组交换机后都需要一次解密,原因是交换机必须读取数据报报头以便为数据报选择路由。因此,在交换机中数据报易受到攻击。链路加密时,每一链路两端的一对节点都应共享一个密钥,不同节点对共享不同的密钥,因此需提供很多密钥,每个密钥仅分配给一对节点。

端端加密

端端加密是指仅在一对用户的通信线路两端(即源节点和终端节点)进行加密,因此数据是以加密的形式通过网络由源节点传送到目标节点,目标节点用与源节点共享的密钥对数据解密。所以,端端加密可防止对网络上链路和交换机的攻击。端端加密还能提供一定程度的认证,因为源节点和终端节点共享同一密钥,所以终端节点相信自己收到的数据报的确是由源节点发来的。链路加密方式不具备这种认证功能。端端加密也有自己的缺点。由于只有目标节点能对加密结果解密,所以如果对整个数据报加密,则分组交换节点收到加密结果后无法读取报头,从而无法为该数据报选择路由。因此,主机只能对数据报中的用户数据部分加密而报头则以明文形式传送。这样,虽然用户数据部分是安全的,但却容易受业务流量分析的攻击。

链路加密缺点是需要很多不同的密钥,加密和解密会浪费相应的时间。端端加密缺点是:在网络层传输要依靠IP数据报,数据报要有报头提供给路由选择,但是端端加密把报头也加密了,无法进行路由选择。

为提高安全性,可将两种加密方式结合起来使用,如图 10-2 所示。其中主机用端端加密密钥加密数据报中用户的数据部分,然后用链路加密密钥对整个数据报再加密一次。当被加密的数据报在网络中传送时,每一交换机都使用链路加密密钥解密数据报以读取报头,然后再用下一链路的链路加密密钥加密整个数据报并发往下一交换机。所以,当两种加密方式结合起来使用时,除了在每个交换机内部数据报报头是明文形式外,其他整个过程数据报都是密文形式。

  • 10.2 Kerberos认证系统
  • 10.2.1 Kerberos V4
  • 10.2.2 Kerberos区域与多区域的Kerberos
  • 10.3 X.509认证业务
  • 10.3.1 证书
  • 10.3.2 认证过程
  • 10.4 PGP
  • 10.4.1 运行方式
  • 10.4.2 密钥和密钥环
  • 10.4.3 公钥管理

第11章 区块链

  • 11.1 区块链的基本概念、构造及实现

区块链:是可持续增长、不可篡改的分布式数据库。

  • 11.1.1 区块链要解决的问题
  • 11.1.2 区块链的建立过程
  • 11.1.3 区块链的实现
  • 11.2 zerocoin
  • 11.2.1 zerocoin使用的密码工具
  • 11.2.2 zerocoin的构造
  • 11.3 zerocash
  • 11.3.1 基本版的zerocash
  • 11.3.2 增强版zerocash
相关推荐
keven-wang1 小时前
密码学-常用公钥私钥证书文件格式
密码学
程序员JerrySUN2 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
2601_962364974 小时前
红外活体模组,Windows 设备安全身份入口解析
windows·安全·电脑
域智盾系统来啦7 小时前
电脑远程监控软件具备哪些核心能力?电脑远程监控软件企业落地核心知识点汇总
安全·远程工作·电脑远程监控软件
hz567897 小时前
手术室视频示教系统解决方案:让临床教学突破空间限制
安全·音视频·实时音视频·信息与通信·智能硬件
安全指北针8 小时前
数据安全产品 POC 验证怎么做?一套可落地的评估方法
大数据·安全
Linux运维技术栈8 小时前
如何避免绕过CDN的攻击?基于 CDN 回源请求头鉴权的防御实操与安全性剖析
nginx·安全·cdn
hasty10 小时前
一次同秒竞态,如何把污染制品送进 npm 与 TestPyPI
安全·安全威胁分析·代码复审
贾伟康11 小时前
【HarmonyOS 7新能力|037】数字盾工程封装:把接入逻辑放进可维护的分层结构
安全·harmonyos·arkts·软件架构·数字签名