[现代密码学原理] - 密钥管理和其他公钥密码系统(学习笔记)
???? 前言:本章首先介绍最早、最简单的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 q,a2 mod q,a3 mod q,...a(q−1) 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(0≤i≤q−1)成立,则指数????称为????的以????为底数的模????的离散对数。
离散对数的难解性
- 给定????、 ????和???? ,容易计算出????
- 给定???? 、????和???? ,计算出????一般非常困难
???? 1.3 密钥交换过程
- Alice和Bob要进行密钥交换,首先他们共享一个素数 q q q以及整数????,并公开
- ????<????,????是素数q的本原根
- Alice 选择随机整数 ???? ???? < ???? , ???? ???? ????_????<????,????_???? XA<q,XA是私有的,只有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