zoukankan      html  css  js  c++  java
  • ElGamal密码

    ElGamal也是一种基于离散对数的公钥体制,与Diffie-Hellman密钥体制密切相关。ElGamal密码体系用于数字签名标准(DSS)和S/MIME电子邮件标准等一些技术标准中。

    算法描述:

      1、用户A选择一个素数qq的某本原根α,并产生一随机数XA1 < XA < q - 1。计算YA = αXA mod qA的私钥为XA,公钥为{q , α , YA}

      2、用户B要和用户A通信,使用A的公钥加密信息。加密过程如下:

        a) 使用分组密码序列的方式发送消息,每块分组表示成一个整数M, 1 ≤ M ≤ q - 1

        b) 选择一个随机整数β,使得1 ≤ β ≤ q - 1。每块分组的k值不相同

        c) 计算一次密钥K = (YA)β mod q

        d) 将M加密成明文对(C1,C2),其中

          C1 = αβ mod q     C2 = KM mod q

      用户A恢复明文

        a)  通过计算K = (C1)XA mod q恢复密钥K   

        b)  计算M = (C2K-1) mod q

    之所以每块分组的k都必须不同是因为若有多块分组k相同,则攻击者可以根据某块已知明文推算出其他的未知明文。

        C1.1 = αk mod q       C2.1 = KM1 mod q

        C1.2 = αk mod q       C2.2 = KM2 mod q

      于是

        

        如果M1已知,则可以很容易计算出M2

        M2 = (C2.1)-1C2.2M1 mod q

  • 相关阅读:
    ubuntu 查看cpu核数
    安装pytorch
    杀死用kill id+父进程
    ubuntu 更改目录所有者
    查看cuda版本+安装cuda+安装conda
    挂载新硬盘
    Linux负载过高【10.13】
    C++中c_str()
    为什么C++比python快?
    C++匿名函数
  • 原文地址:https://www.cnblogs.com/block2016/p/5615042.html
Copyright © 2011-2022 走看看