欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[现代密码学原理] - 密钥管理和其他公钥密码系统(学习笔记)

最编程 2024-07-06 15:39:10
...

???? 前言:本章首先介绍最早、最简单的PKCS——Diffe-Hellman密钥交换,然后介绍另一个重要方案——EIGamal PKCS。

在这里插入图片描述


目录

  • ???? 0. 思维导图
  • ???? 1. Diffie-Hellman密钥交换
    • ???? 1.1 本原根(primitive root)
    • ???? 1.2 离散对数(discrete logarithm)
    • ???? 1.3 密钥交换过程
    • ???? 1.4 应用
  • ???? 2. 中间人攻击(man-in-the-middle attack)
  • ???? 3. EIGamal密码*

???? 0. 思维导图

在这里插入图片描述

???? 1. Diffie-Hellman密钥交换

  • 1976年,Diffie和Hellman首次公开提出了一种公钥算法,常被称为Diffie-Hellman密钥交换
  • DH算法用到的数学基础:本原根、离散对数

在这里插入图片描述
DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换
Diffie-Hellman密钥交换 Diffie-Hellman_Key_Exchange

???? 1.1 本原根(primitive root)

对于一个素数 ???? ???? q ,如果数值 a   ???? ???? ????   ???? , a ????   ???? ???? ????   ???? , a ????   ???? ???? ????   ???? , . . . a ( ???? − ???? )   ???? ???? ????   ???? a \ ???????????? \ ????,a^???? \ ???????????? \ ????,a^???? \ ???????????? \ ????,... a^{(????−????)} \ ???????????? \ ???? a mod qa2 mod qa3 mod q...a(q1) mod q是各不相同的整数,并且以某种排列方式组成了从1到???? -1的所有整数,则称整数????是素数????的一个本原根。

3是素数19的一个本原根,则:
3mod19=3 32 mod19=9 33 mod19=8
34 mod19=5 35 mod19=15 36 mod19=7
37 mod19=2 38 mod19=6 39 mod19=18
310 mod19=16 311 mod19=10 312 mod19=11
313 mod19=14 314 mod19=4 315 mod19=12
316 mod19=17 317 mod19=13 318 mod19=1

???? 1.2 离散对数(discrete logarithm)

对于一个整数????和素数????的一个本原根????,可以找到一个唯一的指数???? ,使得: ???? = a ????   ???? ???? ????   ???? ( ???? ≤ ???? ≤ ???? − ???? ) ????=a^???? \ ???????????? \ ????(????≤????≤????−????) b=ai mod q(0iq1)成立,则指数????称为????的以????为底数的模????的离散对数。

离散对数的难解性

  • 给定????、 ????和???? ,容易计算出????
  • 给定???? 、????和???? ,计算出????一般非常困难

???? 1.3 密钥交换过程

  • Alice和Bob要进行密钥交换,首先他们共享一个素数 q q q以及整数????,并公开
  • ????<????,????是素数q的本原根
  • Alice 选择随机整数 ???? ???? < ???? , ???? ???? ????_????<????,????_???? XA<qXA是私有的,只有Alice自己知道,即Alice的私钥
  • Bob 也选择一个随机整数 ???? ???? < ???? ????_????<???? XB<q,作为Bob 的私钥
  • Alice 计算 ???? ???? = a ???? ????   ???? ???? ????   ???? ????_????=a^{????_????} \ ???????????? \ ???? YA=aXA mod q,计算得到的 ???? ???? ????_???? YA是公开可访问的,即Alice的公钥
  • Bob 也计算他的公钥 ???? ???? = a ???? ????   ???? ???? ????   ???? ????_????=a^{????_????} \ ???????????? \ ???? YB=aXB mod q
  • Alice 将自己的公钥 ???? ???? ????_???? YA发送给 Bob,Bob获取到了Alice 的公钥
  • Bob 也将他的公钥 ???? ???? ????_???? YB发送给了Alice
  • Alice 计算 ???? = ( ???? ???? ) ???? ????   ???? ???? ????   ???? ????=(????_????)^{????_????} \ ???????????? \ ???? K=(YB)XA mod q
  • Bob 也使用该方法计算 ???? = ( ???? ???? ) ???? ????   ???? ???? ????   ???? ????=(????_????)^{????_????} \ ???????????? \ ???? K=(YA)XB mod q
  • 二人计算结果相同,至此双方完成了 K K K的交换
  • K K K值在双方本地生成,且只有双方已知,因此常将这个 K K K值作为对称密码的密钥

证明: ???? = ( ???? ???? ) ???? ????   ???? ???? ????   ???? ????=(????_????)^{????_????} \ ???????????? \ ???? K=(YB)XA mod q
= ( a ???? ????   ???? ???? ????   ???? ) ???? ????   ???? ???? ????   ???? (a^{????_???? } \ ???????????? \ ???? )^{????_????} \ ???????????? \ ???? (aXB mod q)XA mod q
= ( a ???? ???? ) ???? ????   ???? ???? ????   ???? (a^{????_???? })^{????_????} \ ???????????? \ ???? (aXB)XA mod q
= a ???? ???? ???? ????   ???? ???? ????   ???? a^{????_???? ????_???? } \ ???????????? \ ???? aXBXA mod q
= ( a ???? ???? ) ???? ????   ???? ???? ????   ???? (a^{????_???? })^{????_????} \ ???????????? \ ???? (aXA)XB mod q
= ( a ???? ????   ???? ???? ????   ???? ) ???? ????   ???? ???? ????   ???? (a^{????_???? } \ ???????????? \ ????)^{????_????} \ ???????????? \ ???? (aXA mod q)XB mod q
= ( ???? ???? ) ???? ????   ???? ???? ????   ???? {(????_????)}^{????_???? } \ ???????????? \ ???? (YA)XB mod q

在这里插入图片描述

练习题
已知A和B使用Diffie-Hellman密钥交换算法,共享参数q=11,它的一个本原根a=2,A的私钥为3,B的私钥为4,计算通信密钥K。
答:已知 q = 11 , a = 2 , X A = 3 , X B = 4 q=11, a=2, X_A=3, X_B=4 q=11,a=2,XA=3,XB=4
Y A = a X A   m o d   q   =   2 3   m o d   11   =   8 Y_A=a^{X_A} \ mod \ q\ = \ 2^3 \ mod \ 11 \ = \ 8 YA=aXA mod q = 23 mod 11 = 8
K   = ( Y A ) X B   m o d   q = 8 4   m o d   11 = 4 K \ = (Y_A)^{X_B} \ mod \ q = 8^4 \ mod \ 11 = 4 K =(Y