December 8,2005
Security Device
下午從SSTL的研究室裡拿到所謂的「Security device」,
一個像是鑰匙圈一樣的東西,
辦公室人員並且通知我們說以後登入伺服器系統,都得利用這個產生密碼。
說明書看了半天才知道是怎麼使用的....
首先以平日的用戶名及密碼登入伺服器主頁,然後啟動這個小玩意。
這時輸入產生器的背面編號,然後在產生器上按鍵一次,
小小的螢幕上會給出一個六位數字。
把這個數字輸入電腦,便完成了啟動程序。
以後登入伺服器主機,都必須輸入密碼器顯示的數字。
這個密碼有時間限制,而我們當初所設定的密碼不能同時使用。
因此,以後要登入主機處理東西或者存取資料,都必須有這個鑰匙圈在手。

這個小玩意,明顯沒有透過USB或者任何傳輸系統連結主機,那麼它是怎樣運作的呢?
這樣有趣的問題讓我覺得有點興奮。
問了SSTL的資料安全部門相關人員,都找不到有關這個玩具的原理。
於是,為了明白這個東西的來龍去脈,我做了兩組簡單實驗:
一、重覆登入了幾次,每次按指示在密碼器上按鍵,輸入新的密碼,都能成功登入。
故意更改其中一個數字,則會導致登入錯誤。
二、密碼會隨時間改變。經過反覆實驗,密碼機每隔十秒產生新的密碼。
換句話說,在十秒內無論按鍵多少次,密碼器都會產生相同的密碼。
不過,每次按鍵,密碼產生器會有大約一秒鐘的延遲,所以十秒內也只能按幾次。
如果以舊密碼登入,同樣會造成登入錯誤。
換句話說,每個密碼的有效期只有十秒。
因此,密碼器與伺服器必能在不互相接觸的情況下,
以某一特定方法測知登入時所需的正確密碼。
一個合理的推斷是:密碼器內有一個時鐘,
以按鍵那一刻的時間作為隨機種子,
然後以某一種加密的的random number generator產生六位數字的密碼。
同時在伺服器那一端也做了相同的計算,不過情況應該會卻比較複雜。
由於密碼器不論何時產生出來的密碼,都有足十秒時限,
而伺服器卻只能以登入時間來計算密碼,
所以如果在按鍵的那一刻,密碼器產生 123456 這一密碼,
而伺服器在一秒後卻已轉到下一個密碼 456789 去,
那麼以 123456 來登入,必然還是會登入錯誤。
為了解決這個問題,銀行伺服器必須接受 123456 或 456789 兩個密碼的任何一個,
也就是即過去十秒鐘內密碼器所能產生出來的兩個密碼之一。
而為了限制一個密碼器只能登入一個使用者帳號,
伺服器那一邊的程式,還必須依靠第一次啟動密碼器時的那個密碼,
來進行某種初始化程序 (initialization),設定某個初始條件 (initial condition),
才能產生出跟密碼器吻合的密碼。
這樣,隨機選中正確密碼的機會率是一百萬份之二,或即五十萬份之一,
恐怕還遠低於遺失密碼器的機率。
夠無聊了吧....連發一個鑰匙圈給我,都會讓我想這麼多東西....
回應文章 
剛剛去找了一下資料,這個應該是 "two-factor authentication"的一種應用吧....最近挺常在資料安全或者網路交易平台上看到的新名詞。
Posted by YC
at December 8,2005 09:56
可是, 難道沒有可能密碼器和 server 端的時間是不一致的嗎?
密碼器是用電池的嗎? 那如果密碼器沒電了, 要怎麼辦?
電池裝上去之後, 它就自己會抓到目前的時間, 然後產生新密碼嗎?
呵呵, 不會無聊啊, 我覺得聽起來就很有趣耶.
換成我應該也會拿來測試著玩吧. :)
密碼器是用電池的嗎? 那如果密碼器沒電了, 要怎麼辦?
電池裝上去之後, 它就自己會抓到目前的時間, 然後產生新密碼嗎?
呵呵, 不會無聊啊, 我覺得聽起來就很有趣耶.
換成我應該也會拿來測試著玩吧. :)
Posted by 喵咪
at December 8,2005 11:37
呵呵,後來真的忍不住,寫信去問了這個廠商,
也跟姚老大討論了一下之後確認....
這個小玩具需要配合時間去產生密碼,
時間的正確程度預估在一年內誤差不會超過一秒鐘....
所以在換電池的時候只要設定正確時間,
就可以避免因為兩端時間不同所產生的密碼不一致問題....
好玩耶
也跟姚老大討論了一下之後確認....
這個小玩具需要配合時間去產生密碼,
時間的正確程度預估在一年內誤差不會超過一秒鐘....
所以在換電池的時候只要設定正確時間,
就可以避免因為兩端時間不同所產生的密碼不一致問題....
好玩耶
Posted by YC
at December 8,2005 19:56
所以說, 時間一定要對.
如果說你在換電池的時候, 設定的時間剛好和 server 的時間不一樣, 那這小玩具所產生的密碼就會和 server 端不一樣, 那你就永遠無法登入, 是這樣嗎?
那, 所以, 不同的單位去買這東西, 它裡面的 encode 的演算法或是計算方式應該也都不一樣囉? 不然, 我拿別人買的 SecurID, 就可以到你們家 server 登入... 這樣也怪怪的...
那, 密碼器和 server 的時間誤差可以允許是多少呢? 1秒? 完全不能有誤差? 你要不要去把密碼器的時間改一改來玩看看... 看差個一兩秒會怎樣... :p
SecurID 這東西我以前就聽過, 只是一直不知道它是做什麼的...
這樣一研究... 好玩耶...
如果說你在換電池的時候, 設定的時間剛好和 server 的時間不一樣, 那這小玩具所產生的密碼就會和 server 端不一樣, 那你就永遠無法登入, 是這樣嗎?
那, 所以, 不同的單位去買這東西, 它裡面的 encode 的演算法或是計算方式應該也都不一樣囉? 不然, 我拿別人買的 SecurID, 就可以到你們家 server 登入... 這樣也怪怪的...
那, 密碼器和 server 的時間誤差可以允許是多少呢? 1秒? 完全不能有誤差? 你要不要去把密碼器的時間改一改來玩看看... 看差個一兩秒會怎樣... :p
SecurID 這東西我以前就聽過, 只是一直不知道它是做什麼的...
這樣一研究... 好玩耶...
Posted by 喵咪
at December 12,2005 15:42
Posted by 喵咪
at February 18,2006 00:32
這東西據說正明叫做 OTP, one time password.
http://demonchang.blogspot.com/2007/04/work-fsmotp.html
http://demonchang.blogspot.com/2007/04/work-fsmotp.html
Posted by Flora
at April 13,2007 22:08