当前位置: 首页 > article >正文

对称密码中的密钥是如何实现安全配送的?

对称密码在设计时就存在一个天然的缺陷,就是要求通信双方都要持有相同的密钥。确保密钥的安全传输和防止密钥泄露,往往比加密算法本身更为复杂和困难。一旦密钥被第三方获取,通信的安全性就会受到严重威胁,从而可能暴露敏感信息。接下来跟随博主一起来探索下如何在不安全的网络传输通道中实现密钥共享。

1. 什么是密钥配送问题

密钥配送问题是指在对称密码算法中,加密和解密使用同一个密钥,发送方必须设法将密钥安全地发送给接收方,而不会被第三方窃听者截获。如果密钥被窃取,那么加密的数据也会被破解,因此密钥的安全配送成为对称密码算法的一个关键问题

为了解决这个问题,密码学领域发展出了多种策略和解决方案。下面分别介绍几种主要的方法:

  • 通过通信双方事先共享密钥密钥来解决
  • 通过密钥分配中心(KDC)来解决
  • 通过密钥交换Diffie-Hellman(DH)来解决
  • 通过公钥密码来解决

为了让以下讲解更容易被大家理解,我们假设有如下场景:Alice在网上认识了Bob,现在Alice想给Bob发一封邮件,Alice不想让别人知道邮件的内容,所以她采用了对称密码算法。

接下来Alice就需要想办法让对称密码(此处也可称为密钥或加密密钥) 通过安全的方式提供给Bob。

Alice与Bob采用对称密码方式通信

2. 如何解决密钥配送问题?

2.1. 通过通信双方事先共享密钥来解决

事先共享是指事先用安全的方式将密钥交给对方。这种方法最为简单,但却存在以下局限

  • 地理位置限制:如果Alice和Bob家距离较近,Alice找到Bob,直接告诉他密钥就可以了。如果他们相距较远,就很难事先共享密钥了。通信双方地理位置较远
  • 记录和管理困难:即使能够实现事先共享密钥,但在人数较多的场景下,通信所需要的密钥数量也会增大,记录和管理如此多的密钥将变更非常困难。比如果Alice除了和Bob发加密邮件,还和另外1000个网友发加密邮件,那么Alice就需要记忆和管理1000个密钥,对于Alice来说,这几乎不可能。

2.2. 通过密钥分配中心(KDC)来解决

若所有参与通信的双方都要事先共享密钥,从而导致密钥的数量巨大,可以使用密钥分配中心(Key Distribution Center,KDC)来解决密钥配送问题。密钥分配中心会给每个人生成一个通信密钥,每个人只要和KDC事先共享密钥就可以了。

:实质上是把数量巨大的密钥交给KDC记录和管理了,每个人只需要记录自己与KDC的事先共享密钥。

有了KDC后,Alice向Bob发送加密邮件时,具体的步骤如下:

  1. Alice向KDC发出希望与Bob进行通信的请求。
  2. KDC生成一个会话密钥S,用于Alice和Bob在本次通信中用于加解密邮件;
  3. KDC从数据库中取出Alice的密钥A和Bob的密钥B
  4. KDC用Alice的密钥(KDC与Alice的事先共享密钥A)对会话密钥S进行加密,并发送给Alice;
  5. KDC用Bob的密钥(KDC与Bob的事先共享密钥B)对会话密钥S进行加密,并发送给Bob;
  6. Alice对来自KDC的会话密钥(己使用Alice的密钥A加密)进行解密,得到会话密钥S
  7. Alice用会话密钥S对邮件进行加密,并将邮件发送给Bob;
  8. Bob对来自KDC的会话密钥(己使用Bob的密钥B加密)进行解密,得到会话密钥S
  9. Bob用会话密钥S对来自Alice的加密邮件进行解密。
  10. Alice和Bob删除会话密钥S

KDC工作原理

上图为在KDC的参与下,Alice与Bob的加密通信过程。虽然KDC有效,但也存在局限

  • 所有的加密通信都由KDC处理,随着通信参与方增多,KDC的负荷也随之增加,可能出现单点故障导致整个加密通信平台瘫痪;
  • 如果 KDC被攻破,所有的通信都会被攻击者破译

2.3. 通过密钥交换Diffie-Hellman(DH)来解决

Diffie-Hellman密钥交换是1976年由Whitfield Diffie和Martin Hellman共同发明的一种算法。通过此算法,通信双方仅通过交换一些可公开的信息就能够生成出共享密钥了。

虽然这种算法被称为密钥交换,但双方并没有真正的交换过密钥,而是通过计算生成了一个相同的共享密钥。因此,这种算法也被称为Diffie-Hellman密钥协商

DH密钥交换流程

由于Diffie-Hellman密钥协商原理比较复杂,一两句话说不清楚,在本文就不展开介绍了,如果大家感兴趣可以参阅博主文章《一文读懂密钥交换(DH、ECDH)算法(附密码国标下载)》。

2.4. 通过公钥密码来解决

在公钥密码中加密密钥(公钥)和解密密钥(私钥)是不同的。加密密钥是可以公开的,任何知道加密密钥的人都可以进行加密,但只有拥有解密密钥的人才能解密。

公钥密码原理

为了解决Alice与Bob的加密通信问题,Bob可以将加密密钥(公钥)发送给Alice,即便此加密密钥被他人窃取也关系不大,因为只有Bob才有解密密钥(私钥)。这样一来,其实就不存在密钥配送问题了。即采用公钥密码替代对称密钥可以解决密钥配送问题。

当然还有一种比较好的实践方法(HTTPS通信中常用的方式),即将对称密码的共享密钥通过公钥密码(用对方的公钥加密共享密钥)来配送,由于步骤与公钥密码类似(仅把公钥密码中通信的消息换成了共享密钥),具体工作流程如下图。

通过公钥密码来执行密钥配送

需要注意的是,如果采用了公钥密码来进行密钥配送,就又会涉及到数字证书和数字签名问题。若想了解更多关于公钥密码、数字签名和数字证书的细节,可以参阅博文:

  • 《一文彻底搞懂公钥密码、数字签名和数字证书》



http://www.kler.cn/a/308295.html

相关文章:

  • Windows C++ TCP/IP 两台电脑上互相传输字符串数据
  • HTTP 客户端怎么向 Spring Cloud Sleuth 传输跟踪 ID
  • 实现 MVC 模式
  • NVIDIA Isaac Sim 仿真平台体验测评
  • 猿创征文|Inscode桌面IDE:打造高效开发新体验
  • 拦截器实现http请求访问本地图片
  • 【数据结构】快速排序详解(递归版本)
  • 初始爬虫7
  • 时间安全精细化管理平台存在未授权访问漏洞
  • 项目管理 | 一文读懂什么是敏捷开发管理
  • Zotero使用(一)PDF文件导入不会自动识别
  • 3C认证---GB 4706.1-2005
  • 【Java EE】冯·诺依曼体系结构及其在 JavaEE 中的应用
  • systemctl控制服务和守护进程
  • Redis——常用数据类型set
  • nginx服务器安装和部署代理
  • [论文笔记] CSFCN
  • SpringSecurity原理解析(六):SecurityConfigurer 解析
  • 拖拽排序的实现示例demo
  • Mysql调优之性能监控(一)
  • C++11(5)
  • 5G毫米波阵列天线仿真——CDF计算(手动AC远场)
  • 服务器究竟该怎么防范UDP泛洪攻击?
  • 【计算机网络】TCP 协议——详解三次握手与四次挥手
  • 中秋节程序员一般在干啥?
  • 管道焊缝质量数据集——good和bad两种标签,0为good.1134个图片,有对应的xml标签和txt标签,可用于yolo训练