RSA
RSA 加密和解密是可交换的
因此它可以直接用作数字签名方案
给定一个 RSA 方案{(e,R) ,(d,p,q)}
to sign a message M, compute:
S = M 次方 d (mod R)
为了验证签名,计算:
M = S 幂 e (mod R) = M 幂 e.d (mod R) = M (mod R) < br >
数字签名算法
DSA is a variant on the ElGamal and Schnorr algorithms.
它创建一个320位的签名,但具有512-1024位的安全性
再次依赖于计算离散对数的困难
has been quite widely accepted.
密钥生成
首先选择共享的全局公钥值(p,q,g) :
选择一个大素数 p = 2次方 L
其中 L = 512到1024位,是64的倍数
choose q, a 160 bit prime factor of p-1
choose g = h power (p-1)/q
对于任意 h < p-1,h (p-1)/q (mod p) > 1
then each user chooses a private key and computes their public key:
选择 x < q
compute y = g power x(mod p)
DSA 密钥生成与 El Gamal 有关,但比 El Gamal 要复杂一些。
主要是因为使用了辅助的160位模 q 来帮助
加速计算并减小结果签名的大小。
DSA Signature Creation and Verification
签署一个信息 M
生成随机签名密钥 k,k < q
compute
R = (g 次方 k (mod p))(mod q)
S = k-1. SHA (M) + x.r (mod q)
使用消息 < br > < br > 发送签名(r,s)
to verify a signature, compute:
W = s-1(mod q)
U1 = (SHA (M) . w)(mod q)
U2 = r.w (mod q)
V = (g 次方 u1.y 次方 u2(mod p))(mod q)
如果 v = r,则验证签名
签名创建与使用
每条消息的临时签名密钥 k 但是执行计算第一修改密钥 p,
然后调用 mod q 来减小结果的大小
散列函数 SHA 在这里是显式的
比较两个计算,同样比,
但与 El Gamal 有关。 注意,几乎所有的计算都是 mod q,和
因此速度要快得多。 < br >
但是,与 RSA 不同的是,DSA 只能用于数字签名