文章目录
对称加密与非对称加密的区别与联系
下面是对称密码体制的一些问题、非对称密码体制对应的优势。
对称密码体制的一些问题
- 加密能力与解密能力捆绑在一起,基于比特模式:
加解密捆绑,指加密和解密过程中使用相同的密钥,这简化了算法实现,但是降低了安全性——一旦密钥泄露,会很容易被破解。
基于比特模式代表着加解密操作直接作用于数据的二进制表示。尽管提高了通用性,但在特定应用场景下比如涉及更高级别的数据结构,这种机制可能不够灵活。 - 密钥更换、传递和交换需要可靠信道,密钥分发困难:
对称密钥加密的安全性高度依赖于密钥的保密性,而密钥的分发成为一个关键问题。在没有预先共享安全信道的情况下,安全地将密钥传输给对方非常困难,需要额外的安全措施(如线下密钥交换、公钥基础设施辅助的密钥封装等),这增加了实施的复杂度和成本。 - 如有N用户,则需要C=N(N-1)/2个密钥,n=1000时,C(1000, 2)≈500000,密钥管理困难:
在一个大型网络中,如果每个用户都需要与其他用户安全通信,那么所需密钥的数量会迅速增长(二项式系数问题)。这导致密钥的生成、存储、更新和撤销变得极其复杂,容易出错,且资源消耗巨大。 - 无法满足不相识的人之间通信的保密要求:
对称密钥体制要求通信双方事先拥有共同的密钥,这意味着它不适合于之前未建立信任关系或未通过安全渠道交换过密钥的双方进行初次通信。 - 不能实现数字签名:
数字签名是用来验证消息来源的完整性和不可否认性的机制。对称密钥系统由于其性质,不能直接提供数字签名功能,因为所有拥有密钥的人都可以创建看起来合法的签名。
非对称密码体制的基本特点
- 加密能力与解密能力是分开的,基于数学函数:
非对称密码体制的核心特点是使用一对密钥:公钥和私钥。公钥用于加密信息,而私钥则用于解密。这两个密钥在数学上相关联,但实际操作中,从公钥推导出私钥在计算上是不可行的。 - 密钥分发简单:
由于公钥可以公开而不影响安全性,因此可以轻松地通过不安全的通道分发给任何人,而私钥则由持有者严格保密。 - 需要保存的密钥量大大减少,N个用户只需要N个密钥:
在非对称体系中,每个用户只需维护一对密钥(一个公钥和一个私钥)。理论上,即使网络中有N个用户,整体需要保存的密钥数量也仅仅是N对,而不是对称体制中的N(N-1)/2对。 - 可满足不相识的人之间保密通信:
任何想要与某用户发送保密信息的人,只需使用该用户的公钥加密信息,而信息只能被拥有对应私钥的用户解密。 - 可以实现数字签名:
私钥除了用于解密,还可以用来创建数字签名。用户通过对信息的哈希值进行私钥加密,生成的签名可以公开附在信息后。接收方使用发送者的公钥验证签名,确保信息未被篡改且确实来自声称的发送者。这一过程实现了信息的完整性和来源认证。
一些公钥加密技术
RSA 公钥密码算法
- 算法流程
(1)随机选择两个秘密大素数 p 和 q;
(2)计算公开模数 n = p*q;
(3)计算秘密的欧拉函数 φ(n) = (p-1)(q-1);
(4)选择一个与 φ(n) 互素的数,作为 e;
(5)用 Euclid 算法计算 e 模 φ(n) 的乘法逆元素,即根据 ed mod φ(n) = 1, 求 d;
(6)加密: C = M e m o d n C = M^e \ mod \ n C=Me mod n
(7)解密: M = C d m o d n = ( M e m o d n ) d m o d n = M M = C^d \ mod \ n = (M^e \ mod \ n)^d \ mod \ n = M M=Cd mod n=(Me mod n)d mod n=M - RSA的安全性依赖于大合数的素因子分解
Diffie-Hellman 密钥交换(DH 密钥协商)
- 算法流程
(1)通信双方约定一个大素数 q 和模 q 的一个本原根 α;
(2)双方各选择一个秘密钥(数值),如 x A < q , x B < q x_A< q , x_B< q xA<q,xB<q;
(3)计算公钥, 如 y A = α x A m o d q , y B = α x B m o d q y_A = α^{x_A} mod q, y_B = α^{x_B} mod q yA=αxAmodq,yB=αxBmodq, 并相互交换。
(4)计算双方共享的会话密钥 K A B K_{AB} KAB: K A B = α x A x B m o d q = y A x B m o d q = y B x A m o d q K_{AB} = α^{x_Ax_B} \ mod \ q = y_A^{x_B} \ mod \ q = y_B^{x_A} \ mod \ q KAB=αxAxB mod q=yAxB mod q=yBxA mod q - Diffie-Hellman密钥交换算法的安全性依赖于求解离散对数问题DLP
3DH 协议
三个人之间的 DH 协商。
如果 Alice、Bob 和 Carol 利用 3DH 协议进行三方密钥交换,需要进行两轮交互。
(1)选择 q 为大素数,a 为 q 的本原根。
(2)第一轮:Alice 选择随机数 x,发送
X
=
a
x
m
o
d
q
X=a^x \ mod \ q
X=ax mod q 给 Bob;Bob 选择随机数 y,发送
Y
=
a
y
m
o
d
q
Y=a^y \ mod \ q
Y=ay mod q 给 Carol;Carol 选择随机数 z,发送
Z
=
a
z
m
o
d
q
Z = a^z \ mod \ q
Z=az mod q 给 Alice。
(3)第二轮:Alice 发送消息 U 给 Bob;Bob 发送消息 V 给 Carol;Carol 发送消息 W 给 Alice。
(4)两轮交互完成后,Alice、Bob 和 Carol 协商的共享密钥为
K
=
a
x
y
z
m
o
d
q
K=a^{xyz} \ mod \ q
K=axyz mod q。
一些说明:
第(3)步中,交换的消息并没有明确说明,在这里我说一下自己的见解。
在第(2)步结束后,Bob 持有 a^x, a^y。为了得到最终的共享会话密钥,还需要 a^z。因此,在这一步 Alice 发送给 Bob 的消息就需要传递 a^z(即传递z)。
由此,不难推测出,在这一步,Alice 的消息 U 的内容是加密过的 z。易知 V 的内容是加密过的 x,W 的内容是加密过的 y。
这一轮消息传递结束后,每一方都获取到了全部的随机数,以此构建共享会话密钥 K。
中间人攻击
对于 DH 密钥协商,存在中间人攻击问题。因此在整个流程中就需要身份认证。
- 攻击流程
(1)Darth 生成两个随机数 X D 1 , X D 2 X_{D1}, X_{D2} XD1,XD2,随后计算相应的公钥 Y D 1 , Y D 2 Y_{D1}, Y_{D2} YD1,YD2;
(2)Alice 将 Y A Y_A YA 传递给 Bob;
(3)Darth 截获了 Y A Y_A YA,将 Y D 1 Y_{D1} YD1 传给 Bob,同时计算 K 2 = ( Y A ) X D 2 m o d q K_2 = (Y_A)^{X_{D2}} \ mod \ q K2=(YA)XD2 mod q;
(4)Bob 收到 Y D 1 Y_{D1} YD1,计算 K 1 = ( Y D 1 ) X B m o d q K_1 = (Y_{D1})^{X_B} \ mod \ q K1=(YD1)XB mod q;
(5)Bob 将 Y B Y_B YB 传给 Alice;
(6)Darth 截获了 Y B Y_B YB,将 Y D 2 Y_{D2} YD2 传给 Alice,同时计算 K 1 = ( Y B ) X D 1 m o d q K_1 = (Y_B)^{X_{D1}} \ mod \ q K1=(YB)XD1 mod q;
(7)Alice 收到 Y D 2 Y_{D2} YD2,计算 K 2 = ( Y D 2 ) X A m o d q K_2 = (Y_{D2})^{X_A} \ mod \ q K2=(YD2)XA mod q;
上述流程本质是 Bob 和 Darth 共享一个密钥 K 1 K_1 K1,Alice 和 Darth 共享一个密钥 K 2 K_2 K2。如下图所示:
- 防范措施
引入公钥证书、数字签名等身份认证措施。