前言:快考试了,做篇期末总结,都是重点与必考点。
博主预测考点:
计算题:RSA、Diffie-Hellman密钥交换、EIGamal 密钥交换、使用SHA-512算法,计算消息的Hash值、计算消息的HMAC
应用题:代替技术(1-2个)、置换技术、转轮机、分组密码、DES/AES的某一个环节
安全的三个关键目标:CIA
OSI安全架构主要关注安全攻击、安全机制和安全服务
分四类:伪装、重放、消息篡改和拒绝服务
应用:Alice 传输认证信息给Bob ,告知Bob “我是Alice,代号0101,源IP为B”,Darth 截获该信息,获取了Alice代号。
Bob 收到信息后通过了Alice的认证
Darth 在认证后重发该信息“我是Alice,代号0101,IP为D”
Bob 通过认证,并认为这个IP也是Alice使用的
Darth 通过重放获取了Bob的认证信息,从而伪装成 Bob 传输信息给Alice 。
Alice 误以为接收到Bob的消息,实际来自Darth
传统加密技术迄今仍广泛应用,DES、AES均在其中
⌛ 大多数密码体制都是这两者的多重组合
相同密钥:通信双方使用相同的密钥,这种称为单钥密码、对称密码、传统密码,如DES、AES
不同密钥:通信双方使用不同的密钥,这种称为双钥密码、非对称密码、公钥密码,如RSA
分组密码:加密算法一次处理一组元素,输出一组元素。典型的分组大小为64位或128位。(类似并行)
流密码:加密算法连续不断地处理元素,但一次只能处理一个元素,输出一个元素。元素可能是1字节,可能是1bit。(类似串行)
分组密码的应用范围比流密码要广泛
无论哪种方式,一旦推导出密钥,影响都将是灾难性的,过去、现在、未来所有使用该密钥加密的信息内容都出现了非授权泄露。
|
|
---|---|
唯密文攻击 |
|
已知明文攻击 |
|
选择明文攻击 |
|
选择密文攻击 |
|
选择文本攻击 |
|
Caesar密码是最早的代替密码,其加密原理非常简单,就是对字母表中的每个字母用它之后的第N个字母来代替
a b c d e f g h i j k l m n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 o p q r s t u v w x y z 14 15 16 17 18 19 20 21 22 23 24 25 \begin{array}{l} \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} \hline \mathrm{a} & \mathrm{b} & \mathrm{c} & \mathrm{d} & \mathrm{e} & \mathrm{f} & \mathrm{g} & \mathrm{h} & \mathrm{i} & \mathrm{j} & \mathrm{k} & \mathrm{l} & \mathrm{m} & \mathrm{n} \\ \hline 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 \\ \hline \end{array} \\ \\ \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|} \hline \mathrm{o} & \mathrm{p} & \mathrm{q} & \mathrm{r} & \mathrm{s} & \mathrm{t} & \mathrm{u} & \mathrm{v} & \mathrm{w} & \mathrm{x} & \mathrm{y} & \mathrm{z} \\ \hline 14 & 15 & 16 & 17 & 18 & 19 & 20 & 21 & 22 & 23 & 24 & 25 \\ \hline \end{array} \end{array} a0b1c2d3e4f5g6h7i8j9k10l11m12n13o14p15q16r17s18t19u20v21w22x23y24z25
记住是从0开始!
练习题
截获密文“IBQQZ FOEJOH”,已知使用Caesar加密,请恢复出明文。
【提示】密钥k在[1,3]之间
解答:当密钥 K = 1 :
还原出的明文具有实际意义,因此对应的明文为happy ending
若截获到一个用Caesar密码来加密的密文,那么参与加密运算E的密钥K只有25种可能,数量级很小,可以使用穷举攻击试出密钥K。
对集合S内的所有元素进行排列,每个元素均出现且只出现一次,即全排列
若集合S 由n个元素组成,对S内的n个元素进行全排列
□□…□□□
第1位有n种选择,第2位有n-1种…以此类推,第n-1位有2种选择,第n位有1种选择,一共有n*(n-1)*(n-2)*.......*3*2*1种,即n!
即【明文字母表X】,通过指定【序号K】的【全排列】的变换,生成密文字母表Y
密钥K有26!种可能
,远大于Caesar密码的密钥数量,可以抵挡对密钥K的穷举攻击
攻击:频率分析(可单/双字母分析)
Playfair密码是最早的多字母代替密码
规则:
插入任意填充字母
如x,继续读取奇数对
,则在最后补位,如补x
J
,则明文中的J
要被I
代换。加密:
练习题
Alice和Bob选择“monarchy”作为Playfair加密的密钥词,请画出加密矩阵。并加密明文“balloon”
解答:处理明文:明文变为ba、lx、lo、on
密文:IB、SU、PM、NA
优点:一定程度隐藏了字母统计规律
缺点:仍可以做字母频率分析,相比单表代替密码难度大一点
a b c d e f g h i j k l m n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 o p q r s t u v w x y z 14 15 16 17 18 19 20 21 22 23 24 25 \begin{array}{l} \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} \hline \mathrm{a} & \mathrm{b} & \mathrm{c} & \mathrm{d} & \mathrm{e} & \mathrm{f} & \mathrm{g} & \mathrm{h} & \mathrm{i} & \mathrm{j} & \mathrm{k} & \mathrm{l} & \mathrm{m} & \mathrm{n} \\ \hline 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 \\ \hline \end{array} \\ \\ \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|} \hline \mathrm{o} & \mathrm{p} & \mathrm{q} & \mathrm{r} & \mathrm{s} & \mathrm{t} & \mathrm{u} & \mathrm{v} & \mathrm{w} & \mathrm{x} & \mathrm{y} & \mathrm{z} \\ \hline 14 & 15 & 16 & 17 & 18 & 19 & 20 & 21 & 22 & 23 & 24 & 25 \\ \hline \end{array} \end{array} a0b1c2d3e4f5g6h7i8j9k10l11m12n13o14p15q16r17s18t19u20v21w22x23y24z25
练习题
使用Vernam密码加密信息“10 110 1110” ,对应的密钥流为 “00 100 1001”,请给出密文。
使用与明文一样长、无重复、随机的密钥来加密消息,该密钥在解密消息后就丢弃不用
极度安全,很少使用
练习题
某转轮机构成如图所示。操作员按下字母b,经过三个圆筒处理后,分别变成了哪些字母?
操作员按下字母b后,第一个圆筒旋转1次,请画出旋转后的整个转轮机结构,无需标记内部连线。
解答:(1)B -> W -> M -> I
(2)
练习题:某4位分组密码的加密规则如上所示,请使用该密码加密大写字母A(ASCII值为65)。
解答:
将十进制65 转化为8位二进制数 0100 0001
64位明文分组按照置换表进行重排列,元素的位置发生改变,产生64位的输出
64位数据继续进行16轮处理,每轮都是相同的Feistel结构,最终产生64位输出
轮函数内部又包含4种变换,分别为扩展置换、XOR、S盒置换、P盒置换
将32位输入按扩展置换表扩展成为48位输出,使得扩展后数据长度与48位子密钥 等长
将扩展置换生成的48位输出,与48位子密钥进行按位异或XOR
将48位输出每6位分成一组,每一组都通过S盒置换变为了4位
1
位和第6
位组成行号,剩余第2、3、4、5
位组成列号练习题
S盒的输入为111100,输出是什么?
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 \begin{array}{|rrrrrrrrrrrrrrrr|} \hline 14 & 4 & 13 & 1 & 2 & 15 & 11 & 8 & 3 & 10 & 6 & 12 & 5 & 9 & 0 & 7 \\ 0 & 15 & 7 & 4 & 14 & 2 & 13 & 1 & 10 & 6 & 12 & 11 & 9 & 5 & 3 & 8 \\ 4 & 1 & 14 & 8 & 13 & 6 & 2 & 11 & 15 & 12 & 9 & 7 & 3 & 10 & 5 & 0 \\ 15 & 12 & 8 & 2 & 4 & 9 & 1 & 7 & 5 & 11 & 3 & 14 & 10 & 0 & 6 & 13 \\ \hline \end{array} 1404154151121371481482214134152691113218111731015510612116129312117145931095100035678013
解答:
答案是0101
0到15
的一个置换32位输出数据进行P盒置换,仍然输出为32位数据
DES 提供了64位的密钥,但实际仅用到了其中的56位。
给64位密钥从1到64编号,忽略每个第8位,按照置换表进行选择与重新排列,产生56位的输出,分成两半: C 0 , D 0 C_0,D_0 C0,D0
C 0 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 D 0 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 \begin{array}{|llcccccc|} \hline C_{0} & 57 & 49 & 41 & 33 & 25 & 17 & 9 \\ & 1 & 58 & 50 & 42 & 34 & 26 & 18 \\ & 10 & 2 & 59 & 51 & 43 & 35 & 27 \\ & 19 & 11 & 3 & 60 & 52 & 44 & 36 \\ \hline D_{0} & 63 & 55 & 47 & 39 & 31 & 23 & 15 \\ & 7 & 62 & 54 & 46 & 38 & 30 & 22 \\ & 14 & 6 & 61 & 53 & 45 & 37 & 29 \\ & 21 & 13 & 5 & 28 & 20 & 12 & 4 \\ \hline \end{array} C0D057110196371421495821155626134150593475461533425160394653282534435231384520172635442330371291827361522294
练习题
已知64位DES密钥如下,请给出进行置换选择1后的 C 0 C_0 C0。
1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 \begin{array}{|l|l|l|l|l|l|l|l|} \hline 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \hline 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \hline 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \hline 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \hline 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \hline 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \hline 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \hline 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \hline \end{array} 1111111111111111111111111111111100000000000000000000000000000000
解答:
进行置换选择1后的 C 0 C_0 C0:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 \begin{array}{|l|l|l|l|l|l|l|} \hline 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline \end{array} 1111111111111111111111111111
56位密钥循环左移一次,产生56位的输出
迭代次数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 移位次数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 \begin{array}{|l|llllllllllllllll|} \hline \text { 迭代次数 } & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 \\ \hline \text { 移位次数 } & \color{Red} 1 &\color{Red} 1 &\color{Red} 2 &\color{Red} 2 &\color{Red} 2 &\color{Red} 2 &\color{Red} 2 &\color{Red} 2 &\color{Red} 1 &\color{Red} 2 &\color{Red} 2 &\color{Red} 2 &\color{Red} 2 &\color{Red} 2 &\color{Red} 2 &\color{Red} 1 \\ \hline \end{array} 迭代次数 移位次数 112132425262728291102112122132142152161
C 0 = 1111 0000110011001010101011 11 D 0 = 0101 0101011001100111100011 11 C 1 = 1110 0001100110010101010111 11 D 1 = 1010 1010110011001111000111 10 C 2 = 1100001100110010101010111111 D 2 = 0101010110011001111000111101 C 3 = 0000110011001010101011111111 D 3 = 0101011001100111100011110101 C 4 = 0011001100101010101111111100 D 4 = 0101100110011110001111010101 \begin{array}{l} C_{0}={\color{Red} 1111} 0000110011001010101011{\color{Red} 11} \\ D_{0}={\color{Red} 0101} 0101011001100111100011{\color{Red} 11} \\ C_{1}={\color{Red} 1110} 0001100110010101010111{\color{Red} 11} \\ D_{1}={\color{Red} 1010} 1010110011001111000111{\color{Red} 10} \\ C_{2}=1100001100110010101010111111 \\ D_{2}=0101010110011001111000111101 \\ C_{3}=0000110011001010101011111111 \\ D_{3}=0101011001100111100011110101 \\ C_{4}=0011001100101010101111111100 \\ D_{4}=0101100110011110001111010101 \end{array} C0=1111000011001100101010101111D0=0101010101100110011110001111C1=1110000110011001010101011111D1=1010101011001100111100011110C2=1100001100110010101010111111D2=0101010110011001111000111101C3=0000110011001010101011111111D3=0101011001100111100011110101C4=0011001100101010101111111100D4=0101100110011110001111010101
56位输入按照置换表进行选择与重新排列,产生48位的输出
十六进制{95},行x=9,列y=5,经S盒被代替为{2A}
十六进制{2A},行x=2,列y=A,逆S盒将其代替为{95}
将当前state矩阵的各个字节依次输入S盒,字节代替结果如上所示
state矩阵的第一行保持不变,第二行循环左移1字节,第三行循环左移2字节,第四行左移3字节
state矩阵的每一列左乘系数矩阵,相乘的结果作为新的列值
例中第一个矩阵是状态,第二个矩阵是轮密钥
将当前state矩阵与轮密钥矩阵的各个字节进行按位异或
如state中的{3A}与 轮密钥中的{29}进行XOR
无论是密文反馈模式CFB,还是输出反馈模式OFB,它们每一个分组的加密都要等待上一个加密流程的输出,所以无法并行地处理一段明文消息
当确定了明文消息划分出的分组个数N后,就确定了N个计数器的值,加密后就确定了N个参与异或运算的输出值,可以并行地为明文分组进行异或。
模式 | 描述 | 典型应用 |
---|---|---|
Electronic Codebook (ECB) | 用相同的密钥分别对明文分组单独加密 | 单个数据的安全传输(如一个加密密钥) |
Cipher Block Chaining (CBC) | 加密算法的输入是上一个密文分组和下一个明文分组的异或 | 面向分组的通用传输;认证 |
Cipher Feedback (CFB) | 一次处理输入的s位,上一个密文分组作为加密算法的输入,产生的伪随机数输出与明文异或后作为下一个单元的密文 | 面向数据流的通用传输;认证 |
Output Feedback (OFB) | 与CFB类似,只是加密算法的输入是上一次加密的输出,并且使用整个分组 | 噪声信道上的数据流的传输(如卫星通信) |
Counter(CTR) | 每个明文分组都与一个经过加密的计数器异或。对每个后续的分组,计数器增1 | 面向分组的通用传输;用于高速需求 |
通信双方发送的原始的、有意义的可读信息/数据,称为明文X
加密算法E 将 明文X 进行各种转换
每个用户都产生一对密钥
其中一个是公开的,存放于公开寄存器或其他可访问的文件中,即公钥PU
每个用户都产生一对密钥
另外一个是私有的,只有自己才知道,即私钥PR
每个用户都有公钥PU、私钥PR
选用其中一把来加密,就用剩下的一把来解密
加密算法E 读取 明文X 和 密钥PU/PR ,产生的输出就是 密文Y
解密算法D 读取 密文Y 和 密钥PR/PU ,产生的输出就是 明文X
Bob 有一个公钥环,上面有很多人的公钥,当他要和某人进行通信,就选择对应的公钥来加密
Bob 现在要发送消息给Alice,所以选择Alice的公钥 _ PUa, 将其加入到加密算法 E E E中
加密算法 E E E读取明文 X X X、公钥 _ PUa,生成密文 Y Y Y
= ( , ) =(_,) Y=E(PUa,X)
Alice收到了Bob发来的密文,使用自己的私钥 _ PRa 来还原出明文
解密算法 D D D 读取密文 Y Y Y、私钥 _ PRa,还原明文 X X X
= ( , ) =(_,) X=D(PRa,Y)
由于解密使用的私钥只有 Alice自己知道,所以其他人无法解密 ,只有 Alice具有消息的访问权
Bob 给Alice 发送明文 X X X,加密时使用的是他自己的私钥 _ PRb,生成的密文为 Y Y Y
加密算法 E E E 读取明文 X X X 和私钥 _ PRb,生成密文 Y Y Y
= ( , ) =(_,) Y=E(PRb,X)
Alice 收到了Bob 发来的密文 Y Y Y,将其输入解密算法 D D D,并从公钥环中找出发送方Bob 的公钥 _ PUb,还原出明文 X X X
解密算法 D D D 读取密文 Y Y Y 和公钥 _ PUb,生成明文 X X X
= ( , ) =(_,) X=D(PUb,Y)
= ( , ) , = ( , ) =(_,),=(_,) Y=E(PRb,X),X=D(PUb,Y)
Alice 收到了据说是Bob 发出的密文,若Alice 能使用Bob的公钥解密出明文,那么消息来源正确,因为只有Bob 才知道加密使用的私钥
用发送方的私钥签名,用接收方的公钥加密
RSA是分组密码,用到的数学基础是:欧拉定理、大整数因子分解的困难性
计算 ϕ ( ) \phi() ϕ(n)
ϕ ( ) = ϕ ( ) \phi() = \phi() ϕ(n)=ϕ(pq)
= ( − ) × ( − ) =(−)×(−) =(p−1)×(q−1)
= × = =×= =16×10=160
计算乘积n的欧拉函数 ϕ ( ) = 160 \phi()=160 ϕ(n)=160
挑选e
( ϕ ( ) , ) = (\phi(),)= gcd(ϕ(n),e)=1 < < ϕ ( ) << \phi() 1<e<ϕ(n)
插播:扩展欧几里得算法
7 ( 160 ) 7 \ ( 160) 7 (mod160)
( 160 , 7 ) = (160,7)= gcd(160,7)=1
7 ( 160 ) = 7( 160)= 7y(mod160)=1
7 = 160 + 7=160+ 7y=160x+1
7 − 160 = 7−160= 7y−160x=1
160 + 7 = = ( 160 , 7 ) 160+7==(160,7) 160x+7y=1=gcd(160,7)
ϕ ( n ) e q i d x i y i 160 7 22 1 − 1 23 7 6 1 1 1 − 1 6 1 6 1 0 1 1 0 1 1 0 \begin{array}{|c|c|c|c|c|c|} \hline \phi(n) & e & q_{i} & \mathrm{~d} & x_{i} & y_{i} \\ \hline 160 & 7 & 22 & 1 & -1 & 23 \\ \hline 7 & 6 & 1 & 1 & 1 & -1 \\ \hline 6 & 1 & 6 & 1 & 0 & 1 \\ \hline 1 & 0 & & 1 & 1 & 0 \\ \hline \end{array} ϕ(n)160761e7610qi2216 d1111xi−1101yi23−110
因此x=23=d,即所求乘法逆元
Bob 要给Alice 发送消息X,使用Alice的公钥 _ PUa 加密
算法规定将公钥中的数值e作为幂值,将数值n作为模数
= ( , ) =(_,) Y=E(PUa,X)
= ( , , ) =({,},) =E(e,n,X)
= =^ \ \ =Xe mod n
= =^ \ \ =887 mod 187
RSA 也是分组密码,可以处理的明文X < n
若Bob发送的明文X=88,Alice的公钥为{7,187},得出密文Y=11
Alice 收到密文Y后,使用她自己的私钥 _ PRa进行解密
解密算法函数与加密相同,仍然将密钥第一部分d作为幂值,第二部分n作为模数
= ( , ) =(_,) X=D(PRa,Y)
= ( { , } , ) =(\{,\},) =D({d,n},Y)
= =^ \ \ =Yd mod n
= =^{} \ \ =1123 mod 187
私钥 = { 23 , 187 } _=\{23,187\} PRa={23,187}
计算得到的结果X=88,与Bob发送的原始数值相同
小结:
练习题:
已知p=17,q=2,请使用RSA算法计算出一对公钥与私钥,并使用公钥加密明文消息“3”。
解答:已知 p=17, q=2
n = p × q = 17 × 2 = 34 n=p\times q=17\times 2=34 n=p×q=17×2=34
ϕ ( n ) = ( p − 1 ) ( q − 1 ) = 16 × 1 = 16 \phi(n)=(p-1)(q-1)=16\times 1=16 ϕ(n)=(p−1)(q−1)=16×1=16
选取 e e e使其与 ϕ ( n ) \phi(n) ϕ(n)互素,令 e = 3 e=3 e=3
计算 d d d,使得 d × e = 1 ( m o d ϕ ( n ) ) d\times e =1 (mod \ \phi (n)) d×e=1(mod ϕ(n)),即 d = e − 1 m o d 16 = 3 − 1 m o d 16 d=e^{-1} \ mod \ 16 = 3^{-1} \ mod \ 16 d=e−1 mod 16=3−1 mod 16
根据扩展欧几里得算法,有 3 x + 16 y = g c d ( 3 , 16 ) 3x+16y=gcd(3,16) 3x+16y=gcd(3,16)
ϕ ( n ) e q i d x i y i 16 3 5 1 1 − 5 3 1 3 1 0 1 1 0 1 1 0 \begin{array}{|c|c|c|c|c|c|} \hline \phi(n) & e & q_{i} & \mathrm{~d} & x_{i} & y_{i} \\ \hline 16 & 3 & 5 & 1 & 1 & -5 \\ \hline 3 & 1 & 3 & 1 & 0 & 1 \\ \hline 1 & 0 & & 1 & 1 & 0 \\ \hline \end{array} ϕ(n)1631e310qi53 d111xi101yi−510
得 x = − 5 ( m o d 16 ) = 11 x = -5 (mod 16)= 11 x=−5(mod16)=11即 d = 11 d = 11 d=11
因此公钥 { e , n } = { 3 , 34 } \{e, n\}=\{3,34\} {e,n}={3,34},私钥 { d , n } = { 11 , 34 } \{d, n\}=\{11,34\} {d,n}={11,34}。
密文 C = x e m o d n = 3 3 m o d 34 = 27 C=x^e \ mod \ n = 3^3 \ mod \ 34 = 27 C=xe mod n=33 mod 34=27。
证明: = ( ) =(_)^{_} \ \ K=(YB)XA mod q
= ( a ) (a^{_ } \ \ )^{_} \ \ (aXB mod q)XA mod q
= ( a ) (a^{_ })^{_} \ \ (aXB)XA mod q
= a a^{_ _ } \ \ aXBXA mod q
= ( a ) (a^{_ })^{_} \ \ (aXA)XB mod q
= ( a ) (a^{_ } \ \ )^{_} \ \ (aXA mod q)XB mod q
= ( ) {(_)}^{_ } \ \ (YA)XB mod q
练习题
已知A和B使用Diffie-Hellman密钥交换算法,共享参数q=11,它的一个本原根a=6,A的私钥为3,B的私钥为4,计算通信密钥K。
解答:已知 q = 11 q = 11 q=11, a = 6 a = 6 a=6, X A = 3 X_A= 3 XA=3, X B = 4 X_B= 4 XB=4,则:
A A A的公钥 Y A = a X A m o d q = 6 3 m o d 11 = 7 Y_A = a^{X_A} \ mod \ q = 6^3 \ mod \ 11 = 7 YA=aXA mod q=63 mod 11=7,
B B B的公钥 Y B = a A B m o d q = 6 4 m o d 11 = 9 Y_B = a^{A_B} \ mod \ q = 6^4 \ mod \ 11 = 9 YB=aAB mod q=64 mod 11=9,
通信密钥 K = Y B X A m o d q = 9 3 m o d 11 = 3 K = Y_B^{X_A} \ mod \ q = 9^3 \ mod \ 11 = 3 K=YBXA mod q=93 mod 11=3
或者 K = Y A X B m o d q = 7 4 m o d 11 = 3 K = Y_A^{X_B} \ mod \ q = 7^4 \ mod \ 11 = 3 K=YAXB mod q=74 mod 11=3。
= , a = =,a= q=19,a=10
Alice 选择私钥 = _= XA=5( X A < q − 1 X^A
Alice 的公钥对为: { , a , } = { , , } \{,a,_\}=\{,,\} {q,a,YA}={19,10,3}
Bob 生成一个整数 k = 6 k=6 k=6( k < q kk<q
)
收到Alice的公钥{19,10,3},计算密钥 = ( ) = = =(_)^ \ \ =^ \ \ = K=(YA)k mod q=36 mod 19=7
Alice的公钥{19,10,3}
Bob 要给Alice发送消息M=17,因此计算
= a = = _=a^ \ \ =^ \ \ = C1=ak mod q=106 mod 19=11
= = × = _= \ \ =× \ \ = C2=KM mod q=7×17 mod 19=5
Bob 将密文 、 _、_ C1、C2发送给Alice
Alice 根据 _ C1计算密钥 = ( ) = =(_)^{_} \ \ = K=(C1)XA mod q=7
根据 _ C2还原消息 = ( − ) = =(_ ^− ) \ \ = M=(C2K−) mod q=17
练习题
已知B要给A发送消息5,使用ElGamal加密,k=4,q=13,a=2,A的私钥为3,给出密钥K、密文C1与密文C2。
答:已知 M = 5 , k = 4 , q = 13 , a = 2 , X A = 3 M=5, k=4, q=13, a=2, X_A=3 M=5,k=4,q=13,a=2,XA=3
Y A = a X A m o d q = 2 3 m o d 13 = 8 Y_A=a^{X_A} \ mod \ q = 2^3 \ mod \ 13 = 8 YA=aXA mod q=23 mod 13=8
K = ( Y A ) k m o d q = 8 4 m o d 13 = 1 K = (Y_A)^k \ mod \ q = 8^4 \ mod \ 13 = 1 K=(YA)k mod q=84 mod 13=1
C 1 = a k m o d q = 2 4 m o d 13 = 3 C_1 = a^k \ mod \ q = 2^4 \ mod \ 13 = 3 C1=ak mod q=24 mod 13=3
C 2 = K M m o d q = ( 1 × 5 ) m o d 13 = 5 C_2 = KM \ mod \ q = (1×5) \ mod \ 13 = 5 C2=KM mod q=(1×5) mod 13=5
方法一:消息 M M M与哈希值 H ( M ) H(M) H(M)均对称加密并传输
❗ 转载请注明出处
作者:HinsCoder
博客链接: 作者博客主页
方法二:只对称加密哈希值并传输
方法三:双方共享校验值
方法四:消息 M M M与哈希值 H ( M ) H(M) H(M)均对称加密并加入校验值
方法一:非对称加密哈希值并传输
方法二:
可变输入
Hash函数 可应用于任意大小的数据块
固定长度
Hash函数 产生的是固定长度的输出
计算效率
对任意消息x,计算H(x)容易,硬件软件均可实现
抗原像攻击
对于Hash值 =() ,称是的原像
给定,找到满足=() 的 在计算上不可行,即不能通过哈希值反推出明文
抗弱碰撞
对任意给定的,找到满足≠ 且()=()的,在计算上不可行,即已知一个明文与其哈希值,不能找到另一个哈希值与这个已知明文的哈希值相等的明文
抗强碰撞(生日攻击)
找到任何满足()=()的偶对(,),在计算上不可行,即不能同时找到两个消息而且它们的哈希值相等
抗原像 抗弱碰撞 抗强碰撞 Hash数字签名 Y Y Y 入侵检测、病毒检测 Y 单向口令文件 Y \begin{array}{|c|c|c|c|} \hline & \text { 抗原像 } & \text { 抗弱碰撞 } & \text { 抗强碰撞 } \\ \hline \text { Hash数字签名 } & Y & Y & Y \\ \hline \text { 入侵检测、病毒检测 } & & Y & \\ \hline \text { 单向口令文件 } & Y & & \\ \hline \end{array} Hash数字签名 入侵检测、病毒检测 单向口令文件 抗原像 YY 抗弱碰撞 YY 抗强碰撞 Y
SHA-1 SHA-224 SHA-256 SHA-512 SHA- 512 / 224 SHA- 512 / 256 消息摘要长度(即哈希值长度) 160 224 256 512 224 256 消息长度 < 2 64 < 2 64 < 2 64 < 2 128 < 2 128 < 2 128 分组长度 512 512 512 1024 1024 1024 字长度 32 32 32 64 64 64 \begin{array}{|l|l|l|l|l|l|l|} \hline & \text { SHA-1 } & \text { SHA-224 } & \text { SHA-256 } & \text { SHA-512 } & \begin{array}{l} \text { SHA- } \\ 512 / 224 \end{array} & \begin{array}{l} \text { SHA- } \\ 512 / 256 \end{array} \\ \hline \text { 消息摘要长度(即哈希值长度)} & 160 & 224 & 256 & 512 & 224 & 256 \\ \hline \text { 消息长度 } & <2^{64} & <2^{64} & <2^{64} & <2^{128} & <2^{128} & <2^{128} \\ \hline \text { 分组长度 } & 512 & 512 & 512 & 1024 & 1024 & 1024 \\ \hline \text { 字长度 } & 32 & 32 & 32 & 64 & 64 & 64 \\ \hline \end{array} 消息摘要长度(即哈希值长度) 消息长度 分组长度 字长度 SHA-1 160<26451232 SHA-224 224<26451232 SHA-256 256<26451232 SHA-512 512<2128102464 SHA- 512/224224<2128102464 SHA- 512/256256<2128102464
练习:
使用SHA-512算法,计算消息36的Hash值,问:
(1)消息长度是多少个bit?
(2)填充内容P 是什么?
(3)消息长度区域L 是什么?
(4)生成的Hash长度是什么?
答:
(1) = = M=36,化二进制为:100100,因此消息的长度是6个bit
(2) + = ( ) _+_= ( ) LM+LP=896(mod1024)
+ = ( ) +_= ( ) 6+LP=896(mod1024)
= ( ) = × + _= ( )=×+ LP=890(mod1024)=n×1024+890
令 = _= LP=890(即n取0),填充内容 P:1和889个0
(3) = = M=36,继续填充 消息长度区域,消息长度为6,化为二进制110,将其放在 消息长度区域 的最低3位,其余高位填充为0,共128位
即消息长度区域为 125个0 和 110
(4)生成的Hash长度是512位(64字节)
消息认证码MAC 是关于消息和密钥的函数,产生固定长度的值作为认证符
练习题:
现在Hash函数是将所有分组进行按位异或,且分组长度b=8,填充内容P为10…00,消息长度区域共2位。
若密钥K=110,请给出消息001的HMAC。
解答: K + = 00000110 K^+ =00000110 K+=00000110
i p a d = 00110110 o p a d = 01011100 ipad = 00110110 \qquad opad = 01011100 ipad=00110110opad=01011100
S i = K + ⊕ i p a d = 00110000 S_i = K^+\oplus ipad = 00110000 Si=K+⊕ipad=00110000
Y = 001 100 11 Y = 001 \ 100 \ 11 Y=001 100 11(明文分组)
H 1 = H ( S i ∣ ∣ Y ) = S i ⊕ Y = 00000011 H_1=H(S_i \mid\mid Y) = S_i \oplus Y = 00000011 H1=H(Si∣∣Y)=Si⊕Y=00000011
S 0 = K + ⊕ o p a d = 01011010 S_0 = K^+\oplus opad = 01011010 S0=K+⊕opad=01011010
H 2 = H ( S 0 ∣ ∣ H 1 ) = S 0 ⊕ H 1 = 01011001 H_2=H(S_0 \mid\mid H_1) = S_0 \oplus H_1 = 01011001 H2=H(S0∣∣H1)=S0⊕H1=01011001
练习题:
已知Alice要为一个Hash值为2的消息制作数字签名,使用ElGamal数字签名方案,她选取q=11,a=2,私钥为4,K=3。
请给出S1、S2;
答: m = 2 , q = 11 , a = 2 , X A = 4 , K = 3 m=2,q=11,a=2,X_A=4,K=3 m=2,q=11,a=2,XA=4,K=3
S 1 = a K m o d q = 2 3 m o d 11 = 8 S1=a^K \ mod \ q = 2^3 \ mod \ 11=8 S1=aK mod q=23 mod 11=8
q − 1 = 11 − 1 = 10 q-1=11-1=10 q−1=11−1=10
q − 1 K q ′ d ′ x y 10 3 3 1 1 − 3 3 1 3 1 0 1 1 0 1 1 0 \begin{array}{|c|c|c|c|c|c|} \hline q-1 & K & q^{\prime} & d^{\prime} & x & y \\ \hline 10 & 3 & 3 & 1 & 1 & -3 \\ \hline 3 & 1 & 3 & 1 & 0 & 1 \\ \hline 1 & 0 & & 1 & 1 & 0 \\ \hline \end{array} q−11031K310q′33d′111x101y−310
K − 1 = − 3 m o d 10 = 7 K^{-1}=-3 \ mod \ 10=7 K−1=−3 mod 10=7
S 2 = K − 1 ( m − X A S 1 ) m o d ( q − 1 ) S2=K^{-1}(m-X_AS1) \ mod \ (q-1) S2=K−1(m−XAS1) mod (q−1)
= 7 × ( 2 − 4 × 8 ) m o d 10 = 0 =7×(2-4×8) \ mod \ 10 = 0 =7×(2−4×8) mod 10=0
OK,以上就是密码学的期末复习啦~~ ,感谢友友们的阅读,祝大家逢考必过哦~~
如果有错误❌,欢迎批评指正呀~让我们一起相互进步
如果觉得收获满满,可以点点赞支持一下哟~
❗ 转载请注明出处
作者:HinsCoder
博客链接: 作者博客主页