RSA,DH,DSA
RSA
RSA公开密钥密码体制。
所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
- Choose two distinct prime numbers p and q. 【两个大质数】
- For security purposes, the integers p and q should be chosen at random, and should be of similar bit-length. Prime integers can be efficiently found using a primality test.
- Compute n = pq. 【n是两个大质数p、q的积】
- n is used as the modulus for both the public and private keys
- Compute φ(n) = (p – 1)(q – 1), where φ is Euler's totient function.
- Choose an integer e such that 1 < e < φ(n) and greatest common divisor of (e, φ(n)) = 1; i.e., e and φ(n) are coprime. 【e 和 φ(n) 互质】
- e is released as the public key exponent. 【e是公钥匙】
- e having a short bit-length and small Hamming weight results in more efficient encryption - most commonly 0x10001 = 65,537. However, small values of e (such as 3) have been shown to be less secure in some settings.[4]
- Determine d as:
- i.e., d is the multiplicative inverse of e mod φ(n).
- This is more clearly stated as solve for d given (de) mod φ(n) = 1
- This is often computed using the extended Euclidean algorithm.
- d is kept as the private key exponent. 【d是秘匙】
- i.e., d is the multiplicative inverse of e mod φ(n).
He first turns M into an integer m, such that by using an agreed-upon reversible protocol known as a padding scheme. He then computes the ciphertext corresponding to
Alice can recover from by using her private key exponent via computing
- .
Given , she can recover the original message M by reversing the padding scheme.
RSA的安全性依赖于大数分解,因此,模数n 必须选大一些,因具体适用情况而定。
由于进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。
http://baike.baidu.com/view/7520.htm
http://en.wikipedia.org/wiki/RSA_(algorithm)
DH
Alice | Bob | |||||
---|---|---|---|---|---|---|
Secret | Public | Calculates | Sends | Calculates | Public | Secret |
a | p, g | p,g | b | |||
a | p, g, A | ga mod p = A | A | p, g | b | |
a | p, g, A | B | gb mod p = B | p, g, A, B | b | |
a, s | p, g, A, B | Ba mod p = s | Ab mod p = s | p, g, A, B | b, s |
安全性:
Diffie-Hellman密钥交换算法的安全性依赖于这样一个事实:虽然计算以一个素数为模的指数相对容易,但计算离散对数却很困难。对于大的素数,计算出离散对数几乎是不可能的。
在选择了合适的G和g时,这个协议被认为是窃听安全的。
如果Alice和Bob使用的随机数生成器不能做到完全随机并且从某种程度上讲是可预测的,那么Eve的工作将简单的多。
身份验证
在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。 一个中间人在信道的中央进行两次迪菲-赫尔曼密钥交换,一次和Alice另一次和Bob,就能够成功的向Alice假装自己是Bob,反之亦然。而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。
优缺点:
1、 仅当需要时才生成密钥,减小了将密钥存储很长一段时间而致使遭受攻击的机会。
然而,该技术也存在许多不足:
http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange
DSS/DSA算法
Digital Signature Algorithm
(DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(Digital SignatureStandard)。算法中应用了下述参数:
p:L bits长的素数。L是64的倍数,范围是512到1024;
q:p - 1的160bits的素因子;
g:g = h^((p-1)/q) mod p,h满足h < p - 1, h^((p-1)/q) mod p > 1;
x:x < q,x为私钥 ;
y:y = g^x mod p ,( p, q, g, y )为公钥;
H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm )。
p, q,
g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。签名及验证协议如下:
1. P产生随机数k,k < q;
2. P计算 r = ( g^k mod p ) mod q
s = ( k^(-1) (H(m) + xr)) mod q
签名结果是( m, r, s )。
3. 验证时计算 w = s^(-1)mod q
u1 = ( H( m ) * w ) mod q
u2 = ( r * w ) mod q
v = (( g^u1 * y^u2 ) mod p ) mod q
若v = r,则认为签名有效。
DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却作不到。