PKI是Public Key Infrastructure的缩写,讲到Public Key,自然要谈到RSA算法,讲到RSA算法自然要讲到密码学,正式密码学的发展催生了RSA。那么我们先来看一下RSA是如何产生的。
RSA的诞生
密码学是靠着战争发家的,在战争中,对阵双方为了保障自己的通信安全并窃取、破译对方的情报,于是就产生了密码学。密码学的发展大致可分为手工加密阶段、机械加密阶段和计算机加密阶段。(可参考《Java加密与解密的艺术(第2版)》中相关篇幅。
第二次世界大战后,计算机与电子学快速发展,促进并推动了密码学进入计算机加密阶段,RSA便是诞生在计算机加密阶段。
在1949年之前,密码学是一门艺术;在1949~1975年,密码学成为科学;
1949年,信息论始祖克劳德·艾尔伍德·香农(Claude Elwood Shannon)发表了《保密系统的通信理论》一文,把密码学建立在严格的数学基础之上,为密码学的发展奠定了理论基础。密码学由此成为一门真正的科学。在此之前,密码学完全是一门艺术,密码的设计和分析完全依赖于密码专家的直觉。
1976年以后,密码学有了新方向—公钥密码学;1977年以后,密码学广泛应用于各种场所。
1976年,密码学专家迪菲(Whitfield Diffie)和赫尔曼(Martin E. Hellman)两人发表了《密码学的新方向》一文,解决了密钥管理的难题,把密钥分为加密的公钥和解密的私钥,提出了密钥交换算法(Diffie-Hellman,DH),这是密码学的一场革命。
1977年,美国国家标准技术研究所(National Institute of Standardsand Technology,NIST)制定数据加密标准(Data Encryption Standard,DES),将其颁布为国家标准,这是密码学历史上一个具有里程碑意义的事件。
同年,密码学专家罗纳德·李维斯特(Ronald L. Rivest)、沙米尔(Adi Shamir)和阿德勒曼(Len Adleman)在美国麻省理工学院,共同提出第一个较完善的公钥密码体制 — RSA体制,这是一种建立在大数因子分解基础上的算法。
RSA为数字签名奠定了基础。RSA源于整数因子分解问题,DSA源于离散对数问题。RSA和DSA是两种最流行的数字签名机制。数字签名是公钥基础设施(Public Key Infrastructure,PKI)以及许多网络安全机制(SSL/TLS,VPNs等)的基础。自此以后,密码学成为通信、计算机网络、计算机安全等方面的重要工具。
RSA密钥对生成
RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。
下面我们尝试通过RSA算法生成一对密钥对。
1. 使用openssl genrsa命令生成一个私钥,保存到文件,设置私钥密码;
该命令默认生成2048位的私钥,使用PEM编码格式,输出到文件/export/toman-private-key.pem,且设置私钥密码为mypass。
openssl genrsa -out /export/pkcs1-private-key.pem -passout pass:mypass
2. 根据私钥导出公钥
公钥是通过私钥导出的,通过执行openssl rsa命令,-in后面是对应的私钥文件,-RSAPublicKey_out的意思是导出私钥对应的公钥,-out后面对应的是导出公钥的文件。
openssl rsa -in /export/pkcs1-private-key.pem -RSAPublicKey_out -out /export/pkcs1-public-key.pem
生成的私钥和公钥文件内容如下: