Api 簽名算法


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 等。


分享到:


相關文章: