Api 签名算法


描述

为了保证第三方应用与API服务器之间通信的安全性,防止Secret Key盗用、数据篡改等恶意攻击行为,开放平台API 服务器使用签名机制,应用在调用开放平台API,需要计算出一个签名。

请求发起方式

通过应用客户端发起的

通过页面中的JavaScript、Flash内的ActionScript或手机、桌面客户端程序发起。则签名是由请求参数和Session Secret(每个用户的Session Key所对应的密钥)经过指定的加密算法生成的字符串。

通过第三方应用服务端发起的

签名是由请求参数和应用的私钥经过对应加密算法生成的。

签名的生成

不进行签名生成

不生成的签名的情况也是存在,例如web站点开发前后端分离。但是由于基于session的特性,可以支持正常的业务处理,不过要进行一些必要的准备。

登陆验证采用post方式提交数据构造token令牌,例如md5(uniqid(rand(), TRUE)),可以设置失效时间验证referer,同源策略规划Api授权等等

带有签名密钥

请求增加key和sign参数,解决身份验证和防止参数篡改问题 ,私钥不要外泄。

分配对应的key、secret签名生成规则请求参数新增时间戳 timestamp ,可以验证请求是否过期。$secret 作加密使用, 为了保证数据安全,不要在请求参数中体现。

升级优化

对于安全相对高点的系统来讲,签名会采用自己指定的复杂规则,header,body都会做相应处理。例如企业报文,电子订单信息等。

数据加密/编码算法列表

参考:http://blog.sina.com.cn/s/blog_4f0322c50101ilml.html

1、常用密钥算法

密钥算法用来对敏感数据、摘要、签名等信息进行加密,常用的密钥算法包括:

DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;RC2和 RC4:用变长密钥对大量数据进行加密,比 DES 快;IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件快的长度也是可变的;DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;其它算法,如ElGamal、Deffie-Hellman、新型椭圆曲线算法ECC等。

2、单向散列算法

单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:

MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值;SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值;MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。

3、其它数据算法

其它数据算法包括一些常用编码算法及其与明文(ASCII、Unicode 等)转换等,如 Base 64、Quoted Printable、EBCDIC 等。