網(wǎng)銀中的口令使用的什么加密算法?

目前在網(wǎng)銀的使用中用的比較多的還是動(dòng)態(tài)口令了,相信大家在購(gòu)物的時(shí)候就知道,在支付的時(shí)候輸入自己的密碼和動(dòng)態(tài)口令上的動(dòng)態(tài)密碼,就能完成驗(yàn)證,銀行就相信你不是壞人了,今天我們來(lái)簡(jiǎn)述一下這個(gè)動(dòng)態(tài)口令令牌是個(gè)什么原理。

銀行的動(dòng)態(tài)口令令牌是什么原理?

RSA SecurID SID700

如圖的RSA SecurID SID700是當(dāng)前市面上流行使用的動(dòng)態(tài)口令令牌,在筆者準(zhǔn)備資料的過(guò)程中發(fā)現(xiàn)國(guó)內(nèi)描寫(xiě)動(dòng)態(tài)口令的野生博客有不少謬誤,其中大多是對(duì)銀行這一套認(rèn)證機(jī)制結(jié)構(gòu)的不了解,所以首先要強(qiáng)調(diào)的是:

在大眾用戶(hù)手中的動(dòng)態(tài)口令令牌,并不使用任何對(duì)稱(chēng)或者非對(duì)稱(chēng)加密的算法,在整個(gè)銀行的認(rèn)證體系中,動(dòng)態(tài)口令令牌只是一個(gè)一次性口令的產(chǎn)生器,在其中運(yùn)行的主要計(jì)算僅包括時(shí)間因子的計(jì)算和散列值的計(jì)算。

動(dòng)態(tài)口令算法又叫一次性口令算法,英文寫(xiě)作OTP(One-Time Password Algorithm), 動(dòng)態(tài)口令令牌使用的算法是OTP中的一類(lèi),TOTP(Time-Based One-Time Password Algorithm) — 時(shí)間同步型動(dòng)態(tài)口令。

時(shí)間同步型動(dòng)態(tài)口令產(chǎn)生口令的時(shí)候和時(shí)間有關(guān)系,我們可以通過(guò)其工作的原理圖來(lái)看一下:

銀行的動(dòng)態(tài)口令令牌是什么原理?

圖示給出了動(dòng)態(tài)口令的工作原理,突出了整個(gè)認(rèn)證機(jī)制中的動(dòng)態(tài)口令部分,我們可以清楚看到在最左邊和最右邊有完全相同的兩個(gè)流程,這里分別代表了用戶(hù)的令牌卡和銀行服務(wù)器的驗(yàn)證機(jī)器做的工作。本文的重點(diǎn)就在這兩個(gè)完全相同的流程上。

在用戶(hù)從銀行手中拿到動(dòng)態(tài)口令令牌卡的時(shí)候,在令牌卡的內(nèi)部已經(jīng)存儲(chǔ)了一份種子文件(即圖中鑰匙所代表的seed),這份種子文件在銀行的服務(wù)器里保存的完全一樣的一份,所以對(duì)于動(dòng)態(tài)口令令牌來(lái)說(shuō),這種方式是share secret的。另外在令牌硬件上的設(shè)置中,假使有人打開(kāi)了這個(gè)令牌卡,種子文件將會(huì)從令牌卡的內(nèi)存上擦除(待考證)。

令牌卡中有了種子文件,并實(shí)現(xiàn)了TOTP算法,在預(yù)先設(shè)置的間隔時(shí)間里它就能不斷產(chǎn)生不同的動(dòng)態(tài)口令,并顯示到屏幕上,而銀行服務(wù)器上跟隨時(shí)間做同樣的計(jì)算,也會(huì)得到和令牌卡同樣的口令,用作認(rèn)證。

那么TOTP算法具體做了什么操作呢?在RFC6238中有詳細(xì)的算法描述,這里也會(huì)做簡(jiǎn)單的敘述。

TOTP是來(lái)自 HOTP [RFC4226] 的變形,從統(tǒng)籌上看,他們都是將數(shù)據(jù)文件進(jìn)行散列計(jì)算,只是HOTP的因子是事件因子,TOTP將因子換成了時(shí)間因子,具體的TOTP計(jì)算公式(其中的HMAC-SHA-256也可能是 HMAC-SHA-512):

TOTP = Truncate(HMAC-SHA-256(K,T))

其中: K 為這里的種子文件內(nèi)容; T 為計(jì)算出來(lái)的時(shí)間因子

公式中的 HMAC是密鑰相關(guān)的哈希運(yùn)算消息認(rèn)證碼(Hash-based Message Authentication Code),HMAC運(yùn)算利用哈希算法,以一個(gè)密鑰和一個(gè)消息為輸入,生成一個(gè)消息摘要作為輸出。而公式中給出的哈希算法是 SHA-256,這種哈希算法目前并沒(méi)有好的破解辦法。

令牌卡中預(yù)先設(shè)置了要顯示的口令長(zhǎng)度,TOTP 中的 Truncate 操作剪切獲得口令。

以上就是動(dòng)態(tài)口令令牌卡的內(nèi)部原理。

幾點(diǎn)補(bǔ)充:

1、時(shí)間同步型動(dòng)態(tài)口令對(duì)令牌卡和服務(wù)器的時(shí)間同步要求很高,時(shí)間誤差會(huì)造成整個(gè)令牌的失靈,所以每一次用戶(hù)成功使用令牌認(rèn)證,服務(wù)器都會(huì)做相應(yīng)的時(shí)間誤差矯正。

2、種子文件的產(chǎn)生使用了一種AES-128 變形而來(lái)的算法, AES-128 也是目前頂尖級(jí)的對(duì)稱(chēng)加密技術(shù)。

3、目前從加密技術(shù)上以及數(shù)學(xué)理論上整個(gè)銀行機(jī)制的認(rèn)證系統(tǒng)基本無(wú)解。