1 背景
最近的项目主要做的是公对公的API互通,因为是银行系统,公对公的API传输加密要求比较高,架构师要求使用的是PGP, RSA的加解密,因此,针对这几个技术,学习并且记录一些心得。
2 基础概念
2.1 RSA
RSA加密算法是一种非对称加密算法。同属于非对称加密算法的还有DSA和ECC RSA名称的由来是由三位研究出此算法的学者名称命名的,即RSA(Rivest-Shamir-Adleman) 非对称加密更被人熟知的是“公钥”“私钥”
2.1.1 其他几种加密算法及对比
2.1.1.1 对称加密算法 - 可逆
对称加密算法是指加密和解密采用相同的密钥,是可逆的(即可解密)。常用的有AES、DES、3DES。
使用场景
- 用zip打包时输入的密码,同一个密码可以加密,也可以解密
- 一些文件加密软件,输入同一个密码就能加密解密
- 部分网站的登录密码在数据库保存时使用系统的密码进行加密 - 那些提供“找回密码”功能的网站(当然,有些网站可能就是明文存储密码的)
优点:
- 实现简单
- 加解密算法比较快
缺点:
- 发加密文件给别人,密码就必须给到对方,如果文件被截取,密码被截取,那窃取方就能知道文件内容了。
2.1.1.2 非对称加密算法-可逆
非对称加密算法是指加密和解密采用不同的密钥(公钥和私钥)是可逆的(即可解密)。
RSA加密算法既可以用来做数据加密,也可以用来数字签名。 –数据加密过程:发送者用公钥加密,接收者用私钥解密(只有拥有私钥的接收者才能解读加密的内容),因为私钥只掌握在接收者手里,不会在任何情况下传播,所以窃取方即使监听网络数据,也只能截取加密内容,无法解密。
–数字签名过程:甲方用私钥加密,乙方用公钥解密(乙方解密成功说明就是甲方加的密,甲方就不可以抵赖)
使用场景 对信息安全要求比较高的应用,如笔者现在参与的公对公API开发。
2.1.1.3 线性散列算法算法-不可逆
比较常见的不可逆加密算法是MD5、SHA1。
使用场景
- 用来做文件内容校验,比如常见的下载软件的md5校验
- 部分网站的登录密码在数据库保存时使用系统的密码进行加密 - 那些没有密码找回,只有密码重设的网站,通常就使用了不可逆算法加密,没办法给你找回密码。
2.2 PGP
PGP(英语:Pretty Good Privacy,中文翻译“优良保密协议”)是一套用于消息加密、验证的应用程序。
PGP软件提供的功能比较多,可进行数字签名,压缩,加密,生成公私秘钥对等。
本案例主要使用PGP软件生成公私密钥对。
在与其中的一个客户进行UAT时,在网关层对header进行解密的时候,网关层爆出authentication invalid。对比了几个
2.3 JWT
JWT全称是:JSON Web Tokens,关于Token是什么,可以在百度上自行查找,本文不做详细解释。 本案例使用JWT来进行数字签名。 数字签名一般不加密。
3 实现设计
3.1 约定及前期准备
为节省打字,把对方公司称为A,我方公司称为B。 双方的前期准备都是使用PGP软件生成RSA的公钥及私钥,并且将公钥发送给对方。
3.2 我方公司架构分层
因为公司有网关,在设计上,在网关上设计了对所有外部API访问消息的签名验证。而各个应用软件专注于对消息payload本身的加密约定进行解密及开发。
3.3 整体流程
其他说明: 通常JWT放在header,为编码但非加密数据 通常payload放在body,为加密且签名数据
|