密码学——elgama加解密及数字签名算法
一、背景在密码学中,ElGamal加密算法是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。它在1985年由塔希尔·盖莫尔提出。GnuPG和PGP等很多密码学系统中都应用到了ElGamal算法。ElGamal加密算法可以定义在任何循环群G上。它的安全性基于离散对数难题。elgama算法可分别用作加解密与数字签名。二、加解密算法细节2.1 公私钥产生算法(KeyGenKeyGenKeyGen):随机选
·
一、背景
在密码学中,ElGamal加密算法是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。它在1985年由塔希尔·盖莫尔提出。GnuPG和PGP等很多密码学系统中都应用到了ElGamal算法。
ElGamal加密算法可以定义在任何循环群G上。它的安全性基于离散对数难题。
- elgama算法可分别用作加解密与数字签名。
二、加解密算法细节
2.1 公私钥产生算法(KeyGenKeyGenKeyGen):
- 随机选择一个满足安全要求的大素数ppp(通常1024bits),并生成有限域ZpZ_pZp的一个生成元g∈Zp∗g∈Z_p^*g∈Zp∗;
- 通常ppp产生方法:
- p=2x∗q+1p=2^x *q+1p=2x∗q+1,qqq为160bits大素数
- 随机选择一个随机数x(1<x<p−1)x(1<x<p-1)x(1<x<p−1),计算y≡gx(mod p)y≡g^x (mod\ p)y≡gx(mod p),则公钥为(y,g,p)(y,g,p)(y,g,p),私钥为xxx。
2.2 加密过程(EncryptionEncryptionEncryption)
- 对消息mmm进行加密;
- 随机选择整数r(1<r<p−1)r(1<r<p-1)r(1<r<p−1);
- 计算密文C=(c,c′)C=(c, c^{'})C=(c,c′),其中:c≡gr(mod p),c′≡myr(mod p)c≡g^r (mod\ p), c^{'}≡my^r(mod\ p)c≡gr(mod p),c′≡myr(mod p)。
2.3 解密过程(DecryptionDecryptionDecryption)
- 收到密文C=(c,c′)C=(c, c^{'})C=(c,c′);
- 使用密钥xxx对密文CCC解密得到消息mmm,m=c′/cx=(myr)/(gx)r=(myr)/yr(mod p)m= c^{'}/c^x =(my^r)/(g^x )^r =(my^r)/y^r (mod\ p)m=c′/cx=(myr)/(gx)r=(myr)/yr(mod p)。
三、数字签名算法
3.1 公私钥产生算法(KeyGenKeyGenKeyGen):
- 随机选择一个满足安全要求的大素数ppp(通常1024bits),并生成有限域ZpZ_pZp的一个生成元g∈Zp∗g∈Z_p^*g∈Zp∗;
- 通常ppp产生方法:
- p=2x∗q+1p=2^x *q+1p=2x∗q+1,qqq为160bits大素数
- 随机选择一个随机数x(1<x<p−1)x(1<x<p-1)x(1<x<p−1),计算y≡gx(mod p)y≡g^x (mod\ p)y≡gx(mod p),则公钥为(y,g,p)(y,g,p)(y,g,p),私钥为xxx。
3.2 签名算法(SignSignSign)
- 对消息m进行签名;
- 随机选择整数k(1<k<p−1)k(1<k<p-1)k(1<k<p−1);
- 计算rrr,r≡gk(modp)r≡g^k (mod p)r≡gk(modp);
- 计算sss,s≡[h(m)−xr]k−1(mod(p−1))s≡[h(m)-xr] k^{-1} (mod (p-1))s≡[h(m)−xr]k−1(mod(p−1)),h(m)h(m)h(m)表示哈希函数;
- 得出数字签名(r,s)(r, s)(r,s)。
3.3 签名验证(VerifyVerifyVerify)
- 根据公钥yyy,消息mmm验证数字签名(r,s)(r, s)(r,s);
- 计算gh(m)′g^{h(m)'}gh(m)′,gh(m)′=yrrs=(gx)r(gk)(h(m)−xr)/kg^{h(m)'}=y^r r^s=(g^x )^r (g^k )^{(h(m)-xr)/k}gh(m)′=yrrs=(gx)r(gk)(h(m)−xr)/k;
- 验证等式gh(m)′=gh(m)g^{h(m)'}=g^{h(m)}gh(m)′=gh(m)是否成立,若成立则为真,否则为假。
更多推荐



所有评论(0)