密钥交换

密钥交换简单点来说就是允许两名用户在公开媒体上交换信息以生成“一致”的、可以共享的密钥。也就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通信中作为对称密钥来加密通讯内容。

离散对数问题

如果p 是一个素数,g 和x 是整数,计算 \(y = g^x mod p\) 非常快。但是相反的过程:先知道 p, g 和y,要求某个x(离散对数),满足等式\(y = g^x mod p\),通常十分困难。此相反求离散对数的过程称为“离散对数问题”。例如:如果\(15 = 3^xmod 17\), 则x = 6。

g和p的选择对此类系统的安全性影响很大。为了保证无法求解离散对数问题,p应该是一个很大的素数,例如1024bit的,而且 (p-1)/2也应该是素数。g要求是p的primitive root,也就是讲整数序列: \(g^0 mod p,g^1 mod p, g^2 mod p, …., g^{p-1} mod p\)中的p个元素均是不同的整数。

DH协议

问题

Alice和Bob 想共有一个密钥,用于对称加密。但是他们之间的通信渠道是不安全的。所有经过此渠道的信息均会被敌对方:Eve看到。哪他们要如何交换信息,才能不让Eve知道这个密钥呢?

方法

DH 算法的安全性依赖于计算离散对数问题,DH协议的方案:

1、Alice和Bob先对p 和g达成一致,而且公开出来。Eve也就知道它们的值了。

2、Alice取一个私密的整数a,不让任何人知道,发给Bob 计算结果:\(A=g^a mod p\). Eve 也看到了A的值。

3、类似,Bob 取一私密的整数b,发给Alice计算结果\(B=g^b mod p\).同样Eve也会看见传递的B是什么。

4、Alice 计算出\(K'=B^a mod p=(g^b)^a mod p=g^{ab} mod p\).

5、Bob 也能计算出\(K=A^b mod p=(g^a)^b mod p=g ^{ab} mod p\).

6、Alice 和 Bob 现在就拥有了一个共用的密钥K/K'.

7、虽然Eve看见了p,g, A and B, 但是鉴于计算离散对数的困难性,她无法知道a和b 的具体值。所以Eve就无从知晓密钥K/K' 是什么了。

中间人攻击

简单描述为:一个中间人“丙”在信道的中间进行两次DH密钥交换,一次和甲,另一次和乙,就能够成功的向甲假装自己是乙,反之亦然。

而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。

有很多种安全身份验证解决方案使用到了DH密钥交换。例如当甲和乙共有一个公钥基础设施时,可以将他们的返回密钥进行签名。

参考

1、DH 密钥交换算法

2、Diffie–Hellman 密钥交换协议简介

最新文章

  1. 对JavaScript中异步同步机制以及线程深入了解
  2. Delphi常用关键字用法详解
  3. 点的双联通+二分图的判定(poj2942)
  4. OC基础(15)
  5. 《第一行代码--Android》阅读笔记之广播
  6. Spring3.0将全面支持REST
  7. (转)Quartz.NET管理类
  8. 【Linux远程管理】SSH协议远程管理
  9. 20160427Struts2--入门1
  10. javascript高级知识分析——实例化
  11. python语言学习4——使用文本编辑器
  12. 将数组分割为几个等长度的子数组(使用slice)
  13. LINUX 笔记-文件属性相关命令
  14. fail2ban防止SSH暴力破解
  15. 回温js算法
  16. 自学华为IoT物联网_06 智慧家庭物联网常见问题及解决方案
  17. Linux下学习摄像头使用
  18. iOS 随机数获取
  19. java Scanner和Random的Demo
  20. Git下的.DS_Store文件

热门文章

  1. 龙芯 3A4000 安装 Debian stable
  2. [C语言基础] 数组与指针之间的引用
  3. 【刷题-LeetCode】150 Evaluate Reverse Polish Notation
  4. 安全检测服务如何帮助社交类App提升应用自身和用户个人安全
  5. 【记录一个问题】铁威马NAS存储中的python3,安装后找不到xml这个包
  6. 一些Markdown扩展语法
  7. 测试开发实战[提测平台]19-Echarts图表在项目的应用
  8. Python的开发环境
  9. springcloud介绍
  10. B/S与C/S