在设计开放平台接口过程中,往往会涉及接口传输安全性相关的问题,笔者在详细的查阅大量资料后,结合自身的过往经验,对于接口加密及签名的相关知识做了一个系统性的总结,在方便自己查阅的同时也分享给大家做一些参考,说明不当之处欢迎指正(参考文章下文末列出,如有侵权可及时联系删除)
接口安全性问题主要来源于几方面考虑:
1.防伪装攻击即请求来源是否合法?(案例:在公共网络环境中,第三方 有意或恶意 的调用我们的接口)
2.防篡改攻击(案例:在公共网络环境中,请求头/查询字符串/内容 在传输过程被修改)
3.防重放攻击即请求被恶意攻击(案例:在公共网络环境中,请求被截获,稍后被重放或多次重放)
4.防数据信息泄漏(案例:截获用户登录请求,截获到账号、密码等)
从实现接口安全考虑,下面分别就加密解密和签名算法两方面进行讲解
一,加密解密的概念与算法
1.1 为什么需要加密解密?
在客户端与服务器进行交互时,必然涉及到交互的报文(或者通俗的讲,请求数据与返回数据),如果不希望报文进行明文传输,则需要进行报文的加密与解密。所以加密的主要作用就是避免明文传输,就算被截获报文,截获方也不知道报文的具体内容。
1.2 对称加密,单向加密,非对称加密的介绍与区别
加密分为对称加密和非对称加密,对称加密效率高,但是解决不了秘钥的传输问题;非对称加密可以解决这个问题,但效率不高。(其中https是综合了对称加密和非对称加密算法的http协议。)
1.2.1 对称加密
采用单钥密的加密方法,同一个密钥可以同时用来加密和解密,这种加密方法称为对称加密,也称为单密钥加密。即约定一个秘钥,客户端使用这个秘钥对传输参数进行加密并提交至服务端,服务端使用同样的秘钥进行解密;
# 常用的对称加密算法:
1) DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
2) 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
3) AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,支持128、192、256、512位密钥的加密;
Blowfish
# 算法特征:
1) 加密方和解密方使用同一个密钥;
2) 加密解密的速度比较快,适合数据比较长时的使用;
3) 密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;
# 加密工具:
openssl,它使用了libcrypto加密库、libssl库即TLS/SSL协议的实现库等。TLS/SSL是基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库。openssl官网。
gpg
1.2.2 单向散列加密
单向加密又称为不可逆加密算法,其密钥是由加密散列