在‘非對稱密鑰(三)’中提到有一種簡單的安全登入算法。有友人向我說有興趣,我今天,便先說這個。
上次我用了亞里巴巴的例子,不論你將密碼變成甚麼樣子,祗要是每次都是一樣的,偷聽者都可以依樣重覆。
明顯地,若要偷聽者聽了也無用,就必需每次都不同。那麼該怎樣做。
其實,在人類社會,這就一點也不新鮮。幾百年前,漕幫的勢力非常大,若你自認是漕幫中人,行走江湖,你便會用一堆‘介口’和‘共通知識’來確認身份。
例如:有人會問你:‘你們的船初一是掛甚麼旗?’
‘青龍旗’。
如此這般,這就是提出問題(挑戰)和回答(回應),假設就是兩者間有一些共同的知識。而這些知識是第三者沒有的。最理想就是每條題目都祗用一次,那麼,其他人聽了也沒用,因為你再不會出相同的題目。
在人類社會,這接近不可能,所以,經常都可以有冒充的情況。但電腦就比較穩妥,所謂題目(挑戰)很多時都是一個隨機產生的亂數,祗要這個數字足夠大,和亂數產生器足夠好,就很有可能每次都不同了。
具體算法會像這樣的。
你經過自己的電腦,要求登入一遠端電腦。
遠端電腦接到你的要求,便隨機產生一亂數,然後以特定的格式傳回。
你收到這數字後,便把自己的密碼和這亂數用一特定方法結合,然後,用一個特定的算法加密(註),然後送回遠端電腦。
由於遠端電腦‘知道’你的密碼,也知道自己送出的亂數,它便用同樣方法把它們結合,加密,若與傳回來的相同,登入便成功了。
若有第三者一直都在‘監聽’你們的‘對話’,但也不可以假冒,因為這個亂數是不會再用的。
挑戰與回應算法還有很多有趣的應用。下文再談。
註:通常會使用one way hash,one way的意思便是單向,意思是編碼後便很難(如果不是不可能的話)得回本來的文本。常用的方法是md5。
沒有留言:
張貼留言