文章目錄
- 前言
- 一、什么是簽名?
- 二、簽名實作原理
- 2.1 簽名原理
- 2.2 非對稱加密
- 三、對稱加密
- 三、AES和RSA關系
前言
支付是一個安全等級很高的場景,系統間互動的每一條資料的泄露都有可能造成及其大的損失,因此支付時系統間互動的每一條資料都會采取加密措施,這里梳理一下支付寶支付時用到的加密規則,請大家參考,
一、什么是簽名?

在了解簽名前,先回顧一下支付的互動流程,如上圖所示,支付的程序中可以大概分為6個步驟,
- 用戶選擇自己的商品提交訂單,
- 商家服務器將商品資訊和所需要的金額發給支付寶,生成支付寶訂單,
- 支付寶訂單回傳成功之后生成一個支付頁面,方便手機支付或者網頁支付,
- 手機調起支付寶app進行支付,
- 輸入支付密碼發送給支付寶服務器,
- 支付寶服務器轉賬成功,告知商家服務器某個訂單的金額轉賬成功,
這6個步驟中,最為重要的是步驟2和步驟6,拆解如下,

商家服務器和支付寶服務器互動的程序中傳輸的資訊例外敏感,所以,在互動時必須防止中間人對于資訊的篡改,例如步驟2將商品的金額改為0,支付寶就誤認為是轉賬0元,
數字簽名解決了互動時這一安全問題,它可以驗證一條訊息或者檔案的真實性,在支付寶支付的介面中,有一個sign引數用來填寫簽名,這個簽名作用是為了防止資訊偽造,通過這種方式可以有效的防止訊息在傳遞程序中被篡改,
二、簽名實作原理
2.1 簽名原理
數字簽名是一個資訊安全的保障,它的實作依賴于雙方系統的密鑰,
簽名程序如下:
- 計算希望簽名的檔案的散列,不論輸入檔案的長度如何,輸出長度總是固定的,比如,使用SHA256就是256位,
- 對結果散列和一些額外的元資料進行編碼,比如,接收方需要知道你使用的散列演算法,否則不能處理簽名,
- 使用私鑰加密編碼過的資料,其結果就是簽名,可以追加到檔案中作為身份驗證的依據,

驗證簽名(驗簽):
接收方接收檔案并使用相同的散列演算法獨立計算檔案散列,接著,她使用公鑰對訊息進行解密,將散列解碼出來,再確認使用的散列演算法是否正確,解密出的散列是否與本地計算的相同,

2.2 非對稱加密
支付寶采用RSA非對稱加密對資訊進行簽名,非對稱加密是由一個公鑰和一個私鑰組成,一般代碼中命名為public key和private key,非對稱加密的特點是:私鑰加密的資訊只有公鑰才能解密,公鑰加密的資訊只能有私鑰才能解密,一般會將私鑰進行保留,開發時一般會放在組態檔中,安全級別和資料庫賬號密碼一樣,公鑰會交給其它系統,這樣系統間互動時中間人不知道密鑰的情況下,是無法破解互動的資訊的,發送方只要保證私鑰不泄露,任何人發送給接收方的資訊在簽名驗證時都無法匹配成功,
支付寶的實作簽名的方式也大致如此,支付寶在資訊互動的時候兩個很重要的名詞支付寶公鑰和應用公鑰,這兩個秘鑰總是讓人混淆,這是因為支付寶提供了兩套RSA加密,一套是用來保證步驟2統一下單介面時的資訊安全,另一套是用來保證步驟6回呼時的資訊安全,如下圖,步驟2商戶服務器通過紅色應用私鑰(priv key 2)計算簽名,支付寶通過紅色應用公鑰(pub key 2)進行驗簽;步驟6支付寶服務器通過藍色支付寶私鑰(priv key 6)計算簽名,商家通過藍色支付寶公鑰(pub key 6)驗證簽名,

了解了簽名計算原理之后,再去管理平臺設定app資訊的時候就游刃有余了,我以沙箱環境為例子,

如上圖,說明使用RSA2加密方式,HASH演算法采用SHA256,進入設定之后要設定應用公鑰和保存支付寶公鑰,
- 應用公鑰和應用私鑰 這兩個需要自己生成一對,保證步驟2的安全,生成方式跳轉支付寶開放平臺開發助手
- 支付寶公鑰和支付寶私鑰是支付寶提供的,私鑰支付寶自己保留的,和自己服務器的應用私鑰一樣,人家不會提供出來,公鑰復制下來用于在回呼時進行簽名的認證,

三、對稱加密
簽名雖然可以防止中間人的資訊篡改,但是無法防止中間人資訊查看,比如步驟2中,向支付寶發送的商品金額,中間人即可獲取每天中該商家交易的金額,資訊在網路中傳輸感覺是一個虛無縹緲的程序,網路中資訊有可能被不法分子進行攔截,

因此在支付的程序中,會推薦使用https協議進行互動,使得互動的資訊加密傳輸,而且,支付寶的很多介面還支持使用AES加密之后進行傳輸,使得資訊更加安全,
AES加密是一種對稱加密演算法,對稱加密演算法相對于非對稱加密要簡單一點,系統間只存在一個密鑰,這個密鑰可以用來加密也可以用來解密,

在與支付寶互動的資訊可以通過AES加密,防止資訊的泄露,官方對介面的解釋如下:
若 OpenAPI 無 bizContent 傳參則無法使用 AES 密鑰加密,否則會報錯 當前 API 不支持加密請求,例如: alipay.user.info.share(支付寶會員授權資訊查詢介面)未使用 bizContent 傳參則無法使用 AES 密鑰加密,
三、AES和RSA關系

- AES 密鑰是對介面請求和回應內容進行加密,密文無法被第三方識別,從而防止介面傳輸資料泄露,
- RSA 密鑰是對介面請求和回應內容進行簽名,開發者和支付寶開放平臺分別加簽驗簽,以確認介面傳輸的內容沒有被篡改,不論介面內容是明文還是密文,RSA 均可正常簽名,
- 開發者可對請求引數先做 AES 加密,然后對密文進行 RSA 簽名,
讀到這里了,如果對你有幫助就留個贊吧,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263925.html
標籤:其他
上一篇:貪吃蛇--dfs與bfs初步學習
