离散对数也是一种公钥加密算法,和RSA是基于大数分解这一数学难题一样,离散对数加密也是基于一个数学求解的难题,相对于大数据分解,求取离散对数的难度更大,所以离散对数加密也就相对更安全。
对于离散对数加密,下面对几个基本的概念:
1、离散对数求取难题
对于素数
p
,其可构成有限域Gp,可设
g
为Gp域上的生成元,对于任意
x
,求取h=gx,这个正向运算是非常简单的,但是,在已知
g
和h的条件下求取
x
则是非常困难的,这就是离散对数的求取难题,很显然,我们可以把x作为私钥,而把
h
作为公钥,反正你知道了h也很难求出
x
。
2、离散对数加密过程
假定有两个人要进行保密通信,也就是Alice要给Bob通信,Bob他把(p,g,h)作为公钥,
k
作为私钥,公钥和私钥的关系是:h=gk
Alice这个时候有条信息
m
需要发送给Bob,她将采用如下的方式加密,首先,她选取一个随机数r,得到
C1=gr
和
C2=m∗hr
,然后将
(C1,C2)
发送给Bob,这就完成了信息加密的过程,显然,Alice用了Bob的公钥进行加密,并且从加密的过程可以看出,Alice,随便选了一个
r
,但她给Bob传的是C1=gr,依据离散对数的求取难题,她可以放心的这样传,因为很难从
C1
得到
r
。
3、离散对数解密过程
Bob收到信息之后就利用自己的私钥进行解密:
C2∗(Ck1)−1=m∗hr∗g−r∗k=m∗gr∗k∗g−r∗k=m