「動態密碼」(OTP,One Time Password)顧名思義就是每次使用時產生的密碼都不一樣,而且每組密碼只能使用一次,因此也可稱作「一次性密碼」。與傳統固定式密碼相比,具有不可預測性,可避免遭駭客竊取密碼後執行重送攻擊的風險,即使駭客竊取該次的密碼,也無法通過下次的登錄驗證。

    「動態密碼」(OTP,One Time Password)大致可分為Event-Based、Time-Based與Challenge & Response三種類型,密碼產生方式有許多種,原則上是利用特定的密碼學相關運算函式(如DES、SHA...),加上變動性的參數運算後得到的結果。這次我拿到一張Event-Base類型的OTP Card,此卡動態密碼採用OATH HOTP標準方式產生,我寫了一支簡單的程式來驗證此卡片所產生的動態密碼,另外這支程式也順便加入HMAC_Sha1、HMAC_Sha256、HMAC_Sha384與HMAC_Sha512的功能。

    下面兩張圖是卡片的外觀,第一張是未顯示動態密碼的樣子,第二張是按下卡片右下方按鈕後產生動態密碼的樣子,密碼顯示的時間大約是三十秒鐘,之後就會恢復到第一張的樣子。另外此卡片因為有內建電池,所以一般使用年限大概是三年,電池沒電後卡片也只能報廢,未來會有標準的晶片卡結合這種具顯示螢幕的卡片,內建的電池也許能改成可重複充電,卡片若插入讀卡機中,即可進行充電,這樣便可延長使用期限。

OTPCard_1  OTPCard_2

    下圖是我寫的「動態密碼」(OTP,One Time Password)驗證程式,用來驗證這張卡片所產生的動態密碼。先在"Secret"欄位中輸入此卡片的Seed Key,在"Look-ahead"欄位中設定程式要往後比對動態密碼的次數,然後在"Counter"與"OTP"欄位中輸入卡片目前的Counter值與動態密碼,最後按下"驗證OTP"按鈕執行比對。下圖執行結果是在Counter:39時比對成功,正式的動態密碼比對伺服器不會允許系統比對那麼多次,而且系統也會記錄每張卡片的Counter值。

OATH_HOTP 

    另外按下"產生OTP"按鈕可產生HMAC_Sha1、HMAC_Sha256、HMAC_Sha384與HMAC_Sha512四種演算法的「動態密碼」(OTP,One Time Password)與MAC值,執行前請先設定好Counter起訖值("Start"與"End"兩個欄位的值)。

OATH_HOTP2 

 程式下載:http://sites.google.com/site/deryuchang/app/OATH_HOTP.rar

創作者介紹
創作者 DerYu 的頭像
DerYu

Smart Card雜記

DerYu 發表在 痞客邦 留言(4) 人氣()


留言列表 (4)

發表留言
  • TT
  • 請問那動態密碼到底能否百分之百保證安全呢?
    且是否讀卡機有otp功能就可以作到
    還是得銀行系統配合支援otp才可?
  • 任何安全機制都無法保證百分之百安全,遲早有被破解的一天,重點是能不能在有效期間內確保不被破解。不同的應用需配合適當的安全機制才能提高系統的安全性,OTP重點是用來識別持卡人身份,需銀行後台系統支援配合。

    DerYu 於 2010/03/27 11:47 回覆

  • Jackie Hsu
  • HMac-Sha1的運算得到的OTP是否是OATH規格中的OTP,有點興趣,是否有Souce可參考,謝謝啦
  • 悄悄話