中國工商銀行密碼器的工作原理是什麼?


密碼理論中有一種理論叫做zero knowledge,簡單來說就是:

Alice問Bob:你是Bob么?

Bob回答:我是。

Alice問:那你證明給我看,i.e.告訴我只有Bob知道的密碼。

但是整個conversation是不加密的,任何人都能看到經過的數據,所以Bob不能直接告訴Alice他的密碼,怎麼辦呢?於是Bob想到了,讓Alice給他一個Challenge,Bob用只有自己知道的private key進行加密之後得到k給Alice,Alice收到這個之後可以用Bob的public key來試,如果得到的是原先給出的Challenge的話則證明了這個Bob擁有的是真正的private key。

在這個過程中,假設有一個偷聽的人,叫做Eve,那麼她知道的有什麼呢?Bob的public key,這是所有人都能知道的,Alice給的Challenge,和Bob用private key加密之後得到的k。如果她想要得到Bob的private key的話那麼則需要進行log運算,而log運算是NP問題。所以結果是Bob證明了自己的身份,同時也不需要泄露自己的confidential信息。

這裡運用到了public key system的對稱性,也就是說,(a^m)^n=(a^n)^m,以及discrete logarithm的困難度


原理應該是挑戰應答模式,具體技術只能猜測。

猜測一:利用了單向不可逆的加密演算法。

單向加密也就是對一個數據加密後,密文是任何人都無法進行解密的。簡單的說,密碼器存著一個密鑰,主機存著一個與之相同密鑰(當然,每個密碼器密鑰是不一樣的)。每次支付時工行伺服器產生一個隨機數並要求客戶在密碼器中輸入這個數字,然後工行伺服器使用該密鑰通過單向的演算法算出一個結果,如果客戶通過密碼器算出的結果與工行伺服器算出的結果一致,則驗證客戶身份成功。

猜測二:使用的是非對稱加密演算法,比如RSA

存在密碼器里的是私鑰(加密專用,不能用於解密),存在伺服器里的是公鑰(解密專用,不能用於加密)。RSA中公鑰和私鑰是成對出現的,每個密碼器對應的密鑰對是不一樣的。伺服器產生隨機數,讓密碼器進行加密,客戶將加密結果傳回伺服器,伺服器再用公鑰將密文進行解密,如果解密結果和剛才的隨機數相同,則驗證客戶身份成功。

以上兩種猜測使用的技術不一樣,但都是採用伺服器發起挑戰,密碼器給出答案的方式。都屬於0知識證明,即用戶不需直接向伺服器提供自己的密鑰就能證實自己的身份。即便是信息傳輸中被竊聽,竊聽者也是無法破解密鑰。而且每次的隨機數不一樣,竊聽者也無法通過重放信息的方式來偽裝成合法用戶。(而且可能運算中被加密的要素不只是那個隨機數,很有可能是用「隨機數」+「時間」作為被加密的對象,因為隔一段時間在密碼器中輸入相同的數字會發現計算結果不一致)

其實之前的一些U盾也是用了這個原理,只不過這個過程沒有讓用戶參與其中,工行為了方便在手機、平板上使用電子銀行就推出了密碼器。


和其它的密鑰不一樣么……不就是一個計時器么通過一對反函數帶入時間計算比對么…用久了需要校準就是這個原因把


支付密碼器系統

中國人民銀行《支付密碼器系統業務需求規範》

國家密碼管理局《支付密碼器系統通用性技術規範》


以前看到過(但不記得出處了)是說這種東西大多是基於RSA的公鑰密碼,只有發行方(銀行)知道這個生成器內部的密鑰(有可能不止一組),從而判斷這個生成出來的密碼的合法性


剛剛拿到一個密碼器,不能換電池的。全部封死。


推薦閱讀:

大數乘法,在演算法上,主要有幾種思路?

TAG:X的原理 | 中國工商銀行 | 計算機科學 | 密碼學 |