您当前的位置: 首页 > 

小生叫安辰

暂无认证

  • 5浏览

    0关注

    105博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

鸿蒙源码分析(三十三)

小生叫安辰 发布时间:2021-08-16 08:09:25 ,浏览量:5

ecdh算法详解 一、算法概述

通过椭圆曲线 Diffie-Hellman (ECDH) 密钥协商协议,两个用户可以创建共享的机密协议。他们可以在不安全的公共媒体上完成此操作,而不必事先交换任何私有信息。该共享机密协议通常用于派生密钥材料。对称算法(如高级加密标准 (AES) 算法)可以使用密钥材料对后续消息进行加密。

下一代加密技术 (CNG) 安全通信示例演示了 ECDH 和 AES 算法的 CNG 实现。Alice、Bob 和 Mallory 在创建 Communicator 对象时在其 Run 方法中创建了加密密钥。

二、数学原理

ECDH 协议依赖两个公共参数:p 和 g。参数 p 是一个大的质数,参数 g 是一个小于 p 的整数。这两个参数通过不安全的线路进行交换。Alice 和 Bob 收到这两个公共参数后,选择私有整数。Alice 选择了 a,Bob 选择了 b。这些值称为私钥。

然后,Alice 和 Bob 使用公共参数及其私钥创建公钥。Alice 使用 (g^a) mod p,Bob 使用 (g^b) mod p。这些是非对称密钥,因为它们不匹配。

Alice 和 Bob 交换这些公钥,并使用它们计算共享的机密协议。虽然 Alice 和 Bob 不知道彼此的私钥,ECDH 数学也会保证 Alice 和 Bob 将计算出同一共享机密协议。 只有 a、b 和 g^ab = g^ba 保密。其他所有值都是公开的。

任何截获交换的人都能够复制 p、g 和两个公钥。但是,要在不知道 Alice 和 Bob 的私钥的情况下从四个公开共享值生成共享机密协议,在计算上是不可行的。

使用暴力(即尝试所有可能的密钥)对 ECDH 加密的消息进行解密的难度与离散对数问题属同一级别。不过,ECDH 算法使用较短的密钥即可达到相同程度的安全性,这是因为它依赖椭圆曲线而不是对数曲线。

三、算法示例

下面的示例使用小整数来演示 ECDH 算法。

  1. Alice 和 Bob 同意使用质数 p 和基础整数 g:

p = 83 , g = 8 p = 83, g = 8 p=83,g=8

  1. Alice 选择机密整数 a = 9,然后向 Bob 发送 (g^a) mod p:

( 8 9 ) m o d 83 = 5 (8^9) mod 83 = 5 (89)mod83=5

  1. Bob 选择机密整数 b = 21,然后向 Alice 发送 (g^b) mod p:

( 8 2 1 ) m o d 83 = 18 (8^21) mod 83 = 18 (821)mod83=18

  1. Alice 计算 ( ( (g^b) mod p)^a) mod p:

( 1 8 9 ) m o d 83 = 24 (18^9) mod 83 = 24 (189)mod83=24

  1. Bob 计算 ( ( (g^a) mod p)^b) mod p:

( 5 2 1 ) m o d 83 = 24 (5^21) mod 83 = 24 (521)mod83=24

由于 g^(ab) = g^(ba),Alice 和 Bob 计算出相同的值 (24)。该值就是共享机密协议。Alice 和 Bob 使用这个值派生 AES 算法用来对其消息进行加密的密钥材料。

此示例使用值 24 生成共享机密协议。由于这是一个小的值,它生成的加密消息很容易被暴力攻击破坏。在实际情况中,p、g、a 和 b 是很大的数,需要计算机来生成相应的共享机密协议。

安全通信示例中使用的 CNG 类对复杂的数学进行了抽象,使您可以将精力集中在实现安全解决方案上,而不是考虑如何将大数相乘。

四、协议限制

由于 ECDH 密钥交换协议不验证公钥发送者的身份,因此无法阻止中间人攻击。如果监听者 Mallory 截获了 Alice 的公钥,就可以替换为他自己的公钥,并将其发送给 Bob。Mallory 还可以截获 Bob 的公钥,替换为他自己的公钥,并将其发送给 Alice。这样,Mallory 就可以轻松地对 Alice 与 Bob 之间发送的任何消息进行解密。他可以更改消息,用他自己的密钥对消息重新加密,然后将消息发送给接收者。

为了解决此问题,Alice 和 Bob 可以在交换公钥之前使用数字签名对公钥进行签名。有两种方法可以实现此目的:

  • 使用安全的媒体(例如语音通信或可信载运商)在双方之间传输数字签名密钥。
  • 使用公共证书颁发机构 (CA) 向双方提供可信数字签名密钥。

在这两种情况下,都必须使用外部身份验证方案来验证公钥发送者的身份。CNG 示例演示了当未对密钥发送者进行身份验证时会发生的情况。编写该示例旨在启用一个安全漏洞。

关注
打赏
1635606302
查看更多评论
立即登录/注册

微信扫码登录

0.0459s