密码协议学习笔记(2):密钥交换协议
密钥交换协议:
设计密钥交换协议的目的是在多个用户之间安全地协商出一个共享的会话密钥(用于对称加密协议).
博主注:该类协议要求保证在可窃听信道的通信中密钥的安全,而在可篡改信道的通信中,密钥被篡改时可以被识别.
Diffie-Hellman密钥交换协议:
通信双方Alice,Bob约定素数阶有限域
(博主注:
- Alice在
中随机选择 ,计算 ,将 发送给Bob - Bob也在
中随机选择 ,计算 ,将 发送给Alice - Alice计算
,Bob计算 ,由于 ,这两个计算出来的值相同,因此可以作为协商出来的密钥.
公开: |
||
---|---|---|
Alice | Bob | |
选取 |
||
选取 |
||
计算 |
计算 |
该密钥交换协议在可窃听信道上是安全的,虽然
但该协议在可篡改信道上是不安全的,因为会面临中间人攻击的威胁.
针对Diffie-Hellman密钥交换协议的中间人攻击:
- Alice在
中随机选择 ,计算 ,将 发送给Bob - 但发送的中途被Eve截获,Eve则选择了一个
,并将 假装成Alice发送的信息,转发给Bob - Bob也在
中随机选择 ,计算 ,将 发送给Alice - 同样被Eve截获,Eve选择了一个
,将 假装成Bob发送的信息,转发给Alice - 收到"Alice"信息的Bob计算
- 收到"Bob"信息的Alice计算
- Eve同样能够计算出
,用于分别和Bob和Alice进行通信的密钥,此后,Eve便可在两人之间充当"中间人",随意监听,拦截,篡改消息
公开: |
||||
---|---|---|---|---|
Alice | Eve | Bob | ||
选取 |
||||
选取 |
||||
选取 |
||||
选取 |
||||
计算 |
计算 |
注意,Eve并不知道
要避免这种攻击,就需要引入数字签名与证书
端-端协议:
- 该算法需要有一个可信中心Torrent,Torrent拥有:
- 自己的私钥
,用于签名算法 - 公钥
,任何人都可用此公钥验证Torrent的签名的有效性 - Torrent若要为Alice背书,应当做如下几件事:
- 生成Alice的私钥
,公钥 - 使用自己的私钥
为 和Alice的ID签名: - 将
作为证书,连同私钥 ,内置在Alice的系统中 - 同理,Torrent若要为Alice背书,应当做如下几件事:
- 生成Bob的私钥
,公钥 - 使用自己的私钥
为 和Bob的ID签名: - 将
作为证书,连同私钥 内置在Bob的系统中. - 之后的过程就类似于Diffie-Hellman密钥交换协议了,Alice想要与Bob协商密钥,应当:
- 在
中随机选择 - 计算
, - 将
发送给Bob - Bob在收到Alice的信息后,做类似的事:
- 在
中随机选择 , - 计算
- 使用自己的私钥
对 进行签名 - 将
, ,连同和自己的证书 一同发送给Alice - Alice要做如下的事确保对面的人是可信的:
- 使用
验证签名 是否真的由 签署 (若是,则说明Torrent认可 , 签署的签名也是可信的) - 使用
验证签名 是否真的由 签署 (若是,则说明 的持有者真的拿到了自己的 ,发来的 也是由它本人认可的)
至此,Alice相信了自己对面的人真的是Bob,也相信Bob正确地收到了自己的 - 使用自己的私钥
对 进行签名 - 将
,连同和自己的证书 一同发送给Bob - Bob也要做如下的事确保对面是可信的:
- 使用
验证签名 是否真的由 签署 - 使用
验证签名 是否真的由 签署 - 做完这些后,Alice和Bob互相确认了对方的身份,接下来,他们只要分别计算
就可以作为双方通信的密钥了
如果中间人Eve在第4,5步之间截获了
而Eve若尝试伪造证书,换用其他的密钥
公开: |
||
---|---|---|
Alice | Bob | |
选取 |
||
选取 |
||
签名 |
||
用 |
||
用 |
||
签名 |
||
用 |
||
用 |
Matsumoto-Takashima-Imai (MTI)密钥交换协议:
这是一种不需要通信双方计算签名的密钥交换协议,取而代之使用一对数
- Torrent为Alice的ID和公开指数
签名,将 作为证书,连同私有指数 内置在Alice的系统中 - Torrent为Bob的ID和公开指数
签名,将 作为证书,连同私有指数 内置在Bob的系统中 - Alice若要与Bob协商密钥,选择
,计算 ,将 和 发送给Bob. - Bob选择
,计算 ,将 和 发送给Alice. - Alice计算
- Bob计算
最终的共享密钥值
公开: |
||
---|---|---|
Alice | Bob | |
私有指数 |
私有指数 |
|
选择 |
||
选择 |
||
使用 |
使用 |
|
计算 |
计算 |
此时如果存在一个Eve,截获并篡改了信息,试图进行中间人攻击,则会出现这样的情况:
对MTI协议的中间人攻击:
- Alice将
和 发送给Bob. - Eve截获此信息,将
篡改为 发送给Bob.(因为不知道Torrent的私钥,攻击者是没法对证书动手脚的) - Bob将
和 发送给Alice. - Eve同样截获此信息,将
篡改为 发送给Alice. - Alice计算
- Bob计算
- 然而,Eve因为不知道秘密指数
,因此无法计算出 中的任何一个,从而无法充当"中间人"
ECQMV密钥交换:
(TODO)
自证明公钥的密钥交换:
该协议的特点是不需要证书,公钥中隐含了ID
步骤1:从可信中心获取自证明公钥
Alice | Torrrent | Bob | ||
---|---|---|---|---|
取素数 |
||||
计算 |
||||
取在 |
||||
选取一个 |
||||
将 |
||||
选择 |
选择 |
|||
(首先需要验证提交的数据是否符合 |
||||
这样,当其他用户需要使用Alice的公钥时,只需计算
尽管
步骤2:用户之间交换密钥
Alice | Bob | |
---|---|---|
选择 |
选择 |
|
计算 |
计算 |
正确性:
Bob的计算过程同理.
对(弱化的)自证明公钥体系的攻击:
如果Torrent不要求用户提交
为描述简便,以下示例中Eve只在会话中试图拦截Bob发送的消息
步骤1:伪造并冒领
Eve | Torrent | |
---|---|---|
选取伪造的 |
||
计算 |
||
(Eve发送消息时就暴露了自己的 |
||
计算 |
||
步骤2:拦截篡改Alice与Bob的通信
Alice | Eve | Bob | ||
---|---|---|---|---|
篡改, |
||||
计算 |
计算 |
计算 |
Bob计算出的密钥:
Eve计算出的密钥:
Eve可以用同样的手段让Alice也计算得出伪造的密钥,这个例子说明了,向Torrent提交秘密指数
基于身份的密钥协商:
在该类协议中,ID就是公钥,而私钥是由系统中的TA(trusted authority)通过私钥生成器(private key generator,PKG)生成的
双线性映射:
设
(可以想象
将存在如下性质的函数
- 双线性性
, - 非退化性
- 计算有效性
,存在有效算法计算
(博主注:一个构造双线性映射的可行思路是,若2^q-1是素数,则可令G_2=(\{1,2,4,\cdots,2^{q-1}\},* \mod (2^q-1) ),e(Q,R)=2^{QR} \mod q)
(常用的双线性配对方案应当参考SN标准,反正我是没看懂)
基于身份的非交互密钥分配:
设
Alice,Bob的身份
TA选取主密钥
然后Alice计算
问题:
- 会话密钥是静态的
- 必须提前在系统中注册
基于身份的双方密钥交换:
设
Alice,Bob双方的身份
TA选取主密钥
当Alice和Bob要会话时,按如下步骤交换会话密钥:
Alice | Bob | |
---|---|---|
选取 |
||
选取 |
||
计算 |
计算 |
(博主注:将模
(而若
三方密钥交换:
Alice,Bob,Charlie三方为了会话要协商出一个相同的密钥
三方Diffie-Hellman密钥交换:
公开信息:模数 |
||
---|---|---|
Alice:选取 |
||
Charlie:选取 |
Bob:选取 |
Alice | ||
---|---|---|
Charlie | Bob |
Alice | ||
---|---|---|
Charlie | Bob |
Alice:计算 |
||
---|---|---|
Charlie:计算 |
Bob:计算 |
很明显,容易遭到中间人攻击.
基于双线性配对的密钥交换:
公开信息:模数
Alice:选择 |
||
Charlie::选择 |
Bob::选择 |
将生成的值直接广播即可.
Alice | ||
|
|
|
Charlie |
|
Bob |
Alice: |
||
Charlie: |
Bob: |
显然,
该方案只需要一轮通信便可得到会话密钥.
但仍然无法抵抗中间人攻击.
多方密钥交换:
最简单的思路:
Burmester-Desmedt多方密钥交换:
只需要两轮交互的密钥交换
公开信息:模数
- 对于每个用户
,选择 ,计算 并发送给上下家. - 获取自己上家,下家的广播信息,计算
,并广播 - 计算
即,将自己
以4个用户的密钥交换举例:
然后观察
还是没有考虑中间人攻击.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~