数字签名的机制很是简单,下面两图分别描述了数字签名的通常模型和签名过程的简单描述git
ElGamal数字签名方案算法
和ElGamal加密方案同样,ElGamal数字签名方案的基本元素是素数q和α,其中α是q的本原根。加密
用户A首先生成公钥/私钥对:spa
一、生成随机整数XA,使得1 < XA < q - 13d
二、计算YA = αXA mod qblog
三、A的私钥是XA;A的公钥是{q , α , YA}it
用户A对消息M进行签名:密码
一、用Hash算法计算消息M的Hash值 m = H(M) ,1 ≤ m ≤ q-1im
二、随机选择整数K,K知足1 ≤ K ≤ q-1,因为q是素数所以K与q必然互素img
三、计算 S1 = αK mod q 和 S2 = K-1(m - XAS1) mod (q - 1) ,K-1是 K 模q - 1的逆
四、签名包括(S1 , S2)对
任何一个用户B均可以经过如下步骤验证签名:
一、计算V1 = αm mod q
二、计算V2 = (YA)s1 (S1)S2 mod q
三、若是V1 = V2,则签名合法
证实:
αm mod q = (YA)s1 (S1)S2 mod q
αm mod q = αXAS1 αKS2 mod q
αm-XAS1 mod q = αKS2 mod q
m - XAS1 ≡ KK-1(m - XAS1) mod (q - 1) //本原根的性质
Schnorr数字签名方案
Schnorr方案的改进在于将生成签名所需的消息计算量最小化,它将生成签名的主要工做不依赖于消息,以便在处理器空闲时执行。
用户A首先生成公钥/私钥对:
一、选择素数p和q,使得q是p-1的素因子
二、选择整数α,使得αq = 1 mod p。p , q , α 是公开参数。
三、选择随机整数s,0 < s < q,计算 v = α-s mod p
四、A的私钥是s;A的公钥是v
用户A对消息M进行签名:
一、随机选择整数r,1 ≤ r ≤ q-1,并计算 x = αr mod p。该过程与待签名消息M无关,能够预处理。
二、将x附在消息后面一块儿计算Hash值e:e = H(M || x)
三、计算 y = (r + se) mod q。
四、签名包括(e , y)对
任何一个用户B均可以经过如下步骤验证签名:
一、计算x'= αyve mod p
二、计算e = H(M || x')
证实:
x' ≡ αyve ≡ αyα-se ≡ αy-se ≡ αr ≡ x (mod p)
DSS算法 Digital Signature Services
DSS与RSA不一样,它是一种只提供数字签名功能的公钥密码算法,不能用于加密或密钥交换。