密码学9公钥密码体制

10. 公钥密码体制

  • 定义Diffie-Hellman密钥交换:基于离散对数,保证安全交换密钥的算法。
    • 流程:
      • 产生私钥
      • 通过离散对数计算公钥
      • 交换公钥
      • 计算共享密钥
  • 理解中间人攻击:敌手拦截并获得数字共享的信息。
  • 概述ElGamal密码系统
    • A生成密钥对 { q , α , Y A q,\alpha,Y_{A} q,α,YA}。
    • B加密消息为 ( C 1 , C 2 ) (C_{1},C_2) (C1,C2)
    • A恢复明文: M = ( C 2 K − 1 ) m o d    q M=(C_2K^{-1})\mod q M=(C2K1)modq
  • 理解椭圆曲线算术:三次方程,ECC基于计算 Q = k P Q = kP Q=kP 中 k 的困难。
  • 使用非对称密码生成伪随机数的两种技术:哈希函数、伪随机数生成器。

10.1 Diffie-Hellman 密钥交换

算法有效性依赖于计算离散对数的困难性。(基于 b ≡ a i m o d    p b \equiv a^{i}\mod p baimodp 0 ≤ i ≤ p − 1 0 \le i \le p -1 0ip1))

算法目的:安全地交换密钥。(算法仅限于交换密钥)


算法流程

  • Alice 随机选择整数== X A X_{A} XA作为私钥并计算公钥== Y A = g X A m o d    p Y_{A} = g^{X_{A}}\mod p YA=gXAmodp 。(p 为素数, g 为 p 的本源根
  • Bob随机选择== X B X_{B} XB 作为私钥并计算公钥== Y B = g X B m o d    p Y_{B} = g^{X_{B}}\mod p YB=gXBmodp
  • Alice和Bob互换公钥
  • 两人分别计算共享密钥 K = ( Y i ) X i m o d    q K = (Y_{i})^{X_{i}}\mod q K=(Yi)Ximodq

由于缺少数字签名或证书,该算法不能抵抗中间人攻击


10.2 中间人攻击

敌手拦截并获得数字共享的信息。(窃听)

在Diffie-Hellman中,敌手可以通过自己生成两个密钥 X D 1 X_{D_{1}} XD1 X D 2 X_{D{2}} XD2 ,用同样的方法和A、B分别共享密钥。


10.3 ELGamal 密码体制

基于离散对数的公钥体制,用于数字签名。


算法流程

  • 用户A生成密钥对:(q 为素数 α \alpha α 为 q 的本原根)。

    • 随机生成 X A ∈ ( 0 , q − 1 ) X_{A} \in (0,q-1) XA(0,q1)
    • 计算 Y A = α X A m o d    q Y_{A} = \alpha^{X_{A}} \mod q YA=αXAmodq
    • 私钥 X A X_{A} XA公钥为 { q , α , Y A q,\alpha,Y_{A} q,α,YA}。
  • B通过A的公钥加密消息M ∈ [ 0 , q − 1 ] \in [0,q-1] [0,q1](长消息作为一系列分组发送):

    • 选择任意整数 k ∈ [ 1 , q − 1 ] k \in [1,q-1] k[1,q1]
    • 计算一次密钥 K = ( Y A ) K m o d    q K = (Y_{A})^{K}\mod q K=(YA)Kmodq
    • M 加密为整数对 ( C 1 , C 2 ) (C_{1},C_2) (C1,C2)

    C 1 = α k m o d    q C 2 = K M m o d    q C_1 = \alpha^{k}\mod q \\C_2 = KM \mod q C1=αkmodqC2=KMmodq

  • A 恢复明文:

    • 恢复密钥: K = ( C 1 ) X A m o d    q K = (C_1)^{X_{A}}\mod q K=(C1)XAmodq

    • 计算M = ( C 2 K − 1 ) m o d    q (C_2K^{-1})\mod q (C2K1)modq

安全性基于离散对数计算困难问题。

敌手需要计算公钥一次密钥,进行两次离散对数的计算。


10.4 椭圆曲线算术

椭圆曲线由三次方程描述。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

椭圆曲线加密流程:考虑方程 Q = k P Q = kP Q=kP。( Q , P ∈ E p ( a , b ) Q,P \in E_{p} (a,b) Q,PEp(a,b) k < p k < p k<p)(基于算 k k k 的复杂性

  • A的密钥生成:
    • 选择私钥 n A < n n_{A} < n nA<n(n 为 椭圆曲线的阶)
    • 计算公钥 P A = n A ∗ G P_{A} = n_{A} * G PA=nAG (G为椭圆曲线上的点)
  • B的密钥生成:
    • 选择私钥 n B < n n_{B} < n nB<n(n 为 椭圆曲线的阶)
    • 计算公钥 P B = n B ∗ G P_{B} = n_{B} * G PB=nBG (G为椭圆曲线上的点)
  • 计算秘密钥 K:
    • B : K = n B ∗ P A K = n_{B} * P_{A} K=nBPA
    • A: K = n A ∗ P B K = n_{A} * P_{B} K=nAPB
  • A 选择 k 加密消息发送给 B:
    • 密文 C m = { k G , P m + k P B } C_{m} = \{ kG,P_{m}+kP_{B}\} Cm={kG,Pm+kPB}

{B} * P_{A}$

  • A: K = n A ∗ P B K = n_{A} * P_{B} K=nAPB
  • A 选择 k 加密消息发送给 B:
    • 密文 C m = { k G , P m + k P B } C_{m} = \{ kG,P_{m}+kP_{B}\} Cm={kG,Pm+kPB}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值