密码学备考知识点复习

密码学备考知识点复习

前言

就是根据老师给的考察范围来进行一个复习,虽然是开卷考试,但是通过一个有效的复习,可以有效提高在考试中的得分效率,再不济也可以提高在考试中定位课本页数的可能性。

根据老师的给出的考察题目及类型,有五道大题,分别考察RSA、ECC、AES、数字签名以及对涉及多个知识点的综合设计,总体感觉要比上学期的信息安全课程会舒服一点。

MindMap

在这里插入图片描述

RSA(20分)

RSA是我们考察的第一题,同时也是三种密码算法加解密最高的一题。

背景

在了解RSA之前,我们需要知道它的一些背景:这是基于大整数素因子分解问题(tps:公钥密码大多数算法都是基于一些数学难题),这个问题顾名思义,其实就是对于一个大整数,我们很难去计算它的 素因子。这个算法之所以叫RSA,就是发明者有三个人,分别为:Rivest、Shamir(就是我们在信息安全中学到的Shamir门限分割)、Adleman。 RSA的基础是数论中的欧拉定理。

欧拉定理

设 a , m ∈ N + , 且 g c d ( a , m ) = 1 , 则 : a φ ( m ) = 1 ( m o d m ) φ ( m ) , 表 示 小 于 m 的 区 间 中 的 正 整 数 和 m 互 素 的 个 数 , 该 函 数 又 称 为 欧 拉 函 数 。 设a,m \in N^+, 且 gcd(a, m) = 1,\\ 则: a^{\varphi(m)} = 1(modm) \\ \varphi(m), 表示小于m 的区间中的正整数和m互素的个数,该函数又称为欧拉函数。 a,mN+,gcd(a,m)=1,:aφ(m)=1(modm)φ(m),mm

题型(猜测)

依据课堂上的例题和测验题来看,应该就是考察学生对RSA算法流程的掌握程度,所以大概率就是考察RSA的加解密,当然这个过程其实就是RSA 公钥密码体制的流程。

密钥生成

分5步:

  1. 选取两个大素数p和q
  2. 计算n=pxq,φ(n) =(p-1)(q-1),这个φ(n)就是我们上面提到的欧拉函数。
  3. 选取一个比 φ(n) 小的整数e,e>1,gcd(φ(n), e) = 1
  4. 然后求d,d是e关于欧拉函数的逆元。
  5. 公钥:{e, n}, 私钥:{d, n}
加密

我们设明文M,密文C
C = M e m o d n C = M^{e}mod n C=Memodn

解密

M = C d m o d n M = C^d modn M=Cdmodn

难点——乘法逆元求解

上面的流程的难点就在于逆元的求解,如果到现在还不会乘法逆元的求解,那你急需看下我这个例子。

我们求3 关于 20 的乘法逆元。

辗转相除判断互素

先用欧几里得(辗转相除)
20 = 6 ∗ 3 + 2 3 = 1 ∗ 2 + 1 20 = 6 * 3 + 2 \\ 3 = 1 * 2 + 1 20=63+23=12+1
当我们求出 余数为1 的时候就可以了,此时我们可以知道 3,20 互素。

接下来求解逆元的过程,有两种思路,利用拓展欧几里得算法,就是逆推相关式子。

拓展欧几里得

3 − 1 ∗ 2 = 1 3 − 1 ∗ ( 20 − 6 ∗ 3 ) = 7 ∗ 3 − 20 = 1 3 - 1 * 2 = 1 \\ 3 - 1 * (20 - 6 * 3) = 7 * 3 - 20 = 1 312=131(2063)=7320=1

所以,3关于20的逆元就是7。

欧拉快速演算

我们先倒写出在辗转相除时得到的商 1,6

如下表,我们将第一行视为x,第二行视为y,第一行前两先空出来,第二行分别为0,1

16
0117

从第一行对下来的第二行对应的位置的值为
y i = y i − 2 + y i − 1 ∗ x i y_i = y_{i-2} + y_{i - 1}*x_i yi=yi2+yi1xi
然后要求取出的逆元就是最后一个y的值,当然此时会根据 i 的奇偶性判断,这里规定 i 从1开始
假 设 y m 为 最 终 的 值 , d 为 所 求 的 逆 元 d = { y m , m % 2 = = 0 − y m , m % 2 = = 1 假设y_m 为最终的值, d为所求的逆元 d = \left\{ \begin{aligned} y_m, \qquad &m \% 2 == 0 \\ -y_m, \qquad &m \%2 ==1 \end{aligned} \right. ymdd={ym,ym,m%2==0m%2==1

ECC(15分)

椭圆曲线密码体制,简称ECC。它是基于椭圆曲线上的离散对数问题。

椭圆曲线

E : y 2 = x 3 + a x + b E : y ^2 = x^3 + ax + b E:y2=x3+ax+b

上面的方程式其实也可以用来表达(x,y)构成的的集合,特别注意:
如 果 方 程 式 没 有 重 复 的 因 子 , 或 者 4 a 3 + 27 b 2 ≠ 0 则 E 可 以 为 群 。 如果方程式没有重复的因子,或者4a^3 + 27b^2 \neq 0 \\ 则E可以为群。 4a3+27b2=0E

无穷远点O

其实就是在讨论椭圆曲线群时,需要引入的一个参考点。

有限域

曲线方程中的所有系数都是在 有限域GF(p)中的元素,p为一大素数。

离散化

密码学中不讨论椭圆曲线的连续性,而是关注离散化后的整数点,即点中的 x,y都是整数。

运算规则

加法规则
  1. 所 有 点 P ∈ E p , 则 P + O = O + P = P , P + ( − P ) = 0 所有点P\in E_p, 则P + O = O + P = P, P + (-P) = 0 PEp,P+O=O+P=P,P+(P)=0

  2. P = ( x 1 , y 1 ) ∈ E p , Q = ( x 2 , y 2 ) ∈ E p , p ≠ − Q 则 P + Q = R = ( x 3 , y 3 ) ∈ E p λ = { y 2 − y 1 x 2 − x 1 , P ≠ Q 3 x 1 2 + a 2 y 1 , P = Q P=(x_1, y_1) \in E_p, Q=(x_2,y_2)\in E_p, p\neq -Q\\ 则P+Q = R = (x_3, y_3)\in E_p \\ \lambda = \left\{ \begin{aligned} \frac{y_2-y_1}{x_2-x_1}, \qquad &P\neq Q\\ \frac{3x^2_1+a}{2y_1}, \qquad &P=Q \end{aligned} \right. P=(x1,y1)Ep,Q=(x2,y2)Ep,p=QP+Q=R=(x3,y3)Epλ=x2x1y2y1,2y13x12+a,P=QP=Q

  3. s, t 为整数
    对 所 有 的 点 P ∈ E p , 有 ( s + t ) P = s P + t P 对所有的点P\in E_p, 有 (s+t)P = sP+tP PEp,(s+t)P=sP+tP
    (其实就是分配律)

乘法规则
  1. 如果k为整数,
    P ∈ E p , 有 k P = P + . . . + P = ∑ i = 1 k P P\in E_p, 有 kP = P+...+P = \sum_{i=1}^{k}{P} PEp,kP=P+...+P=i=1kP

  2. s, t为整数,
    s ( t P ) = ( s t ) P s(tP) = (st)P s(tP)=(st)P

椭圆曲线加法交换群(Abel群)

  1. ∀ P , Q ∈ E , 有 P + Q = Q + P ∈ E \forall P, Q \in E, 有P +Q = Q+P \in E P,QE,P+Q=Q+PE

  2. ∀ P ∈ E . 有 P + O = P \forall P \in E. 有 P + O = P PE.P+O=P

  3. P + ( − P ) = O P + (-P) = O P+(P)=O

  4. 直线L 交 E 于P、Q、R三点(三点未必不同),则
    ( P + Q ) + R = O (P+Q) +R = O (P+Q)+R=O

  5. ∀ P , Q , R ∈ E , 有 ( P + Q ) + R = P + ( Q + R ) \forall P,Q,R \in E, 有(P+Q)+R = P + (Q+R) P,Q,RE,(P+Q)+R=P+(Q+R)

满足上述性质,加上无穷远点O作为零元,就可以作为 加法交换群(Abel群)

椭圆曲线上的一点P,若存在最小的正整数n,使得nP=O,称n为点P的阶。

题型1 椭圆群的求取

需要我们求取椭圆群的点,做法很简单,我们在 0 到 p-1 的范围内枚举x,带入E的方程式,计算y,当y为整数就是要求取的点,这里没什么技巧分享,我们用一个例子展示。

p=11,a=1,b=2,我们以计算x=1,为例
y 2 = x 3 + x + 2 = 4 ∴ y = 2 , y = − 2 m o d p = 9 y^2 = x^3+x+2 = 4 \\ \therefore y = 2, \qquad y = -2 mod p = 9 y2=x3+x+2=4y=2,y=2modp=9
如果第一下计算的方程的右边不是一个完全平方数,可以模加p,这里分享一个知识点,加到超过(p-1)^2就不用加了。

题型2 加解密过程

会给出p,a,b,G,k,私钥n。

往往第一步就是计算公钥 P = nG,然后基本上就是密文和明文的过程。

加密

注意:求取的密文是一个点对,
C 1 = k G , C 2 = P m + k P A C m = { C 1 , C 2 } C_1 = kG, C_2 = P_m+kP_A \\ C_m =\{C_1, C_2\} C1=kG,C2=Pm+kPACm={C1,C2}

解密

P m = C 2 − C 1 = P m + k P A − k P A P_m = C_2 - C_1 = P_m + kP_A - kP_A Pm=C2C1=Pm+kPAkPA

题型3 DH密钥交换

即利用ECC 实现 Diffle—Hellman 密钥交换。

我觉得可以分为以下步骤进行:公开参数构造,双方选定私钥,并计算公钥,发送,实现共享密钥。

公开参数构造

就是选取p,a,b,G,阶数N。

交换过程
  1. A选取私钥nA,nA<n, 计算公钥PA。

  2. B同上。

  3. A,B发送公钥给彼此,然后再用私钥计算共享密钥
    K = n A P B = n A ( n B G ) = n B ( n A G ) − n B P A K = n_AP_B = n_A(n_BG) = n_B(n_AG) - n_BP_A K=nAPB=nA(nBG)=nB(nAG)nBPA

AES(15分)

如果对这个算法的实现,可以参考我的这篇blog(5条消息) AES-128算法实现(附C++源码)_物联黄同学的博客-CSDN博客_aes128加密算法源码

流程图

在这里插入图片描述

在这里插入图片描述

密钥拓展

参考下述公式进行密钥拓展
k e y s [ i ] = { k e y s [ i − 1 ] ⊕ k e y s [ i − 4 ] , i % 4 ! = 0 T ( k e y s [ i − 1 ] ) ⊕ k e y s [ i − 4 ] , i % 4 = = 0 keys[i] = \left\{ \begin{aligned} keys[i - 1] \oplus keys[i - 4], \qquad i \% 4 != 0 \\ T(keys[i-1]) \oplus keys[i - 4], \qquad i \% 4 == 0 \end{aligned} \right. keys[i]={keys[i1]keys[i4],i%4!=0T(keys[i1])keys[i4],i%4==0

行位移没什么知识点,所以不在此阐述。知道从第一行开始,第一行不移位,接下来的每一行比上一行多移动一位。

列混淆

其实就是矩阵乘法运算

在这里插入图片描述

轮密钥加

其实就是将在密钥拓展获取的密钥逐论和与状态(明文,密文)异或。

小技巧 xtime函数

函数xtime(x)定义为 上的x·b(x)。其运算如下:若b7 =0,则x·b(x)的结果就是把字节b左移一位;若b7 =1,则结果需异或‘1B’。

解密

解密和加密相反,其实就是将加密的过程反过来,行移位是左移,逆行移位就是右移。逆列混合的变化是

在这里插入图片描述

其他的过程参考流程图。

题型(猜测)

AES作为考到唯一一个公钥密码体制,其实主要就是考察学生对这个过程的熟悉和了解程度,所以其实就是照着流程来,然后考虑到计算量,应该只会考察其中的一部分过程,按照测试题来看,列混淆轮密钥加的概率最大。

数字签名(25分)

我超,xdm,25分!和综合设计一个分数,不说了,好吧,必拿下!

背景

就是时代发展的产物,针对电子文档的一种签名确认方法,从而实现对数字对象合法化真实性标记,并提供签名者的承诺。

电子签名实现的就是 数字化文档的 认证性完整性不可否认性

教学内容中有四种,分别是:基于RSA数字签名基于ElGamal数字签名Schnorr数字签名基于ECC数字签名。考察的题目一个会在后三种中出,鉴于ECC会在前面已经出过了,可以重点关注ElGamal,香农数字签名。考察的重点应该在签名和验证的过程描述,以及证明签名算法正确性

原理图

在这里插入图片描述

RSA 数字签名方案

m表示消息,e公钥,d私钥。

签名
  1. Hash函数得到消息摘要h(m)

  2. 签名算法计算签名
    s = S i g k ( m ) = h ( m ) d m o d n s =Sig_k(m) = h(m)^dmod n s=Sigk(m)=h(m)dmodn

验证
  1. hash计算摘要。

  2. 检验等式
    h ( m ) m o d n = s e m o d n h(m)mod n = s^e modn h(m)modn=semodn
    是否成立,从而验证签名的有效性。

算法正确性证明

s = h ( m ) d m o d n , d ∗ e = 1 ( m o d φ ( n ) ) ∴ s e m o d n = h ( m ) e d m o d n = h ( m ) k φ ( n ) + 1 m o d n = h ( m ) ∗ h ( m ) k φ ( n ) m o d n = h ( m ) ∗ ( h ( m ) φ ( n ) ) k m o d n = h ( m ) s = h(m)^dmodn, \qquad d*e = 1(mod\varphi(n)) \\ \begin{aligned} \therefore s^e mod n &= h(m)^{ed}modn \\ &= h(m)^{k\varphi(n)+1}modn \\ &= h(m) * h(m)^{k\varphi(n)}modn \\ &= h(m)*(h(m)^{\varphi(n)})^k modn \\ &= h(m) \end{aligned} s=h(m)dmodn,de=1(modφ(n))semodn=h(m)edmodn=h(m)kφ(n)+1modn=h(m)h(m)kφ(n)modn=h(m)(h(m)φ(n))kmodn=h(m)

其实最后一步,我有点小困惑,根据欧拉定理,h(m)和φ(n)必须互素才行。

Elgamal 签名体制

初始化

选择一个大素数p,Zp为对应的离散对数域,在这个域中求解离散对数困难,在这个域中选择一个生成元g,随机选择x,计算
y = g x m o d p y = g^x modp y=gxmodp

公钥y,g,p,私钥x。

签名

随 机 数 k ∈ R Z p ∗ r = ( g k m o d p ) s = ( h ( m ) − x r ) k − 1 m o d ( p − 1 ) 随机数k\in_RZ_{p^*} \\ \begin{aligned} r &= (g^k mod p)\\ s &= (h(m)- xr)k^{-1} mod(p-1) \end{aligned} kRZprs=(gkmodp)=(h(m)xr)k1mod(p1)

数字签名为(s, r)。

验证

y r r s = g h ( m ) m o d p y^rr^s = g^{h(m)}modp yrrs=gh(m)modp

正确性证明

∵ r = ( g k m o d p ) , s = ( h ( m ) − x r ) k − 1 m o d ( p − 1 ) ∴ k s = h ( m ) − x r m o d ( p − 1 ) g k s = g h ( m ) − x r m o d p g k s g x r = g h ( m ) m o d p y r r s = g h ( m ) m o d p \because r = (g^k mod p), \qquad s = (h(m) - xr)k^{-1} mod(p-1) \\ \begin{aligned} \therefore ks = h(m) - xr mod(p-1)\\ g^{ks} = g^{h(m)-xr}modp \\ g^{ks}g^{xr} = g^{h(m)}mod p \\ y^rr^s = g^{h(m)}modp \end{aligned} r=(gkmodp),s=(h(m)xr)k1mod(p1)ks=h(m)xrmod(p1)gks=gh(m)xrmodpgksgxr=gh(m)modpyrrs=gh(m)modp

安全性考虑(难点,思考题)
  1. 不能泄露随机数k——此时计算私钥x就不是离散对数问题了。
  2. 随机数k不能重复使用——不同的消息重复使用,k会被容易(相较)算出来,从而私钥被计算,同时不符合数字签名的特性。
  3. 不用hash函数,会收到攻击。

Schnorr 签名

初始化

大素数p,q,生成元g,随机数x
q ∣ ( p − 1 ) , g q = 1 ( m o d p ) , g ∈ Z q 8 1 < x < q , y = g x m o d p q | (p-1), g^q = 1(modp), g \in Z_{q^8} \\ 1 < x < q, y = g^xmodp q(p1),gq=1(modp),gZq81<x<q,y=gxmodp
公钥p,q,g,y,私钥x。

签名

选择随机数k
r = g k m o d p e = H ( r , m ) s = x e + k m o d q r = g^k mod p \\ e = H(r, m) \\ s = xe + k mod q r=gkmodpe=H(r,m)s=xe+kmodq
签名为(e,s)

验证

r 1 = g s y − e m o d p H ( r 1 , m ) 验 证 H ( r 1 , m ) = e r_1 = g^sy^{-e}modp \\ H(r_1,m)\\ 验证H(r_1, m) = e r1=gsyemodpH(r1,m)H(r1,m)=e

正确性证明

R 1 = s G + H ( m ) P = ( k − H ( m ) n A ) G + H ( m ) P = k G − H ( m ) n A G + H ( m ) P = k G = R \begin{aligned} R_1&= sG+H(m)P\\ &= (k-H(m)n_A)G+H(m)P\\ &= kG-H(m)n_AG + H(m)P \\ &= kG \\ &= R \end{aligned} R1=sG+H(m)P=(kH(m)nA)G+H(m)P=kGH(m)nAG+H(m)P=kG=R

和Elgmal性能对比

在这里插入图片描述

TE :幂运算的计算量
TH:哈希计算的计算量
TM:乘积运算的计算量

ECC

初始化参考上面的初始化过程以及ECC加密体制。

签名

R = k G s = k − H ( m ) ∗ n A m o d p R = kG\\ s = k-H(m)*n_A mod p R=kGs=kH(m)nAmodp

签名值(R,s)

验证

R 1 = s G + H ( m ) P 验 证 等 式 R 1 = R R_1 = sG + H(m)P \\ 验证等式 R_1 = R R1=sG+H(m)PR1=R

正确性证明

R 1 = s G + H ( m ) P = ( k − H ( m ) n A ) G + H ( m ) P = k G − H ( m ) n A G + H ( m ) P = k G = R \begin{aligned} R_1&= sG+H(m)P\\ &= (k-H(m)n_A)G+H(m)P\\ &= kG-H(m)n_AG + H(m)P \\ &= kG = R \end{aligned} R1=sG+H(m)P=(kH(m)nA)G+H(m)P=kGH(m)nAG+H(m)P=kG=R

综合设计(看命)

根据所学的可以参考复习流密码和序列密码,以及密钥交换协议,还有各种签名,比如盲签名、群签名和群、环、域等数论知识点等。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值