Java教程

ElGamal算法

本文主要是介绍ElGamal算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

简介

ElGamal算法可以用于加密和签名,其安全性依赖于计算有限域上离散对数的难度。

ElGamal密钥

生成密钥对时,首先选择素数p,两个随机数g和x,g和x都小于p,然后计算:
y = g ^ x mod p
私钥:x
公钥:y, g, p
其中,g和p可以由一组用户共享。

ElGamal加解密

加密

对消息m进行加密,首先选取随机数k,k和p-1互素,然后计算:
a = g ^ k mod p
b = y ^ k * m mod p
ab是密文对(密文的大小是明文的两倍)

解密

解密时,计算:
m = b / a ^ x (mod p)

ElGamal签名

签名

对消息m进行签名,首先选择随机数k,k和p-1互素,然后计算:
a = g ^ k mod p
然后利用扩展欧几里得算法从下式中求出b
m = (xa + kb) mod (p-1)
签名结果为:(a, b),随机数k需保密

验签

只需要验证:
y^a * a^b mod p = g ^ m mod p

这篇关于ElGamal算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!