雙因子認證 / 多因子認證機制 - 加強身分驗證之安全性

現今大部分常見的應用,例如 Web、APP,首先第一步可能都會需要使用者去註冊,最常見的話是信箱作為帳號,然後使用者設定他記得起來的密碼。而近年來其實常常會在 Web、APP 看到雙因子認證的選項,或是會主動詢問你需不需要開啟雙因子認證,所以到底什麼是雙因子認證?

其實簡單來說,就是雙重認證的意思,也就是使用者不單單需要提供他的密碼讓系統審核,還需要提供第二項認證因子,最常見的方式是智慧卡,其實就像是提款卡那樣,我們需要去 ATM 面前插入提款卡、輸入密碼,必須這雙重認證都通過,才能讓我們成功領到錢。

所以多因子也就是說比雙因子在多更多的驗證因素而已。

認證因子的種類

使用者需要記憶的類型

這指的是使用者必須自行記憶該認證內容,例如:使用者的帳號及密碼。

使用者擁有的類型

指的是使用者本身可以持有的東西,可以是硬體或是軟體,例如:智慧卡、晶片卡、憑證、動態密碼產生器。動態密碼這個最常見的應用就是系統會發送簡訊到使用者的手機,並且給一段密碼通常也會叫做驗證碼,接著在要求使用者在 APP 或是 Web 端在輸入這段驗證碼,讓系統作驗證。

使用者天生具有的類型

指的是使用者與生俱來就會擁有的東西,這個最常見的就是我們的指紋、臉部特徵、DNA、虹膜等生物特徵資訊,雖然有些生物特徵確實可以造成以假亂真的效果,但通常使用生物特徵作為認證因子還是需要考慮易用性的問題,例如你要解鎖手機前,手機要掃你的 DNA 或虹膜嗎?當然是指紋或是臉部辨識這方面的驗證才會讓使用者更加方便使用。

為什麼需要多因子認證

其實不外乎就是因為如果只用使用者可以記得的密碼進行認證,不免會有以下的問題:

  • 弱密碼 V.S 強密碼

    弱密碼指的就是使用者容易記憶的密碼,強密碼其實就像是隨機亂數的密碼,但多數使用者一定會選擇較容易記憶的密碼,那麼可能就會有容易被破解的問題。像是在網路上就有許多名列最常見密碼的列表名單,我相信還是會有不少使用者設置那種很簡單的密碼,通常駭客的第一步可能都會先從最常見的密碼去試,所以這樣的話就會有資安的問題

智慧卡、憑證、動態密碼是什麼

智慧卡

為什麼會被稱為智慧卡,是因為智慧卡上面會有一種特殊的晶片在上面,而這個晶片可以加密儲存及運算能力的,因此透過讀卡設備即可讀取或處理裡面的資料,而晶片內的資料通常不容易被破解或複製。

但多數情況下也不會將智慧卡取代密碼認證機制,多數還是會搭配智慧卡插入後還是需要使用者記得的密碼,才能存取智慧卡裡面的資料。

憑證

憑證是指一種證明文件的意思,通常必須由具公信力的第三方單位所頒發給使用者,也就是數位憑證認證機構 (Certificate Authority,縮寫為 CA)

而憑證其實又可分實體、數位,實體的話就像是政府機關所發放的身分證,數位的話像是我國內政部其實有在發自然人憑證,其實我以前不知道有這東西 XD,也是最近才知道有這東西的。

但像是我們的身分證、駕駛證照其實都沒有含晶片的,所以並沒有任何運算能力,只是代表一種證明。而數位憑證採用的是 **PKI 架構 (Public Key Infrastructure) **。

什麼是 PKI 架構

是一個由數位憑證( Digital Certificate )、憑證機構(CA,Certificate Authority)、及註冊機構(RA,Registration Authority)等組成的系統,來驗證網路上往來或交易各方身份的正確性。

實際上它裡面的內容滿複雜的,我覺得它的原理簡單來看就是:

利用非對稱式的加密演算法,每個使用者會有所謂的公鑰跟私鑰,並且有配對的關係,每個使用者的公鑰是公開的,任何人都可以知道其他人的公鑰,而私鑰透過智慧卡的方式儲存在晶片中,而公鑰可以由 CA 機保管。

運作情境如下:

  • 當 A 欲向 B 傳送電子訊息時,A 先向 CA 取得 B 的公開金鑰並加密欲傳送給 B 的訊息,再利用網路傳送給 B。就算途中此訊息被駭客截取也無法解開,因為用 B 的公開金鑰用加密的訊息只有用 B 的私密金鑰才能解開,這樣就達成了保障私密性的目的。
  • 當 B 收到 A 傳送過來的訊息,即可用 B 的私密金鑰解開,而 B 也可以確認傳送者的身分,這樣就做到了資料完整性及身分確認的目的,A 也不能否認其傳送動作,保證了交易不可否認的特性。

自然人憑證的例子

這邊直接擷取了內政部的說明:

  • 自然人憑證是可以在網路上作資料交換時,如同網路身分證辨識雙方身分。
  • 「憑證」包含了「數位簽章」跟「公開金鑰」,這個公開金鑰是智慧型的 IC 卡自己演算出來的一組金鑰對中的一半,另一半稱為「私密金鑰」,則永遠儲存在 IC 晶片當中。經由憑證使用人和憑證管理中心約定,日後用這憑證,身分就可以辨認,啟用了加解密的功能,不管你在網路上傳什麼資料,資料都被加密,駭客攔截了資料也無法輕易的解開。
  • 自然人憑證不僅僅是憑證,他是由內政部憑證管理中心所簽發的。辦理了自然人憑證以後,未來你要申請什麼網路業務都不用再跑政府機關,只要在家上網就可以經由網際網路享受政府 E 化服務,降低了個人資料外洩的危險。

動態密碼

又稱為 One Time Password(OTP)。它是透過雜湊演算法會產生一個密碼,而這個密碼通常會具備時效性及不可預測之特性,

通常這個動態密碼會搭配載具來使用,所謂載具的意思就是說像是透過手機收到簡訊,簡訊上就是動態密碼。

像其實 Google 有出一個 APP 叫做 Authenticator,它其實就是透過此 APP 與要開啟雙因子認證機制的網站進行綁定。以 GitHub 來說,GitHub 有提供雙因子認證的功能,它會建議你使用一個 two-factor authentication app,並且在給你一個 barcode 圖像,叫你用 APP 去掃,接著在 Google Authenticator APP 上就會出現 6 位數的驗證碼,GitHub 這邊就會叫你填入該驗證碼進去。

之後你要登入 GitHub 的時候,除了要輸入帳號密碼,還要輸入在 Google Authenticator APP 上跳出的驗證碼,而預設這個驗證碼每 30 秒就會刷新一次。

它的原理其實就是 GitHub 會 maintain 每一個使用者的密鑰,而這個密鑰透過 barcode 傳給 Google Authenticator APP,而 APP 端這邊會將密鑰 + 時間戳產生一個六位數的驗證碼,當把這驗證碼傳到服務器端時,服務器也會用同樣的演算法產生六位數的驗證碼將其比對,如果比對成功則代表正確的驗證碼。所以這邊發現一個問題就是 APP 端與 GitHub 的時間必須要同步,所以其實內部實現是採用 Unix 時間戳,所以通常兩者的時間間隔不會超過幾秒鐘,但只有幾秒數也會自動忽略掉,因此就會產生一致的六位數驗證碼。

這個之後會另外開一篇文章講裡面用到的演算法,以及實際實作好了 XD

使用情境舉例

以目前生活中的搭配來看,比較多是以下三種:

  • 使用者帳號密碼搭配動態密碼

    像現在很多網站其實都會開啟雙因子認證的選項給使用者使用,這種大多都是搭配動態密碼

  • 智慧卡搭配密碼

    這就像我們去 ATM 領款需要插入智慧卡及輸入密碼,而且還會搭配輸入密碼錯誤的上限,來預防被盜用的可能性

  • 生物特徵搭配智慧卡或是搭配憑證

    像是如果是門禁的話,比較多會是憑證或智慧卡搭配生物特徵,像是我國內政部移民署於機場、港口所設置的入出國自動查驗通關系統 e-Gate,即採用電腦自動化方式,結合生物辨識科技,以護照搭配人臉辨識,實施多因子身分驗證機制。

總結

其實要採用怎樣不同類型的因子進行搭配,還是要看使用情境而定,此外還需要考量成本、驗證準確度及速度來決定。

像其實生物特徵理論上應該是最安全也是最嚴謹的,但是考量目前科技發展,準確度及速度還沒辦法達到很高的話,那其實也沒辦法使用這樣的認證機制。

但只能說雙因子認證機制在怎麼樣都會比單因子的還要好,也是目前逐漸盛行的主流,如果使用者是擔心資安的話 XD。因為其實大部分的網站還是將雙因子設定設為可選,而不是必須的,畢竟越安全的系統說實在手續就會越麻煩,就會讓使用者覺得越不想用,何況如果你的網站又不是銀行那類跟身家財產有關的,使用者其實不是那麼在乎這些的。

最後最後!請聽我一言!

如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!