RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难。
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。
RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密) e1和e2可以互换使用,即: A=B^e1 mod n;B=A^e2 mod n;
公钥与私钥
公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对,用于“非对称加密”,即通过公钥加密的内容,必须通过对应私钥才能解密,反之亦然。
公钥
- 秘钥对的公开部分
- 以多个客户端/一个服务端的角度看,每个客户端都持有服务端的公钥,同时服务端持有每个客户端的公钥
- 以两个实体进行通信的角度看,他们互相持有对象的公钥
私钥
- 秘钥对的私有部分
- 以多个客户端/一个服务端的角度看,每个客户端持有各自的私钥,服务端同样持有自己的私钥
- 以两个实体进行通信的角度看,他们各自持有自己的私钥
数字签名与数字证书、CA
数字签名(Signature)
- 用途:
- 用来证明发送者真的是发送者
- 用来验证数据内容没有被修改过
- 使用流程:
- 发送方将公钥给予接收方
- 由发送方用私钥生成(即签名,sign)
- 接收方使用发送方的公钥对签名进行解密验证
- 主要使用技术:
- 非对称秘钥加密技术
- 数字摘要技术
- 加密方式(发送方):
- 先用Hash函数,生成信件的摘要(digest)
- 然后使用私钥,对这个摘要加密,生成"数字签名"
- 解密验证方式(接收方):
- 先用发送方的公钥解密
- 然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比,验证完整性
数字证书(Digital Certificate)
- 简介:
- 一个经CA(证书授权中心,Certificate Authority)签名的文件,其中包含公钥和公钥所有者信息,其他一些信息,以及CA使用其秘钥进行的签名。
- 用途:
- 证明公钥的真实性,避免公钥派发的过程中,公钥被替换
- 使用流程:
- 发送方产生自己的密钥对
- 发送方将公钥部分和部分个人身份信息传送给CA
- CA证实身份
- CA给发送方发送数字证书
- 发送方给接收方发送数字证书
- 接收方从CA获取公钥
- 接收方使用CA的公钥对数字证书进行解密,取得发送方的公钥
- CA:
- CA可以使权威公正的第三方机构,或者是企业级的CA系统。
常见的SSH通信流程
用于登录Linux
- 使用流程:
- 用户生成公钥/私钥密钥对
- 将公钥给予管理员
- 管理员将公钥放到Linux中
- 用户使用私钥发送登录信息
- Linux使用用户的公钥验证
- Linux发送公钥
- 用户接收并保存公钥
- 后续的每条消息,用户和Linux都使用各自的私钥进行签名,使用对方的公钥进行解密