• 【现代密码学原理】——密钥管理和其他公钥密码体制(学习笔记)


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

    在这里插入图片描述


    🕒 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 =(YA)XB mod q=84 mod 11=4

    🕘 1.4 应用

    • 对于连接在同一LAN下的不同用户,每人产生一个在较长时间内有效的私钥X,计算出公钥Y
      在这里插入图片描述

    • 将全体用户的公钥存放于中心目录

    • 当某用户要与其他用户通信时,只需访问中心目录即可获取对方公钥,计算出通信的密钥K

    • DH算法几乎已经渗透到互联网每个安全传输协议中,包括HTTPS中的加密标准SSL协议、SSH加密通信协议、IPSec等等

    • IPsec是一种安全的网络协议套件,通过网络在两台计算机之间提供安全的加密通信,它常用于VPN。

    • IKE是IPSec套件中的一部分,为IPSec提供了自动协商密钥。
      在这里插入图片描述

    扩展阅读
    SSH或Secure Shell是一种加密网络协议,用于通过不安全的网络安全地运行网络服务。典型的应用程序包括远程命令行,登录和远程命令执行,但是任何网络服务都可以使用SSH进行保护。其中,SSH进行密钥交换使用的就是Diffie-Hellman的密钥交换方案。

    在这里插入图片描述
    Internet协议安全性(IPsec)是一种安全的网络协议套件,可对数据包进行身份验证和加密,以通过Internet协议网络在两台计算机之间提供安全的加密通信。 它用于虚拟专用网络(VPN)。
    IKE是IPSec套件中的一部分。IKE为IPSec提供了自动协商密钥、建立IPSec安全联盟的服务,能够简化IPSec的使用和管理,大大简化IPSec的配置和维护工作。
    对等体之间建立一个IKE SA完成身份验证和密钥信息交换后,在IKE SA的保护下,根据配置的AH/ESP安全协议等参数协商出一对IPSec SA。
    其中,IKE用到的密钥信息交换方案就是Diffie-Hellman的密钥交换方案。

    ❗ 转载请注明出处
    作者:HinsCoder
    博客链接:🔎 作者博客主页

    🕒 2. 中间人攻击(man-in-the-middle attack)

    在这里插入图片描述

    • Alice和Bob交换密钥,Darth攻击
    • Darth 生成两个随机私钥 𝑿 𝑫 𝟏 、 𝑿 𝑫 𝟐 𝑿_{𝑫𝟏}、𝑿_{𝑫𝟐} XD1XD2,并计算相应的公钥 𝒀 𝑫 𝟏 、 𝒀 𝑫 𝟐 𝒀_{𝑫𝟏}、𝒀_{𝑫𝟐} YD1YD2
    • Alice将自己的公钥 𝒀 𝑨 𝒀_𝑨 YA传递给Bob
    • Darth将报文截获,修改成自己的公钥 𝒀 𝑫 𝟏 𝒀_{𝑫𝟏} YD1发给Bob
    • Darth用 𝒀 𝑫 𝟏 𝒀_{𝑫𝟏} YD1仿冒Alice
    • Bob收到 𝒀 𝑫 𝟏 𝒀_{𝑫𝟏} YD1,认为这是Alice的公钥
    • Bob 计算密钥 𝑲 𝟏 = ( 𝒀 𝑫 𝟏 ) 𝑿 𝑩   𝒎 𝒐 𝒅   𝒒 𝑲_𝟏=(𝒀_{𝑫𝟏})^{𝑿_𝑩} \ 𝒎𝒐𝒅 \ 𝒒 K1=(YD1)XB mod q
    • Darth 也计算密钥 𝑲 𝟏 = ( 𝒀 B ) 𝑿 D 1   𝒎 𝒐 𝒅   𝒒 𝑲_𝟏=(𝒀_{B})^{𝑿_{D1}} \ 𝒎𝒐𝒅 \ 𝒒 K1=(YB)XD1 mod q
    • Bob 将自己的公钥 𝒀 𝑩 𝒀_𝑩 YB传递给Alice
    • Darth将报文截获,修改成自己的公钥 𝒀 𝑫 𝟐 𝒀_{𝑫𝟐} YD2发给Alice
    • Darth用 𝒀 𝑫 𝟐 𝒀_{𝑫𝟐} YD2仿冒Bob
    • Alice收到 𝒀 𝑫 𝟐 𝒀_{𝑫𝟐} YD2,认为这是Bob的公钥
    • Alice 计算密钥 𝑲 2 = ( 𝒀 𝑫 2 ) 𝑿 A   𝒎 𝒐 𝒅   𝒒 𝑲_2=(𝒀_{𝑫2})^{𝑿_A} \ 𝒎𝒐𝒅 \ 𝒒 K2=(YD2)XA mod q
    • Darth 也计算密钥 𝑲 2 = ( 𝒀 A ) 𝑿 D 2   𝒎 𝒐 𝒅   𝒒 𝑲_2=(𝒀_{A})^{𝑿_{D2}} \ 𝒎𝒐𝒅 \ 𝒒 K2=(YA)XD2 mod q
    • Alice和Bob以为他们已经交换好了 K K K
    • 实际上Bob是与Darth共享密钥 K 1 K_1 K1
    • Alice是与Darth共享密钥 K 2 K_2 K2
    • 若Alice使用 K 2 K_2 K2给Bob发送消息 Y = E ( K 2 , X ) Y=E(K_2,X) Y=E(K2,X)
    • Darth截获后,使用与其共享的密钥 K A K_A KA进行解密 X = D ( K 2 , Y ) X=D(K_2,Y) X=D(K2,Y)
    • Darth可以将 X X X直接使用与Bob共享的密钥 K 1 K_1 K1加密,也可以修改后加密发出

    🕒 3. EIGamal密码体制

    • 1981年,数学家T.ElGamal在DH算法的基础上提出了另外一种公钥密码
    • ElGamal密码 是国际公认的较理想公钥密码体制,在数字签名标准DSS、电子邮件标准S/MIME中应用

    注:ElGamal不再用于密钥交换,而是像RSA这样用作加解密操作。

    • 𝒒 = 𝟏 𝟗 , a = 𝟏 𝟎 𝒒=𝟏𝟗,a=𝟏𝟎 q=19,a=10

    • Alice 选择私钥 𝑿 𝑨 = 𝟓 𝑿_𝑨=𝟓 XA=5 X A < q − 1 X^A XA<q1),计算 𝒀 𝑨 = a 𝑿 𝑨   𝒎 𝒐 𝒅   𝒒 = 𝟏 𝟎 𝟓   𝒎 𝒐 𝒅   𝟏 𝟗 = 𝟑 𝒀_𝑨=a^{𝑿_𝑨} \ 𝒎𝒐𝒅 \ 𝒒 = 𝟏𝟎^𝟓 \ 𝒎𝒐𝒅 \ 𝟏𝟗 = 𝟑 YA=aXA mod q=105 mod 19=3

    • Alice 的公钥对为: { 𝒒 , a , 𝒀 𝑨 } = { 𝟏 𝟗 , 𝟏 𝟎 , 𝟑 } \{𝒒,a,𝒀_𝑨\}=\{𝟏𝟗,𝟏𝟎,𝟑\} {q,a,YA}={19,10,3}

    • Bob 生成一个整数 k = 6 k=6 k=6 k < q kk<q

    • 收到Alice的公钥{19,10,3},计算密钥 𝑲 = ( 𝒀 𝑨 ) 𝒌   𝒎 𝒐 𝒅   𝒒 = 𝟑 𝟔   𝒎 𝒐 𝒅   𝟏 𝟗 = 𝟕 𝑲=(𝒀_𝑨)^𝒌 \ 𝒎𝒐𝒅 \ 𝒒 =𝟑^𝟔 \ 𝒎𝒐𝒅 \ 𝟏𝟗 = 𝟕 K=(YA)k mod q=36 mod 19=7

    • Alice的公钥{19,10,3}

    • Bob 要给Alice发送消息M=17,因此计算

    • 𝑪 𝟏 = a 𝒌   𝒎 𝒐 𝒅   𝒒 = 𝟏 𝟎 𝟔   𝒎 𝒐 𝒅   𝟏 𝟗 = 𝟏 𝟏 𝑪_𝟏=a^𝒌 \ 𝒎𝒐𝒅 \ 𝒒 =𝟏𝟎^𝟔 \ 𝒎𝒐𝒅 \ 𝟏𝟗=𝟏𝟏 C1=ak mod q=106 mod 19=11

    • 𝑪 𝟐 = 𝑲 𝑴   𝒎 𝒐 𝒅   𝒒 = 𝟕 × 𝟏 𝟕   𝒎 𝒐 𝒅   𝟏 𝟗 = 𝟓 𝑪_𝟐=𝑲𝑴 \ 𝒎𝒐𝒅 \ 𝒒 =𝟕×𝟏𝟕 \ 𝒎𝒐𝒅 \ 𝟏𝟗=𝟓 C2=KM mod q=7×17 mod 19=5

    • Bob 将密文 𝑪 𝟏 、 𝑪 𝟐 𝑪_𝟏、𝑪_𝟐 C1C2发送给Alice

    • Alice 根据 𝑪 𝟏 𝑪_𝟏 C1计算密钥 𝑲 = ( 𝑪 𝟏 ) 𝑿 𝑨   𝒎 𝒐 𝒅   𝒒 = 𝟕 𝑲=(𝑪_𝟏)^{𝑿_𝑨} \ 𝒎𝒐𝒅 \ 𝒒=𝟕 K=(C1)XA mod q=7

    • 根据 𝑪 𝟐 𝑪_𝟐 C2还原消息 𝑴 = ( 𝑪 𝟐 𝑲 − )   𝒎 𝒐 𝒅   𝒒 = 𝟏 𝟕 𝑴=(𝑪_𝟐 𝑲^− ) \ 𝒎𝒐𝒅 \ 𝒒=𝟏𝟕 M=(C2K) mod q=17

    在这里插入图片描述

    练习题
    已知B要给A发送消息5,使用ElGamal加密,k=3,q=11,a=2,A的私钥为4,给出密钥K、密文C1与密文C2。
    答:已知 M = 5 , k = 3 , q = 11 , a = 2 , X A = 4 M=5, k=3, q=11, a=2, X_A=4 M=5,k=3,q=11,a=2,XA=4
    Y A = a X A   m o d   q = 2 4   m o d   11 = 5 Y_A=a^{X_A} \ mod \ q = 2^4 \ mod \ 11 = 5 YA=aXA mod q=24 mod 11=5
    K = ( Y A ) k   m o d   q = 5 3   m o d   11 = 4 K = (Y_A)^k \ mod \ q = 5^3 \ mod \ 11 = 4 K=(YA)k mod q=53 mod 11=4
    C 1 = a k   m o d   q = 2 3   m o d   11 = 8 C_1 = a^k \ mod \ q = 2^3 \ mod \ 11 = 8 C1=ak mod q=23 mod 11=8
    C 2 = K M   m o d   q = 4 × 5   m o d   11 = 9 C_2 = KM \ mod \ q = 4×5 \ mod \ 11 = 9 C2=KM mod q=4×5 mod 11=9


    OK,以上就是本期知识点“密钥管理和其他公钥密码体制”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
    💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
    🎉如果觉得收获满满,可以点点赞👍支持一下哟~

    ❗ 转载请注明出处
    作者:HinsCoder
    博客链接:🔎 作者博客主页

  • 相关阅读:
    【Java UI】HarmonyOs如何集成Hawk
    甜型葡萄酒取决的因素有哪些?
    Nucleic Acids Research | AlphaFold 蛋白质结构数据库
    19c集群 两节点时间相差太大导致集群异常
    外包干了3个月,技术退步明显。。。。。
    VsCode 自动生成文件头部注释和函数注释
    软件测试需求分析是什么?为什么需要进行测试需求分析?
    css实现高度是宽度一半的效果
    MQTT协议规范总结
    数字IC手撕代码-XX公司笔试真题(数据流pipeline加和)
  • 原文地址:https://blog.csdn.net/HinsCoder/article/details/127512710