支付寶怎樣開啟加密支付(支付寶應用加密怎麼解除)
支付是一個安全等級很高的場景,系統間互動的每一條資料的洩露都有可能造成及其大的損失。因此支付時系統間互動的每一條資料都會採取加密措施。這裡梳理一下支付寶支付時用到的加密規則,請大家參考。
圖片來自 Pexels
什麼是簽名?
在瞭解簽名前,先回顧一下支付的互動流程。如上圖所示,支付的過程中可以大概分為六個步驟:
- 使用者選擇自己的商品提交訂單。
- 商家伺服器將商品資訊和所需要的金額發給支付寶,生成支付寶訂單。
- 支付寶訂單返回成功之後生成一個支付頁面,方便手機支付或者網頁支付。
- 手機調起支付寶 App 進行支付。
- 輸入支付密碼傳送給支付寶伺服器。
- 支付寶伺服器轉賬成功,告知商家伺服器某個訂單的金額轉賬成功。
這 6 個步驟中,最為重要的是步驟 2 和步驟 6。拆解如下:
商家伺服器和支付寶伺服器互動的過程中傳輸的資訊異常敏感,所以,在互動時必須防止中間人對於資訊的篡改。例如步驟 2 將商品的金額改為 0,支付寶就誤認為是轉賬 0 元。
數字簽名解決了互動時這一安全問題。它可以驗證一條訊息或者文件的真實性。
在支付寶支付的介面中,有一個 sign 引數用來填寫簽名。這個簽名作用是為了防止資訊偽造。通過這種方式可以有效的防止訊息在傳遞過程中被篡改。
簽名實現原理
簽名原理
數字簽名是一個資訊保安的保障,它的實現依賴於雙方系統的金鑰。
簽名過程如下:
計算希望簽名的文件的雜湊。不論輸入文件的長度如何,輸出長度總是固定的。比如,使用 SHA256 就是 256 位。
對結果雜湊和一些額外的後設資料進行編碼。比如,接收方需要知道你使用的雜湊演算法,否則不能處理簽名。
使用私鑰加密編碼過的資料,其結果就是簽名,可以追加到文件中作為身份驗證的依據。
驗證簽名(驗籤):接收方接收文件並使用相同的雜湊演算法獨立計算文件雜湊。
接著,她使用公鑰對訊息進行解密,將雜湊解碼出來,再確認使用的雜湊演算法是否正確,解密出的雜湊是否與本地計算的相同。
非對稱加密
支付寶採用 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://4m.cn/ZPW1A