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

原文地址:https://www.cnblogs.com/block2016/p/5615042.html