期末复习整理的内容。
古典密码
置换密码
置换密码又称换位密码(Transposition Cipher),是指将明文中各字符的位置次序重新排列得到密文的一种密码体制(根据一定的规则重新排列明文,以便打破明文的结构特性)。
栅栏密码(The Rail-Fence Cipher)详解 - SwordCreater - 博客园 (cnblogs.com)
斯巴达人所使用的密码棒就是置换密码。密码棒加密时沿着木棒写上明文字母,展开的羊皮条上的
这个密钥就是括号内的替换形成一个闭环,没有出现的就是自己对应自己。
代换密码
代换密码也称代替密码,就是将明文中每个字符替换成另外一个字符,代替后的各字母保持原来的位置,再对密文进行逆替换就可以恢复出明文。
- 猪圈密码(共济会密码)猪圈密码(Pigpen)-CSDN博客
- 凯撒密码凯撒(Caesar)加密/解密 - Bugku CTF
- 仿射密码2.8 仿射密码 | 第二章:模运算与多种古典密码 |《密码学入门》| Python 技术论坛 (learnku.com)
转轮密码
Enigma
分组密码
分组密码算法(Block Cipher Algorithm)是将输入数据划分成固定长度的分组进行加解密的一类对称密码算法。
分组密码的安全性主要依赖于密钥,而不依赖于对加密算法和解密算法的保密。因此,分组密码的加密和解密算法可以公开。(Kerckhoff原则)
所谓分组密码是将明文分成一组一组,在密钥的控制下,经过加密变换生成一组一组的密文。
Step 1:将明文消息x1, x2, …, xi, …划分成等长的消息组(x0, …, xn-1),(xn, …, x2n-1),…
Step 2:在密钥k=k0, k1, …, kt-1的控制下按固定的加密算法一组一组进行加密。
Step 3:最后输出一组一组密文(y0, y1, …, ym-1)(ym, ym+1, …, y2m-1),…。
原理
代换
如果明文和密文的分组长度都为n比特,那么明文和密文的每个分组都有2^n个可能的取值。为使加密运算可逆(使解密运算可行),明文的每个分组都应产生唯一一个密文分组,这样的变换是可逆的,称明文分组到密文分组的可逆变换为代换。可选n=r∙n0,其中r和n0都是正整数,将设计n个变量的代换变为设计r个较小的子代换,而每个子代换有个n0输入变量。
一般n0都不太大,称每个子代换为代换盒,简称S盒。
扩散
扩散是将明文的统计特性散布到密文中去,使明文的每位影响密文中多位的值,等价于密文中每位均受明文中多位的影响,即从密文中不能获得明文的统计特性。(简言之:明文变一点,密文变很多)
结构
Feistel网络(Feistel Net)
DES
SP网络(Substitution-permutation Net)
AES
包含四种子步骤:
- 字节替代
- 行移位
- 列混淆
- 轮密钥加
DES
DES使用56位的密钥和64位的明文块进行加密。DES算法的分组大小是64位,因此,如果需要加密的明文长度不足64位,需要进行填充;如果明文长度超过64位,则需要使用分组模式进行分组加密。因为密钥长度太短已经导致不安全。
加密步骤
初始置换IP
如表所示,主要是对64bit的明文M中各位进行换位,打乱明文中各位的排列次序。
轮函数 F
64bit的明文M经过初始置换IP后分成左、右两部分,记为L0和R0,各32bit,经过16轮迭代后再输出。
每轮迭代的结构和Feistel结构一样:
图中虚线
子密钥Ki的生成
- 置换选择PC1:初始密钥K为64bit,首先置换选择PC1置换。
- 循环左移:将置换后的56bit分为各28bit的左、右两半,分别记为C0和D0。在第i轮分别对Ci-1和Di-1进行循环左移,移位后的结果作为求下一轮子密钥的输入,同时也作为置换选择PC2的输入。
- 置换选择PC2:通过置换选择PC2产生的48bit的Ki,即为i轮的子密钥,作为轮函数f (Ri-1, Ki)的输入。
置换选择PC1与循环左移LS还有置换选择PC2都是根据相应的表。
扩展置换E
将32bit的Ri扩展成48bit。E将32bit的输入分成8组,每组4bit,经置换E的扩展后,变成每组6bit输出。扩展后的结果与子密钥Ki进行异或运算,结果作为S盒的输入。
S盒代换
DES算法中除了S盒是非线性变换外,其余变换均为线性变换,S盒是经过精心设计和严格挑选的。故DES算法保密的关键在于S盒!
在轮函数F中每有8个S盒。每个S盒的输入长为6位,输出长为4位
根据这个例题来看一下。输入为011001,首尾为01,故对应序号为1的行,也就是第二行。1100转换为16进制为8+4=12故根据表得到9,再转换为二进制得到1001。
P盒置换
将S盒的32bit输出进行重新排列,排列后的32bit即为函数的输出。
逆初始置换4
将第16轮迭代的输出经过逆初始置换IP-1处理得到密文C。
解密过程
算法相同,字密钥使用顺序相反。
AES
AES(Advanced Encryption Standard)加密是一种对称密钥加密算法,它是目前应用最为广泛的密码学标准之一。
AES算法采用的加密密钥长度有128位、192位和256位三种不同的长度。
相对于早期常用的加密算法如DES(Data Encryption Standard)算法,AES算法具有更高的安全性和更快的加密速度。
AES加密的基本思路是将原始的明文分成固定长度的块(通常为128位),然后通过密钥进行加密,得到密文。
在解密时,再用相同的密钥将密文解密为原始的明文。
SSL/TLS
SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是现代网络中最常用的加密方法。通过使用证书和公钥进行通信,确保数据传输过程的安全性和完整性。应用场景包括网站访问、电子邮件发送、VoIP、VPN等。
VPN(Virtual Private Network)
VPN
是建立在互联网上的私有网络,通过在公网上进行加密通信,提供远程访问和安全通信等功能。VPN可以通过SSL/TLS和IPsec等协议来实现加密传输。SSH(Secure Shell)
SSH
是一种安全的远程登录协议,提供通过加密连接远程主机的方式。SSH通过使用公钥和私钥来进行身份验证,并通过对通信数据进行加密和完整性检查来保证其安全性。HTTPS
HTTPS(Hypertext Transfer Protocol Secure)是一个在HTTP协议基础上加入了
SSL/TLS
加密功能的协议,使用端口号443进行传输,保证网站访问时的安全性。需要注意的是,网络加密可以有效保护数据的安全性和隐私性,但不能完全保证网络的安全性,因此还需要使用防火墙、IDS/IPS等安全设备来进一步加强网络的安全性。同时,对于加密方法的选择也应根据具体应用场景,合理合适地选用适当的加密方式。
数学基础
具有无限个元素的域称为无限域,只包含有限个元素的域称为有限域。有限域中元素的个数称为域的阶。
现代密码学理论与实践 - 第4章 有限域 (ustc.edu.cn)
后面的加密过程会用到模加与模乘。
加密过程
What is AES Encryption and How Does It Work? | Cybernews
高级加密标准 - 维基百科,自由的百科全书 (wikipedia.org)
将数据分成块
首先,我们必须记住AES是一个块密码。与流密码不同,它以比特块而不是逐位加密数据。它的每个块在4乘4的布局中包含一个16字节的列。由于一个字节包含8位,我们得到128位块大小(16x8=128)。因此,AES加密的第一步是将明文(未写入代码的文本)分成这些块。
密钥扩展
使用Sam Trenholme’s webpage (samiam.org)算法,根据初始密钥生成每轮密钥。
轮密钥加(Adding round key)
首先要第一步就是轮密钥加
回合密钥将会与原矩阵合并。在每次的加密循环中,都会由主密钥产生一把回合密钥(透过Rijndael密钥生成方案产生),这把密钥大小会跟原矩阵一样,以与原矩阵中每个对应的字节作异或(⊕)加法。
字节代换(Byte substitution)
AES算法根据预先建立的称为Rijndael S-box的表用代码替换每个字节。
Shifting rows
进行行变换
第一行:保持不变
第二行:循环左移一个字节
第三行:循环左移两个字节
第四行:循环左移三个字节
Mixing columns
这一步将每一列乘以一个预定义的矩阵,将State乘以一个固定的矩阵A,对State逐列变换,每一列中的每个字节被变换成一个新值,直到4列都变换完毕。从而得到一个全新的代码块。
此步骤亦可视为Rijndael有限域之下的矩阵乘法。MixColumns
函数接受4个字节的输入,输出4个字节,每一个输入的字节都会对输出的四个字节造成影响。因此ShiftRows
和MixColumns
两步骤为这个密码系统提供了扩散性。
Rinse and repeat
现在,AES加密算法将经历更多轮的字节替换、移位行、混合列和添加轮密钥。
数据相同的轮数取决于AES的密钥长度:
128位密钥:9轮
192位密钥:11轮
256位密钥:13轮
因此,在256位密钥加密的情况下,数据会连续13次执行前面提到的步骤。
然而,这还没有结束。
在前面提到的9轮、11轮或13轮加密之后,还有一轮额外的加密。在这个额外的轮中,算法只经历了字节替换、行移位和添加轮键的阶段。它省略了Mixing columns的步骤。
为什么?因为在这一点上,这是多余的。换句话说,在不显著改变数据的情况下,该操作将使用过多的处理能力。
因此,在加密过程的最后,数据将经过以下轮数:
128位密钥:10轮
192位的密钥:12轮
256位密钥:14轮
SM4
文档gmbz.org.cn/main/viewfile/20180108015408199368.html
参考SM4加密算法原理和简单实现(java) - kentle - 博客园 (cnblogs.com)
SM4算法是用于WAPI的分组密码算法。是一种32轮的迭代非平衡Feistel结构的分组加密算法,其密钥长度和分组长度均为128。
WAPI(Wireless LAN Authentication and Privacy Infrastructure):无线局域网鉴别和保密基础结构,是一种安全协议,同时也是中国无线局域网安全强制性标准。
- 数据分组长度:128比特
- 密钥分组长度:128比特
- 加密算法:32轮迭代结构
- 密钥扩展算法:32轮迭代结构
- 以字节(8位)和字(32位)为单位进行数据处理
算法流程
基本密码部件:
- S盒:以字节为单位的非线性替换,起混淆作用,它的输入和输出都是8位的字节。4个S盒并置构成非线性变换τ,是以以字节为单位的非线性替换。
- 线性变换部件L:以字为处理单位的线性变换,输入输出都是32位的字,起扩散作用。
- 合成变换T:由非线性变换τ和线性变换L复合而成,以字为数据处理单位,起混淆和扩散的作用。
设输入为X,则先对X进行非线性变换τ,再进行L变换。记为:
T(X) = L(τ(X))
SM4 的加解密(左)和密钥拓展(右)的流程图
- 输入的明文为 128bit 的数据,将其按位拆分成 4 个 32bit 的数据 x0,x1,x2,x3𝑥0,𝑥1,𝑥2,𝑥3
当 i=0𝑖=0 时为第一次轮变换,一直进行到 i=31𝑖=31 结束 - xi𝑥𝑖 暂时不做处理,将 xi+1,xi+2,xi+3𝑥𝑖+1,𝑥𝑖+2,𝑥𝑖+3 和轮密钥 rki𝑟𝑘𝑖 异或得到一个 32bit 的数据,作为盒变换的输入
即 sbox_input=xi+1⊕xi+2⊕xi+3⊕rki𝑠𝑏𝑜𝑥_𝑖𝑛𝑝𝑢𝑡=𝑥𝑖+1⊕𝑥𝑖+2⊕𝑥𝑖+3⊕𝑟𝑘𝑖,⊕⊕ 符号代表异或运算 - 将 sbox_input𝑠𝑏𝑜𝑥_𝑖𝑛𝑝𝑢𝑡 拆分成 4 个 8bit 数据,分别进行盒变换,之后再将 4 个 8bit 输出合并成一个 32bit 的 sbox_output𝑠𝑏𝑜𝑥_𝑜𝑢𝑡𝑝𝑢𝑡
- 将刚才获得的 sbox_output𝑠𝑏𝑜𝑥_𝑜𝑢𝑡𝑝𝑢𝑡 分别循环左移 2,10,18,24 位,得到 4 个 32bit 的结果,记移位结果为 y2,y10,y18,y24𝑦2,𝑦10,𝑦18,𝑦24
- 将移位的结果 y2,y10,y18,y24𝑦2,𝑦10,𝑦18,𝑦24 与盒变换输出 sbox_output𝑠𝑏𝑜𝑥_𝑜𝑢𝑡𝑝𝑢𝑡 和 xi𝑥𝑖 异或,得到 xi+4𝑥𝑖+4
即 xi+4=sbox_output⊕y2⊕y10⊕y18⊕y24⊕xi𝑥𝑖+4=𝑠𝑏𝑜𝑥_𝑜𝑢𝑡𝑝𝑢𝑡⊕𝑦2⊕𝑦10⊕𝑦18⊕𝑦24⊕𝑥𝑖 - 至此完成了一轮的加解密运算
在实际加解密过程中,上述运算要执行 32 轮,同时使用 32 个不同的 rki𝑟𝑘𝑖,rki𝑟𝑘𝑖 由密钥拓展生成 - 最后将生成的最后 4 个 32bit 数据 x35,x34,x33,x32𝑥35,𝑥34,𝑥33,𝑥32 合并成一个 128bit 的数据 output𝑜𝑢𝑡𝑝𝑢𝑡,作为最后的输出结果
工作模式
为了能在各种应用场合使用DES,1980年NIST公布了DES的4种工作模式:电码本(Electronic Code Book,ECB)模式、密文分组链接(Cipher Block Chaining,CBC)模式、密文反馈(Cipher Feedback,CFB)模式和输出反馈(Output Feedback,OFB)模式。
2001年12月公布了AES的5种工作模式,即ECB、CBC、CFB、OFB和CTR(计数器模式,Counter Mode)。
模式 | 描述 | 应用举例 |
---|---|---|
ECB | 每个明文组独立地用同一密钥加密 | 传输短数据 |
CBC | 加密算法的输入是上一个密文组与当前明文组的异或。 | 传输数据分组;认证 |
CFB | 每次只处理输入的j比特,将上一个密文单元用作加密算法输入的一部分,算法的输出再与当前明文异或以产生当前密文。 | 传输数据流; 认证 |
OFB | 与CFB模式类似,不同之处是当前加密算法的输入是上一次加密算法的输出。 | 噪声信道上传输数据流(如卫星通信) |
CTR | 每个明文组与加密后计算器值异或,对后续的分组,计算器进行累加。 | 高速数据传输 |
这里仅关注ECB模式如何处理
•ECB用于短数据(如加密密钥)时非常理想,因此如果需要安全地传递DES密钥,ECB是最合适的模式。
•ECB的最大特性是同一明文分组在消息中重复出现的话,产生的密文分组也相同。
•ECB用于长消息时可能不够安全,如果消息有固定结构,密码分析者有可能找出这种关系。
序列密码
也称为流密码,是对称密码算法的一种,也是密码学的一个重要分支。
序列密码诞生较早,而且具有实现简单、便于硬件实施、效率高等特点,因此获得了广泛应用,并且在专用机构或机密机构中具有明显优势,序列密码在许多重要应用领域已成为主流密码。
二元加法流密码是目前最为常用的流密码体制,其加密变换可表示为yi=zi ⊕ xi。
密钥序列生成器KG
序列密码的关键在于密钥序列生成器KG的设计。一般来说,KG输入的种子密钥k是较短的,人们却希望它的输出密钥序列对不知情的人来说是随机的。
- 种子密钥k的变化量足够大,一般应在2^128以上。
- KG产生的密钥序列z具有极大周期,一般应不小于2^55。
- 密钥序列z具有均匀的n元分布,即在一个周期环上,某特定形式的n长比特串与其求反,两者出现的频数大抵相当(如均匀的游程分布)。
- 密钥序列z不可由一个低级(如小于106级)的LFSR产生,也不可与一个低级的LFSR产生的序列有比率很小的相异项。
- 利用统计方法由密钥序列z提取关于KG的结构或种子密钥z的信息在计算上不可行。
- 混乱性,即密钥序列z的每一比特均与种子密钥k的大多数比特有关
- 扩散性,即种子密钥k任一比特的改变要引起密钥序列z在全貌上的变化。
KG的一般模式如图所示,f一般由m序列生成器构成,提供若干周期大、统计特性好的序列”x1,x2, “⋯,”xm”(称为驱动序列)。
F就是把f产生的多条驱动序列综合在一起的一些非线性编码手段,目的是有效地破坏和掩盖多条驱动序列中存在的规律或关系,提高线性复杂度。
线性反馈移位寄存器(LFSR)
- n级线性反馈移位寄存器的状态周期小于等于(2^n)-1。
- 输出序列的周期与状态周期相等,也小于等于(2^n)-1。只要选择合适的反馈函数便可使序列的周期达到最大值(2^n)-1。
- 周期达到最大值的序列称为m序列。
ZUC算法
祖冲之序列密码算法(简称ZUC算法)是由我国自主设计的密码算法,包括祖冲之算法、加密算法128-EEA3和完整性算法128-EIA3。
ZUC算法是一个面向字的序列密码,以一个128位的密钥和一个128位的初始向量作为输入。
一串32位字的密钥序列作为输出,输出的密钥序列可以用来加密或解密。
该算法的执行分为两个阶段:初始化阶段和工作阶段在第一阶段中,首先将密钥和初始向量进行初始化,算法运行但不产生任何输出。
第二阶段是工作阶段,在每个时钟脉冲的控制下,产生一个32位字的输出
由一个顶层的16段的LFSR、中间层比特重组(简称BR)和底层非线性函数F组成。
公钥密码
- 产生一对密钥pk 、sk ,其中pk 是公钥,sk 是私钥。
- 将加密密钥pk予以公开,另一密钥sk则被保密。
- 使用公钥加密明文m,表示为 c=Epk(m),其中c是密文,E是加密算法。
- 收到密文c后,用自己的私钥sk解密,表示为m=Dsk(c) ,其中D是解密算法。只有接收方知道其自身的私钥sk,所以其他人都无法对c解密。
RSA
RSA加密算法 - 维基百科,自由的百科全书 (wikipedia.org)
RSA 介绍 - CTF Wiki (ctf-wiki.org)
ElGamal
数学基础:欧几里得求逆,模幂。
离散对数问题(Discrete Logarithm Problem,DLP):
- 在一个有限域 Fp中,给定一个素数 p、一个生成元 g 以及一个元素 h = g^x mod p,求 x。离散对数问题的难解性在于,虽然计算h相对容易,但反向计算 x 非常困难,特别是在p足够大时。
ElGamal加密算法基于Diffie-Hellman密钥交换,其过程如下:
- 选择一个大的素数p和它的本原根g。
- 发送方选择一个随机数a,满足1 < a < p-1,并计算公钥h = g^a mod p。
- 发送方将公钥h发送给接收方。
- 接收方选择一个随机数b,满足1 < b < p-1,并计算密钥k = h^b mod p。
- 接收方使用密钥k对明文进行加密,生成密文。
- 发送方使用公钥h对密文进行解密,得到明文。
在ElGamal加密算法中,明文被表示为一个有限域上的元素,通过模数运算和指数运算进行加密和解密。由于采用了公钥和私钥分离的方式,使得加密和解密过程可以分别由不同的实体完成。
SM2
数学基础
平方剩余
二次剩余 - OI Wiki (oi-wiki.org)用来检验点是否在椭圆上。
椭圆曲线密码体制(ECC)
- 选取参数:
- 选取一条椭圆曲线,得到Ep(a, b)。将明文消息通过编码嵌入曲线上得到点M=Pm
- 取Ep(a, b)的生成元G, Ep(a, b)和G为公开参数。
- 产生公钥和私钥:
- 用户选取x为私钥,Y=xG为公钥。
加密:
选随机正整数k,密文为C=(C1,C2)
其中C1=kG, C2=M+kY
解密:
C2-xC1=M+kY-xkG=M
算法详情
•SM2算法是一种椭圆曲线公钥密码算法,其密钥长度为256bit。
•SM2算法有基于素域和二元扩域的椭圆曲线。
杂凑函数
输入可以任意长度,输出是固定长度
计算hash值的速度比较快
防碰撞特性(Collisionresistance)
消息认证码与HMAC算法
消息认证码(英语:Message authentication code,缩写为MAC),又译为消息鉴别码、文件消息认证码、讯息鉴别码、信息认证码,是经过特定算法后产生的一小段信息,检查某段消息的完整性,以及作身份验证。它可以用来检查在消息传递过程中,其内容是否被更改过,不管更改的原因是来自意外或是蓄意攻击。同时可以作为消息来源的身份验证,确认消息的来源。
生日攻击
就是碰撞,
MD5
python - 深入理解MD5:Message Digest Algorithm 5 - 个人文章 - SegmentFault 思否
Sha1
SHA-1: SHA-1是最早的SHA版本,产生160位(20字节)的哈希值。然而,由于存在安全漏洞,SHA-1已经被认为是不安全的,不再推荐使用。
SM3
【密码学】一文读懂SM3-阿里云开发者社区 (aliyun.com)
数字签名
数字签名是指签名者使用私钥对签名的杂凑值进行密码运算得到的结果,并且该结果只能用签名者的公钥进行验证,用于确认待签名数据的完整性、签名者身份的真实性和签名者行为的抗抵赖性。
直接方式:直接方式是指数字签名的执行过程只有通信双方参与,不需要第三方仲裁者。
具有仲裁方式的数字签名:发送方X对发往接收方Y的消息签名后,将消息及其签名先发给仲裁者A,A对消息及其签名验证完后,再连同一个表示已通过验证的指令一起发往收方Y。此时由于A的存在,X无法对自己发出的消息予以否认。
可以采用RSA和ElGamal公钥密码进行加密。
DSS
数字签名标准(Digital Signature Standard, DSS)是美国NIST公布的联邦信息处理标准FIPS PUB 186。
DSS采用了哈希函数SHA-1和签名算法(Digital Signature Algorithm, DSA)。 DSA是Schnorr和ElGamal签名算法的变种
SM2
SM2包括公钥加密和签名两个算法,安全性都是基于椭圆曲线上的离散对数问题困难性,SM2签名包括
SM9
SM9数字签名算法由于其双线性对的结构,安全性很高,并且随着计算能力的增长,双线性对的运算速度也会进一步提升。因此,SM2数字签名算法与SM9数字签名算法有着很广泛的应用前景。
身份认证
密码技术主要包括加密保护技术和安全认证技术,保密通信和身份认证是密码学的主要任务。
身份认证又称识别(Identification)、实体认证或身份证实(Identity Verification),是证实一个实体与其所声称的身份是否相符的过程。
X.509认证协议
一、TLS/SSL证书——确保Web服务器的安全
PKI是SSL协议和TLS协议的基础,他们又是浏览器HTTPS安全连接的基础。如果没有SSL证书建立安全连接,网络犯罪分子就可以利用互联网或其他IP网络来拦截消息,常见的犯罪案例是中间人攻击。
二、数字签名和文档签名
除了用于保护传输数据安全之外,基于PKI的证书还可以用于数字签名和文档签名。
数字签名和文档签名是一种特殊类型的电子签名,它能够利用PKI来验证签名者的身份,还能验证签名文档的完整性。数字签名不能以任何方式更改或复制,因为签名是通过生成散列来创建的,该散列通过发件人的私钥进行加密。这种加密验证将签名绑定到原始信息上,可以确保发送者经过身份验证,还能保证信息本身未被篡改。
三、代码签名
代码签名通过对应用程序、驱动程序或软件程序进行数字签名,帮助应用开发商为这些程序提供进一步的保护。通过代码签名,终端用户可以相信代码没有受到第三方的篡改和破坏。为了保障代码的安全性和可信度,代码签名证书提供了软件开发商的签名、公司名称和时间戳。
四、电子邮件证书
电子邮件证书又叫做S/MIME邮件安全证书,可以验证电子邮件发件人身份并加密邮件内容,防止网络钓鱼攻击。通过加密和解密邮件及附件,验证邮件发送方的身份,S/MIME邮件安全证书可以保证邮件的真实性和完整性。
五、SSH密钥
SSH又叫做安全外壳协议,而SSH密钥是X.509证书的一种形式,它提供在安全外壳协议中使用的安全访问凭证。由于SSH协议广泛用于云服务、网络环境、文件传输工具和配置管理工具中的远程通信,因此大多数组织使用SSH密钥来验证身份并保护它们免遭误用和恶意攻击。SSH密钥可以提高安全性,实现连接过程、单点登录机制(SSO)、身份和访问管理的自动化。
六、数字身份
X.509数字证书还提供有效的数字身份认证。随着数据和应用程序从传统网络扩展到移动设备、公有云、私有云和物联网设备,身份认证变得越来越重要。数字证书不仅限于对设备进行身份验证,还可用于对人员、数据或应用程序进行身份验证。如今,由于网络攻击者越来越擅长于窃取密码,基于PKI的数字证书使用无密码身份认证来提高安全性,防止密码凭证丢失或被盗取。
什么是X.509证书?X.509证书工作原理及应用?-腾讯云开发者社区-腾讯云 (tencent.com)
密钥管理
- 密钥生成和检验:密钥生成是密钥管理的首要环节。
- 密钥交换和协商:典型的密钥交换主要有两种形式:集中式交换方案和分布式交换方案。
- 密钥保护和存储:密钥在存储、交换、装入和传送过程中的核心是保密。
- 密钥更换和装入:任何密钥的使用都应遵循密钥的生存周期。
Diffie-Hellman密钥交换协议
算法的目的是使得两个用户能够安全地交换密钥,得到一个共享的会话密钥。算法的安全性基于求离散对数的困难性。
参数生成
首先选择一个合适的有限域GF(p),其中p是一个大质数。然后从这个有限域中选择两个随机数a
和b
,其中a
是基数(通常称为私钥),b
是模数(通常称为公钥)。
接着,每个用户分别计算自己的私有值。用户A计算A_priv = a^x mod p
,用户B计算B_priv = b^y mod p
,其中x
和y
分别是A和B选定的私有指数。
密钥交换过程
用户A和B各自将自己的公开值发送给对方。公开值分别是A_pub = g^x mod p
和B_pub = g^y mod p
。
最后,用户A和B使用对方的公开值和自己的私有值来计算共享密钥。A计算出的共享密钥是K = (B_pub)^x mod p
,而B计算出的共享密钥是K = (A_pub)^y mod p
。由于离散对数问题的困难性,这两个结果实际上是相同的。