金融行業由於對數據比較敏感,因此對數據的加密也相應的比較重視。在其中有關密鑰及加密方面的文章不多,而且散發在各個銀行及公司的手中,在網上沒有專門對這部分進行介紹的。本文對金融行業的密鑰進行較深刻的介紹,包括象到底什麼是主密鑰(MasterKey)、傳輸密鑰(MacKey),爲何咱們須要這些東西等。
本文采起追源溯本的方式,力求讓對這感興趣的人達到知其然,同時也知其因此然,而不是模模糊糊的知道幾個概念和名詞。由於本文主要是針對對金融行業密鑰不是很熟悉的人,因此若是你對密鑰很熟悉就沒必要仔細看了。
好了,我們言規正傳。咱們知道,金融行業有不少數據要在網絡上傳遞,包括從前置到主機,從自助終端到前置等,這些數據在網絡上傳來傳去,咱們很容易就會想到安全性的問題,若是這些數據被人竊取或攔截下來,那咱們怎麼敢在銀行存錢了。這個問題在計算機出現時就被前人考慮到了,因此出現了不少各類各樣的加解密技術。
拋開這些無論,假設當初由咱們本身來設計怎樣解決數據被竊取的狀況。假設咱們有一段數據,是ATM取款的報文,包括一我的的磁卡號、密碼、取款金額,如今須要將這些數據從一臺ATM機器傳到前置機處理,這些數據是比較機密的,若是被人竊取了,就能夠用該卡號和密碼把賬戶中的錢取走。
首先,咱們能夠想到用專用的銀行內部網絡,外面的人沒法得到網絡的訪問權。這個仔細想一想顯然不可行的,由於一是不能保證外人必定沒辦法進入銀行內部網絡,二是銀行內部人員做案是無法防止的。
接着,咱們很容易想到,既然保證數據不被竊取的可能性很小,那咱們何不變換一下思路,數據避免不了被竊取,那我若是將數據處理下,讓你即便竊取到數據,也是一些無用的亂碼,這樣不就解決問題了嗎。這個想法比較接近如今的作法了,當前置機接收到了數據,它確定是對數據進行反處理,即與ATM端徹底步驟相反的數據處理,便可獲得明文的數據。咱們再進一步想一想,若是由於某種緣由,報文中的取款金額被改變了,這樣就會致使ATM出的錢和前置扣賬記錄的錢不一致的狀況,看來咱們必須加上一個驗證機制,當前置機收到ATM發送的一個報文時,可以確認報文中的數據在網絡傳輸過程當中沒有被更改過。
怎樣實現?最簡單的,象計算機串口通信同樣,對通信數據每一位進行異或,獲得0或1,把0或1放在在通信數據後面,算是加上一個奇偶校驗位,收到數據一樣對數據每位進行異或,獲得0或1,再判斷下收到數據最後一位與算出來的是否一致。這種方式太簡單了,對於上面提到的ATM到前置機的報文來講,沒什麼用處,不過咱們能夠將對數據每一位異或的算法改爲一個比較複雜點的。
由於DES算法已經出來了不少年了,而且在金融行業也有普遍的應用,咱們何不用DES算法進行處理,來解決上面的問題呢。咱們應該瞭解DES算法(此處指單DES)的,就是用一個64bit 的Key對64bit的數據進行處理,獲得加密後的64bit數據。那咱們用一個Key對上面的報文進行DES算法,獲得加密後的64bit數據,放到報文的最後,跟報文一塊兒送到前置機,前置機收到報文後,一樣用Key對數據(不包括最後的64bit加密數據)進行DES加密,得出64bit的數據,用該數據與ATM發送過來的報文最後的64bit數據比較,若是兩個數據相同,說明報文沒有中途被更改過。
再進一步,由於DES只可以對64bit的數據進行加密,一個報文可不止64bit,哪咱們怎麼處理呢?只對報文開頭的64bit加密?這個是顯然不夠的。
咱們能夠這樣,先對報文的開始64bit加密,接着對報文第二個64bit加密,依次類推,不過這有問題,由於每一個64bit都會獲得一樣長度的加密後的數據,我不能把這些數據都放到報文的後面,那報文的長度不變成兩倍長了。換個思路,我先對報文第一個64bit加密,獲得64bit的加密後數據data1,接着再拿加密後的data1與報文第二個64bit數據進行按位異或,獲得一樣長64bit的數據data2,我再用Key對data2加密,獲得加密後的數據data3,再拿data3與報文第三個64bit數據進行按位異或,一樣的處理依次類推。直到最後會獲得一個64bit的數據,將這個數據放到報文的最後發到前置機,這樣報文的長度只增長了64bit而已。這個算法就叫作MAC算法。
好了,到目前爲止咱們已經知道了什麼是MAC算法,爲何須要它,接着咱們再看看常常被提起的另一個名詞。在上面說到MAC算法的時候,咱們會注意到其中進行DES加密算法時提到了一個Key,這個用來參與MAC計算的Key就常被稱爲MacKey,也有叫工做密鑰、過程密鑰的。
咱們繼續來處理ATM和前置機間網絡數據傳輸的問題。前面提到的MAC算法對傳送的報文進行了處理,保證了在網絡傳輸過程當中數據不會被有意或無心的篡改,可是,咱們再進一步想一想,若是仍然是上面提到的一個取款報文,若是想做案的話,我不改報文的內容,我只是截取報文的內容,由於內容裏面有卡號和密碼,都是明文的形式,很容易就看出來哪些內容是卡號、哪些內容是密碼。有了卡號和密碼,我就好辦了,找個讀卡器就可以很快的製出一張磁卡,而後拿這個磁卡能夠隨便取錢了,根本不須要修改報文,這樣你就算前置機對報文的MAC校驗經過了,也只是保證了報文沒改動過,對於防止做案沒有實質上的幫助。
那咱們很容易想到,我再加上一道加密,此次我把整個存款的報文都用DES加密,將明文所有轉換成密文,而後送到前置機,這下好了吧。即便你把報文截取了也沒用,你拿着這些密文也沒有用,你也沒有DES的密鑰來解密它,只有前置機才知道密鑰。這是個好主意,確實防止了卡號和密碼等被人獲知的危險。這也是如今廣泛採起的作法,不過咱們須要對這個作法進行一些改進。
首先,咱們要知道用DES對數據加解密是耗時間的,尤爲是使用硬加密(下一步講什麼是硬加密)的狀況,速度是比較慢的。咱們來想一想,整個存款報文有必要每一個數據都DES加密嗎,象報文中的什麼流水號、ATM號等信息,對它們加密沒什麼意義,進一步講,取款金額加密也沒意義,假設你取500塊,可是你將報文改爲了100塊,致使主機只把你賬戶扣100塊錢,你白賺了400塊。這個聽起來挺划算的,其實是不可行的,由於這樣形成了賬務上的短款,銀行固然會查帳的,根據ATM記錄的硬件出鈔張數和主機扣款金額,確定會把你查出來的,那這種掩耳盜鈴的作法,下場顯而易見,想必沒人這麼傻。
咱們來考慮一個報文中到底什麼信息是須要加密的,目前通常的作法是隻對賬號和密碼(也有隻對密碼加密的)進行加密,其餘的內容不加密的,明文就明文,沒什麼大不了的。對賬號和密碼加密有個術語,咱們可能都據說過,叫PinBlock,即PIN塊,就是對賬號和密碼進行DES加密處理後的一個密文數據塊。即然使用了DES算法來加密賬號和密碼,則必然有個Key來加密,那麼咱們就把這個Key稱爲PinKey,就是專門來加密用戶賬戶和密碼的Key。
至於怎樣進行加密造成最後的密文PinBlock,有不少標準的,象IBM362四、ANSI、ISO、DIEBOLD等標準,其實它們大同小異,就是在對報文中的密碼進行一個預處理,再用PinKey來DES加密,主要的差異就是怎樣預處理而已,好比有的是密碼後面補F,補夠16位,就是相似這樣的預處理。
到這裏咱們應該理解PinKey和PinBlock了。經過PinKey和MacKey對報文進行了兩重處理,基本上報文就是安全的了。若是咱們對DES算法比較瞭解,就會知道,若是想對加密後的密文解密,必需要知道Key才行,因此說Key必定要保密。怎樣來保密Key呢?咱們前面提到的不管是算MAC仍是算PIN塊,都是直接拿明文的Key來計算的,那麼這個Key很容易被竊取的,好比有人在機器上裝了個黑客程序,只要檢測到你在用Key加密數據,就把明文的Key獲取了。這個聽起來好像挺玄乎的,不過是有這個可能性的,尤爲是網上銀行這些東東最容易中招了。
這樣看來,咱們還要對PinKey和MacKey自己進行加密,不要讓人知道了。怎樣實現,一樣是DES算法大顯身手的地方。我再找個Key對PinKey和MacKey進行一次加密,這樣你就看不到PinKey和MacKey的明文了,好,解決問題了。這時用來對PinKey和MacKey進行加密的Key就被咱們稱爲MasterKey,即主密鑰,用來加密其餘密鑰的密鑰。不過,須要等一下,那MasterKey怎麼辦,它是明文啊。再找個Key來加密MasterKey,那最終不管處理多少道,最後的那個Key確定是明文,這樣看來,安全的問題尚未解決啊。
既然此路不通,那咱們須要換個思惟角度了,仔細想一想怎樣處理明文的MasterKey。黑客程序只能竊取我軟件上的東西,若是我把MasterKey放到硬件裏面怎麼樣,黑客是沒能力跑到我硬件裏面把MasterKey取出來的,固然,不排除道高一尺、魔高一丈的狀況,但至少99.9%的黑客都沒這能力的。那這樣不就解決了咱們遇到的問題了嗎,只要把MasterKey放到硬件裏面(通常是鍵盤的加密模塊裏面)就行了。
好,到這裏,咱們已經不怕有人把報文中的關鍵信息獲取到了,總算是安全了。
在最近,總是有人提到「硬加密」,這個有什麼用呢?我上面不是已經解決了加密的問題了嗎,還要這個概念幹什麼?看來我仍是有些地方沒考慮到。我一直想的是將明文的密碼加密成密文,其中有個環節須要考慮下,明文的密碼是怎樣造成的,不就是我按鍵盤上面的數字造成的嗎。之前個人軟件處理是這樣的,鍵盤每按一下,我就把那個數字在程序裏面先存起來,等到4位或6位密碼按完後,再把它們合在一塊兒,再送給PinKey加密。那若是黑客程序直接把個人按鍵信息獲取,那他根本不用破解報文中用PinKey加密後的密碼,直接簡單的就把我輸入的密碼獲得了,我前面費盡心思對密碼進行加密處理變得一點意義都沒有了。
怎麼辦?若是我把獲取按鍵的程序固化進入加密硬件(通常在鍵盤中),按鍵的數字根本不經過上層的軟件,直接一步進入硬件裏面處理,等到按鍵按完了後,硬件直接把通過一道處理的按鍵信息給我上層軟件,此時已是密文了,就至關於把前面計算PinBlock的處理移到硬件裏面去了,那黑客就無法獲取個人按鍵了。這種處理如今就被稱爲硬加密,伴隨着EMV和3DES算法,變得愈來愈流行了,好像自助終端不支持硬加密就不行,連EMV也強制要求了。
最近還有個名詞常常被提到,就是3DES。爲何要提出3DES的概念呢?我在一篇文章中提到了3 DES的具體算法,其實推出3DES是由於原來的單DES算法隨着計算機硬件的速度提高,存在被破解的可能性,因此將算法進行了改進,改成3DES算法。可是對於咱們理解金融行業的密鑰及加密機制來講,用什麼算法都同樣。不一樣算法的差異只是怎樣對數據進行移位變換等具體處理而已。
對於ATM交易安全性的考慮問題,系統經過pin加密,MAC效驗來保證系統交易數據的合法性及完整性,PIN BLOCK產生,PIN加密,MAC效驗均可在ATM的加密鍵盤進行。
如下簡單解釋概念:
1.工做密鑰(WK)PIN Key:持卡人密碼的加密傳輸(TPK,ZPK,PVK)
2.MAC Key:用於交易報文的鑑別,保證數據完整性(TAK, ZAK)
3.COM Key: 用於交易報文的通信加密/解密(TEK,ZEK)
4.密鑰交換密鑰(KEK)Zone Master Key:節點間交換工做密鑰時加密保護(ZMK)
5.Terminal Master Key:用於主機與金融終端交換工做密鑰(TMK)
6.本地主密鑰(LMK)Local Master Key:用於加密存儲其它密鑰
系統密鑰的管理是保證整個系統交易安全的關鍵,三級密鑰管理體系:
LMK(本地主密鑰) 最高層密鑰,用於加密TMK,ZMK
TMK(終端主密鑰),ZMK(區域主密鑰) 交換密鑰,用於加密PIN KEY
MAC KEY,COM KEY
PIN KEY,MAC KEY,COM KEY PIN KEY用於加密密碼
工做密鑰 MAC KEY 用於效驗報文
COM KEY 用於通信加密算法
第一層,加密機主密鑰(Master Key - MK),是保存在硬件加密機內的由三個成分合成的一對最上層密鑰,其做用是將全部存放在本地的其它密鑰和加密數據進行加密,在硬件加密機之外的地方不會以明文形式存放,是三級密鑰體系中最高級別的密鑰。
硬件加密機投入運行時,必須先產生和裝載MK。因爲DES算法依靠某一個密鑰進行加密,同時全部密鑰和數據都經由MK進行加密,因此MK必須經過一種安全的方法生成和維護。
MK由三個成分(32位十六進制數)組成,須要銀行三位主要的密鑰管理人員參與產生,通常採用「背對背」形式依次錄入,記錄checkvalue,分開安全保存明文份量。MK以密文形式存儲在加密機黑匣子中,且永遠不以明文形式出現。一旦硬件加密機受到非受權的操做,主密鑰會自動銷燬。數據庫
第二層,次主密鑰(BMK、ZMK),又被稱爲密鑰加密密鑰或密鑰交換密鑰(Key-encrypting Key或Key Exchange Key)。它的做用是加密在通信線路上須要傳遞的工做密鑰,從而實現工做密鑰的自動分配。它能夠在共享網絡中兩個(或多個)通信網點之間進行人工分配且保持雙方的對稱性。
次主密鑰由兩個成分(32位十六進制數)組成,其產生是由兩位密鑰管理員用「背對背」的方式共同完成。對於SJL06 RACAL型加密機(雷卡),次主密鑰爲ZMK(Zone Master Key),須要密鑰管理員記錄ZMK密鑰密文和checkvalue,並將ZMK密文(從第一位「X」後的全部32位16進制數)錄入加密機外部的主機數據庫中保存;對於SJL06 JK&IC型加密機(金卡),次主密鑰爲BMK(Bank Master Key),是以索引方式經過MK加密直接保存在硬件加密機中。安全
第三層,一般稱爲工做密鑰或數據加密密鑰,包括信息完整性密鑰(MAK)、PIN保護密鑰(PIK)、終端密鑰(TMK),它的做用是加密各類不一樣的數據,從而實現數據的保密,信息的認證,以及數字簽名的功能。這些數據密鑰在本地存放時,處於次主密鑰的加密之下或直接保存在硬件加密機中。
工做密鑰須要常常性地按期更換,一般天天更換一次或在系統啓動時更換新密鑰。網絡
附:
EMV標準 EMV標準是由國際三大銀行卡組織--Europay(歐陸卡,已被萬事達收購)、MasterCard(萬事達卡)和Visa(維薩)共同發起制定的銀行卡從磁條卡向智能IC卡轉移的技術標準,是基於IC卡的金融支付標準,目前已成爲公認的全球統一標準。其目的是在金融IC卡支付系統中創建卡片和終端接口的統一標準,使得在此體系下全部的卡片和終端可以互通互用,而且該技術的採用將大大提升銀行卡支付的安全性,減小欺詐行爲。目前正式發佈的版本有EMV96和EMV2000。
EMV2000標準是國際上金融IC卡借記/貸記應用的統一技術標準,由國際三大銀行卡組織聯合制定,標準的主要內容包括借貸記應用交易流程、借記/貸記應用規範和安全認證機制等。
EMV遷移是按照EMV2000標準,在髮卡、業務流程、安全控管、受理市場、信息轉接等多個環節實施推動銀行磁條卡向芯片卡技術的升級,即把如今使用磁條的銀行卡改換成使用IC卡的銀行卡。隨着信息技術、微電子技術的發展和EMV標準的完善及國際ENV遷移計劃的實施,銀行磁條卡向IC卡的遷移是必然的發展趨勢。
國際組織爲推行EMV遷移計劃,決定從2005年起,再也不對歐洲地區因利用磁條卡犯罪所形成的損失承擔相應責任,這一決定在亞太地區生效的時間定在2006年。根據新的遊戲規則,從2006年起,僞卡損失責任將按照是否符合EMV標準來劃分,也就是說,若是交易中的一方符合EMV標準,而另外一方不符合,將由不符合EMV標準的一方承擔所有責任。全球範圍內統一使用IC卡的時限爲2008年。
1999年2月,當時的國際三大卡組織共同成立了EMVCo組織,用來管理、維護和完善EMV智能(芯片)卡的規格標準。
EMVCo組織提供 EMV LEVEL 1 和 EMV LEVEL 2 認證.
1.4 EMV Level 1 and Level 2認證
EMV Level 1 認證規範
- 受理卡片的插入而不引發機械部分的損壞.
- 提供電源和時鐘而不引發電器部分的損壞.
- 肯定支持的協議並與卡片進行通訊.
- 正確地下載卡片以利再用卡片.
EMV Level 2認證規範
- 定義卡片借記卡信用卡交易的應用需求
- 定義卡片與終端間應用處理規範.
- 卡片與終端的應用軟件一般是可訪問的.
- 終端的應用軟件可讀取卡片應用列表.
- 定義卡片持有者校驗方法,好比密碼驗證.
1.5 各方應對 EMV 認證的措施
髮卡機構應發行EMV標準的卡.
POS 終端生產商應提供:
- 新的或升級設備(有EMV認證的)
- 兼容EMV的密碼鍵盤
- 升級POS應用軟件
- EMVCo 組織認證
髮卡行與收單行應升級主機系統以支持:
- 傳送和處理每種交易所增長的數據域.
- 加強的加密技術.
- 應能知足EMVCo.組織的測試要求
附:
異或邏輯運算(半加運算)
異或運算一般用符號"⊕"表示,其運算規則爲:
0⊕0=0 0同0異或,結果爲0
0⊕1=1 0同1異或,結果爲1
1⊕0=1 1同0異或,結果爲1
1⊕1=0 1同1異或,結果爲0
即兩個邏輯變量相異,輸出才爲1測試