实现接口安全的目的:
1.防伪装攻击(案例:在公共网络环境中,第三方 有意或恶意 的调用我们的接口)
2.防篡改攻击(案例:在公共网络环境中,请求头/查询字符串/内容 在传输过程被修改)
3.防重放攻击(案例:在公共网络环境中,请求被截获,稍后被重放或多次重放)
4.防数据信息泄漏(案例:截获用户登录请求,截获到账号、密码等)
进行安全加密的对象
- 所有写操作的接口(增删改),所有非公开的读接口(涉密/敏感/隐私等信息)(激进一些可以对全部接口处理)
- 请求头参数、body参数、url拼接参数、返回结果数据等(不一定要全部加密,可根据实际的应用场景)
常见加密手段
-
DES加密:
DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据。因此,破译DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为256。(安全程度低,不推荐) -
AES加密:
ES加密算法采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准,这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。 - RAS加密:RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数宇签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
- MD5加密:MD5被广泛用于各种软件的密码认证和钥匙识别上。MD5用的是哈希函数,它的典型应用是对一段信息产生信息摘要,以防止被篡改。MD5的典型应用是对一段Message产生fingerprin指纹,以防止被“篡改”。如果再有—个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。MD5还广泛用于操作系统的登陆认证上,如UNIX、各类BSD系统登录密码、数字签名等
关于加密算法的补充说明:
- MD5是一种信息摘要算法,是不可逆的,不可以解密。所以它能算的上是一种单向加密算法。
- Base64不是加密算法,它是一种数据编码方式,虽然是可逆的,但是它的编码方式是公开的,无所谓加密。
对称加密与非对称加密:
- 加密和解密过程不同:对称加密过程和解密过程使用的同一个密钥,加密过程相当于用原文+密钥可以传输出密文,同时解密过程用密文-密钥可以推导出原文。但非对称加密采用了两个密钥,一般使用公钥进行加密,使用私钥进行解密。
- 加密解密速度不同:对称加密解密的速度比较快,适合数据比较长时的使用。非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用。
- 安全性不同: 对称加密,过程中无法确保密钥被安全传递,密文在传输过程中是可能被第三方截获的,如果密码本也被第三方截获,则传输的密码信息将被第三方破获,安全性相对较低。非对称加密算法:私钥是基于不同的算法生成不同的随机数,私钥通过一定的加密算法推导出公钥,但私钥到公钥的推导过程是单向的,也就是说公钥无法反推导出私钥。所以安全性较高。
接口加密的方案推荐:
MD5生成签名认证:
1、对请求头:把所有请求参数按照参数名ASCII码从小到大排序(即字典序,或者跟后端约定其他顺序也行,关健是要统一), 使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA,如果参数的值为空则不参与签名,再将stringA拼接上与后端约定好的字符串(即加盐)得到stringB,最后对stringB进行MD5运算等到一个字符串(即签名)
2、对请求体类同上述
RAS生成签名认证
todo
请求头接口参数示例:
参数名 | 类型 | 必填 | 描述 |
---|---|---|---|
sign | string | 是 | 所有参数加盐生成的签名 |
userId | string | 是 | 调用方的身份id,接口提供方用此来识别不同的调用者 |
timestamp | string | 是 | 记录接口发起请求的时间,加入时间戳,1分钟内有效(注意与服务端时间同步,允许一定的误差) |
serialNo | string | 是 | 加入流水号,流水号在时间戳有效时间范围内需保证唯一 |
网友评论