POS刷卡交易屬於傳統的支付領域。在移動支付微信/支付寶的衝擊下,刷卡支付的市場份額在逐漸萎縮,畢竟手機掃一掃比拿個銀行卡刷卡輸密方便多了。雖然移動支付大行其道,可是刷卡支付仍然有其存在的必要性,至少在大額支付領域仍然須要依賴刷卡支付。在使用磁條卡或者芯片卡進行刷卡交易時,必然涉及到敏感信息的傳輸,必然涉及到加密,而加密必然涉及到祕鑰。如何管理祕鑰的使用範圍以及保障祕鑰的傳輸安全,是加密過程當中的重中之重。 安全
本文來源於個人博客網站http://51think.net服務器
咱們能夠把支付流程分紅兩三個部分,以下圖,POS設備進行刷卡,將刷卡信息上送給支付平臺,支付平臺再將交易信息上送給銀行。 微信
兩個信息上送階段均涉及到信息的加密傳輸,加密的原理是一致的,加密中所使用的祕鑰結構須要符合銀聯的安全規範要求。本文以刷卡信息上送到支付平臺爲例,介紹多層祕鑰體系的應用。 先了解幾個名詞術語:
一、加密機網絡
加密機是一個硬件設備,具有加密、加密、祕鑰管理等功能,它將加解密的操做所有封裝在硬件裏,具有很強的抗攻擊能力。
二、PIN信息網站
持卡人的我的標識碼,即銀行卡密碼。PIN信息在整個支付鏈路中都是以密文的方式存在,在POS設備中,PIN信息手動輸入後直接到硬件層進行加密,黑客沒法劫持。
三、LMK/ZMK/TMK加密
LMK是加密機最頂層祕鑰,保密級別最高,稱之爲本地主密鑰。LMK通常是由不一樣的人保管着不一樣的祕鑰份量,而後不一樣的保管員在加密機分別輸入本身保管的那一部分併合成一個LMK,沒有人可以知道LMK的所有信息。ZMK(Zone Master Key)能夠理解爲區域主密鑰,TMK(Terminal Master Key)能夠理解爲終端收單主密鑰。LMK/ZMK/TMK均屬於保護祕鑰,保護祕鑰是用來加密保護工做祕鑰的,分層管理,不涉及到加密報文。
四、收單主密鑰spa
收單主密鑰在本例中稱之爲TMK,用來加密保護工做祕鑰,簽到時由服務器端ZMK加密產生。
五、工做密鑰(workKey).net
工做祕密是真正用來加密敏感信息的祕鑰,包含pin祕鑰、mac祕鑰以及data祕鑰。好比pin祕鑰用來加密銀行卡密碼信息,mac祕鑰用來保障報文的完整性,data祕鑰用來加密銀行卡里的磁道信息。
六、設備主祕鑰(devKey)code
設備主祕鑰是集成在POS硬件設備裏的,做用和加密機的LMK相似。POS設備在出廠以前,須要從支付機構獲取到設備主祕鑰明文灌裝到設備裏。若是受到暴力攻擊,設備主祕鑰能夠自動銷燬。
之因此稱之爲多層祕鑰體系,是由於在這種模式下,能夠根據安全複雜度要求,設置多層嵌套,層層保護,能夠是三層,也能夠是四層。下圖體現的是一套四層的祕鑰體系,加密機可使用LMK加密產生ZMK,使用ZMK加密產生TMK,使用TMK能夠加密產生pinKey、dataKey、macKey 。 接口
由此能夠看出,LMK須要絕對安全,不然全部的祕鑰將會泄密。能否簡化成三層?咱們嘗試把ZMK這一層刪除:
由LMK直接加密產生收單主密鑰TMK,只要LMK絕對安全,這樣分層也是能夠的。可是這種狀況下,收單祕鑰過於依賴LMK,不方便大規模的祕鑰管理。若是加入了ZMK這一層,咱們能夠在邏輯層面上,將每一個POS廠商分配一個ZMK,即便某個廠商的ZMK被泄露了,其餘廠商也不會受到影響。以下圖:
從上文得知,TMK做爲收單主密鑰是用來加密保護工做祕鑰的。那咱們如何將TMK安全的送達到POS終端?這裏必然涉及到網絡傳輸,而網絡傳輸必然會面臨着報文被劫持的風險,因此TMK必定是密文的形式返回給POS終端。由此得知,咱們須要一個新的祕鑰用來加密TMK且這個新的祕鑰也存在於POS終端,這個新的祕鑰咱們稱之爲設備祕鑰。在POS設備出廠前,POS廠商使用API接口的方式從支付平臺獲得設備祕鑰,而後灌裝到設備硬件裏。有了設備祕鑰,後面的簽到流程就能夠解密相關祕鑰了。以下圖:
在POS設備中,維護這以下的祕鑰關係:
何爲簽到?簽到是銀聯的POS交易規範流程中的術語,在本例中,咱們使用簽到流程從支付平臺獲取收單主密鑰和工做祕鑰。支付平臺控制這兩個祕鑰的生命週期,若是過時,則會產生新的收單主密鑰和工做祕鑰返回給POS終端。原則上工做祕鑰的過時時間爲一天,即便有黑客花費高昂代價解密了工做祕鑰,次日祕鑰就會做廢。