信息安全原理与实践-第二版04 公开密钥加密
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
16
• DH算法的数学构造
设定p为素数,并假定g是生成器,即对于任何的x∈{1, 2, ... ,p -1},都存 在指数n,使得x=gn mod p。素数p和生成器g是公开的。 对于实际的密钥交换过程,Alice随机地选择秘密的指数a,Bob随机地选 择秘密的指数b。Alice计算ga mod p,并将结果发送给Bob,而Bob计算 gb mod p,也将结果发送给Alice。 Alice执行如下计算:
• Diffie-Hellman密钥交换算法,或简称为DH,是由英国政府通信总部 (GCHQ)的Malcolm Williamson所发明,其后不久,该算法又被它的命 名者Whitfield Diffie和Martin Hellman独立地再次发明。 • 这里讨论的Diffie-Hellman算法版本是密钥交换算法,因为它仅仅能够 用于建立共享的秘密。 • DH算法的安全性依赖于离散对数问题的计算难度。假设给定g以及 x=gk。那么,要想确定k,就需要计算对数logg(x)。
优势:要获得同样等级的安全性,需要的二进制位数较少 缺点:椭圆曲线体制的数学计算更加复杂,因此,椭圆曲线体制 中的每个数学操作的代价都相对而言更加昂贵。
• 典型的椭圆曲线图
21
4.5.1椭圆曲线的数学原理
• 从加密技术的角度来说,我们希望处理的是离散的点集。这可以通过 在通用椭圆曲线的计算等式上执行“mod p”运算来轻松地实现。 y2=x3+ax+b(mod p) • 例子:y2=x3+2x+3(mod 5) 对于x的所有取值,逐个选取并计算相应的y值(一个或多个值)。因为我们 是基于模数5实施运算,所以我们只需考虑x=0, 1, 2, 3, 4的情况。在这个 例子中,我们最后获得如下这些点:
19
• 预防中间人攻击的方法
使用共享对称密钥对DH密钥交换过程实施加密。 使用公钥对DH密钥交换过程实施加密。 使用私钥对DH密钥交换过程中的值进行数字签名。
20
4.5 椭圆曲线加密
• 椭圆曲线加密体制(Elliptic Curve Cryptography,ECC)提 供了另一个“实施复杂难解的数学操作”的方法。
•
另一个流行的通用加密指数是e=216+1。选取这个e值,每个加密运算仅需要 执行17个重复平方算法的步骤。e=216+1的另一个优势是,在运用中国剩余定 理的攻击者成功破解消息密文之前,同样的加密消息密文必须已经先行发送 给e=216+1个用户。
15
4.4 Diffie-Hellman密钥交换算法
5
• 构造背包加密系统的流程
(1) 生成一个超递增的背包。 (2) 将这个超递增的背包转换为常规的背包。 (3) 公钥便是常规背包。 (4) 私钥就是超递增的背包以及相关的转换因子。
6
•Байду номын сангаас实例
(1)我们选择如下超递增的背包:(2, 3, 7, 14, 30, 57, 120, 251) (2)为了将这个超递增的背包转换成常规背包,我们必须选择乘数m和模数n, m和n必须是互素的,且n要大于超递增背包中所有元素值的和。假设选取的乘数 m=41,模数n=491。通过模乘法运算,根据超递增背包计算常规背包,得到:
(3)公钥就是这个常规背包 公钥:(82, 123, 287, 83, 248, 373, 10, 471) (4)私钥就是这个超递增背包,加上转换因子的乘法逆,如m-1 mod n。对于 这个实例,计算结果如下 私钥:(2, 3, 7, 14, 30, 57, 120, 251)以及41-1 mod 491=12
10
1. 计算出它们的乘积N=pq。 2. 选择与乘积(p-1) (q-1)互素的数e。 3. 计算出数e的模(p-1) (q-1)的乘法 逆元素,命名该逆元素为d。
这些数值满足公式ed = 1 mod (p-1) (q-1)。
• RSA加密体制真的确实有效吗?
给定C=M e mod N,我们必须证明如下等式: M=C d mod N=M ed mod N
4
• 超递增的背包问题
当将权重值从小到大排列起来时,每一个权重值都大于前面所有权重值 相加的和。 --- 相对容易解决!
• 例子:
权重值集合为:3, 6, 11, 25, 46, 95, 200, 411 期望的和S=309 我们只需从最大权重值开始,逐步向最小的权重值进行计算,就有望 在线性时间内恢复出ai。
假定Bob想要发送一条消息M=15 给 Alice。 Bob先查找Alice的公钥(N, e) = (33, 3),再计算密文 C=M e mod N=153 =3375=9 mod 33 =9
12
• 存在的问题
所谓“大的”素数其实并不大,对Trudy来说分解这个模数将是小菜 一碟。在现实世界中,模数N典型的大小通常至少是1024位,而长 度为2048位或更大的模数值也是常常会用到的。 可能遭受前向检索攻击。
•
现在计算520,重复平方方法的执行过程如下: So easy!
14
4.3.3 加速RSA加密体制
• • 另外一个可用于加速RSA加密体制的技巧是,对于所有用户使用同一加密指 数e。而这并不会在任何方面削弱RSA加密体制的强度。 通常加密指数的合适选择是e=3。选择这个e值,每一次公钥加密仅仅需要两 次乘法运算。不过,私钥的运算操作仍然代价高昂。
8
• 总结:
在背包加密系统里,陷门函数存在于运用模运算将超递增背包问题转换为常规背包 问题时,因为该转换因子对于攻击者来说是无法得到的。该函数的单向特性在于一 个事实:使用常规背包实施加密非常容易,但是在没有私钥的情况下,要想解密显 然是非常困难的。当然,有了私钥,我们就能够将问题转换为超递增背包问题,解 决起来就容易了。 背包问题看起来确实是对症下药了。首先,构造包含公钥和私钥的密钥对是相当容 易的。而且,给定了公钥,实施加密是非常容易的,而了解了私钥则会使解密过程 非常容易。最后,在没有私钥的情况下,攻击者就将不得不去解决NP完全问题了。 可惜这个精巧的背包加密系统是不安全的。该方案于1983年被Shamir使用一台 Apple II计算机破解。该攻击依赖于一种称为格基规约的技术。问题的根本在于该 方案中从超递增背包问题派生出的所谓“常规背包问题”并不是真正的常规背包问 题——事实上,它是一种非常特殊的高度结构化的背包案例,而格基规约攻击能够 利用这种结构的特点比较容易地恢复出明文(可以较高的概率完成)。
因为S<411,我们就得出a7=0。 由于S>200,那么一定有a6=1, 因为剩余所有权重值的和要小于200。 接着计算S=S-200=109,这是新的目 标和值。 因为S>95,我们得到a5=1。 然后再计算S=109-95=14。 继续如法炮制,就得到了最终结果 a=10100110。 我们能够轻松地证实这个问题获得了 解决,因为3+11+95+200=309。
Information Security: Principles and Practice, 2nd Edition [美]Mark Stamp 张 戈 著 译
1
第4章 公开密钥加密
2
4.1 引言
公开密钥加密技术
单向陷门函数 公开密钥 私有密钥 数字签名
公开密钥加密体系 椭圆曲线加密方案
7
如果Alice想要加密消息M=10010110并发送给Bob,她就利用消息中值为 1的二进制位,据此来选择常规背包中的元素,将这些元素相加求和就得 到了对应的密文。 Alice执行计算:C=82+83+373+10=548 要想解密这个密文,Bob使用他的私钥执行如下计算,得到: C· m-1 mod n=548· 12 mod 491=193 然后Bob针对值193求解超递增背包问题。因为Bob拥有私钥,所以要从 中恢复出明文是比较容易的。 最后,明文的二进制表示为M=10010110,其换算成十进制是M=150。
3
4.2 背包加密方案
• Merkle-Hellman背包加密系统基于一个数学问题,该问题往往被看成 NP完全问题。 • 定义: 给定一个集合,共包含n个权重值,分别标识为:W0, W1, …, Wn-1, 以及期望的和S,要求找到a0, a1, …, an-1,其中每一个ai∈{0,1}使得等 式 S=a0W0+ a1W1+ ... + a n-1Wn-1, 能够成立。 • 例子: 假设权重值为85, 13, 9, 7, 47, 27, 99, 86 期望的和S=172 对于这个问题存在一个解决方案: a=(a0, a1, a2, a3, a4, a5, a6, a7)=(11001100) 因为85+13+47+27=172
9
4.3 RSA
• RSA体制的命名来自于它的三个公认的发明者:Rivest、 Shamir和Adleman。
为了生成RSA算法的公钥和私钥的 密钥对,先要选择两个大素数p和q: 数N是模数,e是加密指数,而d 是解密指数。 RSA密钥对的组成如下: 公钥:(N, e) 私钥:d 加密:将明文文本消息M视为一 个数,对其按指数e求幂并模N C=M e mod N 解密:要解密C,求幂模运算使 用解密指数d完成相应的操作过 程 M=C d mod N
• 欧拉定理:如果数x与数n互素,那么xφ(n)= 1 mod n。
再回顾之前对e和d的选取符合等式:ed=1 mod (p-1)(q-1), 而且N = pq, 这意味着: φ(N)=(p-1)(q-1) 这两个事实结合在一起,就意味着下面的等式成立: ed-1=kφ(N)
这就证实了RSA体制的解密指数确实解密了密文C。
如果多个用户都使用e=3作为他们的加密指数,那么还存在另一种类型的立方根攻击。如果对于同 一个消息M,使用三个不同用户的公钥分别加密,生成的密文比如是C0、C1和C2,那么中国剩余 定理可用于恢复明文消息M。在实践中,这也很容易避免,方法就是对每个消息M随机附加填充信 息,或者在每个消息M中增加一些用户指定的信息,这样每个消息实际上就会互不相同了。
(gb)a mod p=gab mod p
Bob执行如下计算: (ga)b mod p=gab mod p
最后,gab mod p就是共享的秘密,其典型的用途是作为对称密钥。
17
• DH密钥交换
攻击者Trudy能够看到ga mod p 和 gb mod p,而且看起来她距离那个共 享秘密gab mod p也非常接近。但是: ga · gb=ga+b≠gab mod p 显然,Trudy需要找到a或b,看起来这就需要她去解决一个困难的离散对 数问题。
11
4.3.1教科书式的RSA体制范例
Alice 生成Alice的密钥对: 1. 选择两个“大的”素数:p=11,q=3。 模数就是N=pq=33,并且可以计算 出 (p-1)(q-1)=20。 2. 选取加密指数为e=3。 3. 计算相应的解密指数d=7,因为 ed=3· 7=1 mod 20。 Alice的公钥:(N, e) = (33,3) Alice的私钥:d=7 Alice使用她的私钥d=7进行解密计算: M=C d mod N=97=4,782,969 =144,938· 33+15 =15 mod 33 =15 Bob
18
• DH算法容易遭受中间人攻击(简称为MiM攻击)
• Trudy将自己置于Alice和Bob之间,截获从Alice发送给Bob的消息,同 样也截获从Bob发送给Alice的消息。Trudy如此部署,将使DH密钥交 换很容易地就被彻底破坏了。 • 在这个过程中,Trudy建立共享的秘密,比方说,和Alice共享gat mod p,和Bob共享另一个秘密gbt mod p。无论是Alice还是Bob,都不会觉 察到这其中有任何问题,于是,Trudy就能够读到或改写Alice和Bob之 间传递的任何消息了。
13
4.3.2 重复平方方法
• 重复平方方法通过每次构建一个二进制位的方式来生成指数并完成计 算。在每个步骤中,我们将当前的指数值乘以2,如果其二进制扩展形 式在相应的位置有值1,我们就还要对指数计算的结果再加上1。 • 例子: 计算520。
指数20以二进制形式表示为10100,指数10100可以一次一位地被构建出来, 从高阶二进制位开始,如下: (0, 1, 10, 101, 1010, 10100)=(0, 1, 2, 5, 10, 20)