首次曝光!支付寶支付加密規(guī)則梳理,寫的太好了!
作者丨叁滴水
博客丨h(huán)ttps://blog.csdn.net/qq_30285985/
前言
支付是一個安全等級很高的場景,系統(tǒng)間交互的每一條數(shù)據(jù)的泄露都有可能造成及其大的損失。因此支付時系統(tǒng)間交互的每一條數(shù)據(jù)都會采取加密措施。
這里梳理一下支付寶支付時用到的加密規(guī)則,請大家參考。
一、什么是簽名?
用戶選擇自己的商品提交訂單。 商家服務(wù)器將商品信息和所需要的金額發(fā)給支付寶,生成支付寶訂單。 支付寶訂單返回成功之后生成一個支付頁面,方便手機(jī)支付或者網(wǎng)頁支付。 手機(jī)調(diào)起支付寶app進(jìn)行支付。 輸入支付密碼發(fā)送給支付寶服務(wù)器。 支付寶服務(wù)器轉(zhuǎn)賬成功,告知商家服務(wù)器某個訂單的金額轉(zhuǎn)賬成功。

商家服務(wù)器和支付寶服務(wù)器交互的過程中傳輸?shù)男畔惓C舾校裕诮换r必須防止中間人對于信息的篡改。例如步驟2將商品的金額改為0,支付寶就誤認(rèn)為是轉(zhuǎn)賬0元。
數(shù)字簽名解決了交互時這一安全問題。它可以驗(yàn)證一條消息或者文檔的真實(shí)性。在支付寶支付的接口中,有一個sign參數(shù)用來填寫簽名。這個簽名作用是為了防止信息偽造。通過這種方式可以有效的防止消息在傳遞過程中被篡改。
二、簽名實(shí)現(xiàn)原理
2.1 簽名原理
數(shù)字簽名是一個信息安全的保障,它的實(shí)現(xiàn)依賴于雙方系統(tǒng)的密鑰。
簽名過程如下:
對結(jié)果散列和一些額外的元數(shù)據(jù)進(jìn)行編碼。比如,接收方需要知道你使用的散列算法,否則不能處理簽名。
使用私鑰加密編碼過的數(shù)據(jù),其結(jié)果就是簽名,可以追加到文檔中作為身份驗(yàn)證的依據(jù)。

驗(yàn)證簽名(驗(yàn)簽):
接收方接收文檔并使用相同的散列算法獨(dú)立計(jì)算文檔散列。
接著,她使用公鑰對消息進(jìn)行解密,將散列解碼出來,再確認(rèn)使用的散列算法是否正確,解密出的散列是否與本地計(jì)算的相同。

2.2 非對稱加密
支付寶采用RSA非對稱加密對信息進(jìn)行簽名。
非對稱加密是由一個公鑰和一個私鑰組成,一般代碼中命名為public key和private key。非對稱加密的特點(diǎn)是:私鑰加密的信息只有公鑰才能解密,公鑰加密的信息只能有私鑰才能解密。
如下圖,步驟2商戶服務(wù)器通過紅色應(yīng)用私鑰(priv key 2)計(jì)算簽名,支付寶通過紅色應(yīng)用公鑰(pub key 2)進(jìn)行驗(yàn)簽;步驟6支付寶服務(wù)器通過藍(lán)色支付寶私鑰(priv key 6)計(jì)算簽名,商家通過藍(lán)色支付寶公鑰(pub key 6)驗(yàn)證簽名。

了解了簽名計(jì)算原理之后,再去管理平臺設(shè)置app信息的時候就游刃有余了,我以沙箱環(huán)境為例子。

RSA2加密方式,HASH算法采用SHA256。進(jìn)入設(shè)置之后要設(shè)置應(yīng)用公鑰和保存支付寶公鑰。應(yīng)用公鑰和應(yīng)用私鑰 這兩個需要自己生成一對,保證步驟2的安全。生成方式跳轉(zhuǎn)支付寶開放平臺開發(fā)助手
支付寶公鑰和支付寶私鑰是支付寶提供的,私鑰支付寶自己保留的,和自己服務(wù)器的應(yīng)用私鑰一樣,人家不會提供出來。公鑰復(fù)制下來用于在回調(diào)時進(jìn)行簽名的認(rèn)證。

三、對稱加密
簽名雖然可以防止中間人的信息篡改,但是無法防止中間人信息查看。比如步驟2中,向支付寶發(fā)送的商品金額,中間人即可獲取每天中該商家交易的金額。信息在網(wǎng)絡(luò)中傳輸感覺是一個虛無縹緲的過程,網(wǎng)絡(luò)中信息有可能被不法分子進(jìn)行攔截。

因此在支付的過程中,會推薦使用https協(xié)議進(jìn)行交互,使得交互的信息加密傳輸。而且,支付寶的很多接口還支持使用AES加密之后進(jìn)行傳輸,使得信息更加安全。

四、AES和RSA關(guān)系

AES 密鑰是對接口請求和響應(yīng)內(nèi)容進(jìn)行加密,密文無法被第三方識別,從而防止接口傳輸數(shù)據(jù)泄露。 RSA 密鑰是對接口請求和響應(yīng)內(nèi)容進(jìn)行簽名,開發(fā)者和支付寶開放平臺分別加簽驗(yàn)簽,以確認(rèn)接口傳輸?shù)膬?nèi)容沒有被篡改。不論接口內(nèi)容是明文還是密文,RSA 均可正常簽名。 開發(fā)者可對請求參數(shù)先做 AES 加密,然后對密文進(jìn)行 RSA 簽名。
-End-
最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

面試題】即可獲取