密码技术 (2) - 公钥密码

一. 前言

        公钥密码的秘钥分为加密秘钥和解密秘钥,加密秘钥成为公钥,解密秘钥成为私钥,公钥和私钥的成对存在的,一对公钥和私钥称为密钥对。发送消息时,发送者用公钥对消息进行加密,接收者用私钥进行解密。从这里可以知道,发送者只需要用公钥对消息进行加密,而接收者用私钥解密即可,这样就解决了对称密码的秘钥传送问题。公钥可以通过任何方式公开,但是接收者的私钥是绝对不能被别人知道的。

        由于加密的密码和解密的密码不同,与公钥密码相对的,公钥密码也被称为非对称密码。下面介绍公钥密码相关的几种加密算法。

二. 加密算法

1. RSA

        RSA这种公钥密码算法是由三位开发者完成,分别是Ron Rivest,Adi Shamir和Leonard Adleman。而RSA名字就是分别取自三人的姓的首字母。

        对于RSA在数学上的具体实现,这里不做探究

2. EIGamal

        EIGamal算法是由Taher EIGamal设计的,EIGamal相对于RSA有一个缺点,经过加密的密文长度会变为明文的两倍

三. openssl实践

        openssl通过genrsa,rsa和rsautl选项用于公钥密码,genrsa用于生成公钥和私钥,rsa用于处理rsa秘钥,例如由私钥生成公钥,rsautl是rsa的一些工具,例如加密解密。下面介绍生成私钥和公钥的方法以及利用公钥私钥加密和解密数据步骤:

1. 生成私钥

openssl genrsa -out private.pem 2048

        生成2048长度的私钥。 

2. 由私钥生成公钥

openssl rsa -in private.pem -pubout -out public.pem

3. 由公钥加密数据

infile内容:

ni hao,rsa

加密操作:

openssl rsautl -encrypt -pubin -inkey public.pem -in infile -out outfile

outfile内容:

00000000  29 44 23 c6 10 14 65 58  75 0d f7 ef f1 6e 77 9b  |)D#...eXu....nw.|
......
000000f0  10 a7 82 16 fd 44 dc d5  1b 3c ca a1 16 79 22 54  |.....D...<...y"T|

4. 由私钥解密数据

解密操作:

openssl rsautl -decrypt -inkey private.pem -in outfile -out decryptfile

decryptfile内容:

ni hao,rsa

四. 总结

        公钥密码对于对称密码是解决了秘钥的传送问题,公钥无法解密公钥加密的数据,只有私钥可以,所以任何人都可以获得公钥。不过公钥密码还存在一个问题,发送者不能确定公钥和接收者的私钥是密钥对,公钥可能被篡改,导致使用了中间攻击人的公钥,导致安全问题。

        除RSA算法外,公钥密码的算法还有,Rabin和椭圆曲线密码(ECC)。

你可能感兴趣的:(密码技术,密码技术)