株式会社 PRUM 的 masa。

今天就讓我們一邊留意「多重要素驗證」與「加密」各自的角色差異,一邊來看看為什麼它們會被說成是資訊安全中的必備項目。

1. 跟以前相比有變嗎?近年來的資安趨勢與「密碼的極限」

提到資訊安全,很多人可能會先想到防毒軟體。

當然,即使是現在,像病毒或勒索軟體這類會對裝置、資料、甚至整個業務造成損害的攻擊,依然是很大的威脅。

另一方面,近年來竊取 ID、密碼等驗證資訊,冒充正規使用者對帳號進行未經授權登入的攻擊,也成為重要的風險。

威脅不只停留在「破壞」,也擴展到「接管」

以前大家可能比較常聯想到「把病毒送進電腦,讓它壞掉」這類攻擊。

但現在除了破壞系統之外,鎖定個人資料、信用卡資訊,進一步「未經授權登入帳號」的手法也越來越多。

也就是說,身為工程師在開發系統時,必須警戒的一件事就是 「被冒充成正規使用者而入侵」

為什麼只有密碼會有極限?

有些使用者會在多個網站服務中重複使用同一組密碼。

這是非常危險的狀況。

只要某一個服務的 ID 與密碼組合外洩,攻擊者就會拿著這組資料,接連嘗試登入其他服務。

結果就可能像骨牌一樣,導致多個帳號被不當存取。

【常見失敗案例】
即使你覺得「我設了很複雜的密碼,所以沒問題」,也可能因為你使用的服務端有漏洞等原因,導致資訊外洩。只靠密碼這種「知識型資訊」作為唯一防線,已經越來越難擋住各種攻擊。

攻擊手法日益精巧,單靠密碼來保護帳號也變得愈來愈困難。

因此,重點就變成要搭配「其他驗證要素」來使用。

2. 用其他要素守住帳號「入口」!多重要素驗證(MFA)

作為密碼外洩時的防備,現在的網站服務中已逐漸普及的是 MFA(多重要素驗證:Multi-Factor Authentication)

MFA 是用來確認登入者是否真的是本人的機制。

也就是說,把它理解成「守住網站服務入口」的對策會很容易懂。

「兩階段驗證」與「兩因素驗證」的差異

這裡先整理一個容易混淆的點。

驗證大致可以分為以下三種「要素」:

  1. 知識型資訊
    密碼、PIN 碼、秘密問題等
  2. 持有型資訊
    智慧型手機、IC 卡、安全金鑰等
  3. 生物特徵資訊
    指紋、臉部、靜脈等

例如,輸入密碼之後,再回答「母親的舊姓是?」這樣的秘密問題。

這雖然是確認了兩次,因此可以稱作「兩階段驗證」。

但因為兩者都屬於「知識型資訊」,嚴格來說 不太能稱為「兩因素驗證」

重點不在於單純增加確認次數,而是要把不同種類的要素組合在一起。

例如:

  • 密碼(知識型資訊)
  • 送到手機上的一次性密碼(持有型資訊)
  • 指紋或臉部辨識(生物特徵資訊)

像這樣搭配不同要素,就能提升安全性。

【多重要素驗證的具體例子】
例如,先輸入密碼(知識),接著再輸入驗證 App 上顯示的一次性密碼(持有)。

另外,像 Passkey 這類,將儲存在裝置中的驗證資訊搭配指紋或臉部辨識使用的機制也很常見。

透過這樣的方式組合不同要素,即使密碼萬一外洩,也能讓攻擊者更難登入。

多重要素驗證導入之後,系統的「入口」就會變得比較好防守。

不過在 Web 世界裡,只守住入口還不能說就足夠了。

因為使用者與服務之間資料傳輸的「通訊途中」也可能成為攻擊目標。

3. 守護「通訊通道」的加密思維

就算把入口做得再堅固,如果登入資訊或個人資料在通訊途中被看得一清二楚,那又會怎麼樣呢?

這就像把寫著登入所需資訊的牌子掛在脖子上,一路走到目的地一樣。

如果途中有心懷不軌的人,就可能把那些資訊看光。

在網路通訊中,也可能發生類似的事情。

因此,才會使用把「通訊本身」加密、讓內容不容易被看見的機制。

用加密來想像的「安全通訊路徑」

保護通訊的代表性機制之一,就是 HTTPS 所使用的 TLS。

細節雖然很複雜,但簡單來說,就是在瀏覽器與伺服器之間確認「對方是否可信」,並建立一條不容易被第三方讀取內容的安全通訊路徑。

登入資訊、輸入表單的內容等,都是透過這條通訊路徑傳輸。

也就是說,加密並不是用來確認「是誰要登入」的機制。

加密是為了讓通訊途中不容易被竊聽或竄改。

「入口」與「通道」的角色不同

這裡來整理一下 MFA 和加密各自的角色。

  • MFA:守住入口的機制
    • 確認登入者是否真的是本人
    • 即使密碼外洩,也不容易被未經授權登入
  • 加密:守住通道的機制
    • 讓通訊途中不容易被竊看資訊
    • 讓通訊內容不容易被竄改

可以看到,MFA 與加密所保護的對象其實不太一樣。

不過在實際的 Web 服務中,這兩者並不是完全獨立的。

例如,MFA 使用的一次性密碼、驗證流程的通訊,也必須在安全的通訊路徑上進行。

也就是說,MFA 是強化「入口」的機制,而要安全地使用 MFA,「通道」的保護也同樣重要。

4. 當你站在開發端,看法就會不同

平常我們使用 Web 服務時,可能只會看瀏覽器網址列上的「鎖頭圖示」或「https」,不太會特別意識到加密的存在。

但一旦轉到開發端,就會增加很多需要注意資安的情境。

例如:

  • 在登入功能中,思考能否導入多重要素驗證
  • API 通訊要使用 HTTPS
  • 密碼不要直接保存,而是要以適當方式雜湊後保存
  • 如果要處理個人資料,也要注意保存方式與存取權限

像這些都是需要考慮的事。

因此,資安對策並不是靠單一機制就能完成的。

用「驗證」確認是不是正確的人,用「加密」保護通訊,用「雜湊」等方式降低保存時的風險。

透過多種機制組合起來,Web 服務才能更安全。

最後

資安如果只想死背名詞,會覺得很難。

但如果改成從「這個機制是為了保護什麼」來思考,就會容易理解許多。

多重要素驗證,是用來確認登入者是否真的是本人的「入口」對策。

另一方面,加密,則是用來保護使用者與服務之間傳輸資訊的「通道」對策。

這兩者並不是完全分開的東西,在實際的 Web 服務中會一起搭配使用。

先試著分開想:「這是在談本人確認嗎?」還是「這是在談保護通訊嗎?」
光是這樣思考,你對資安的看法應該就會稍微不一樣。

不妨想像一下你平常使用的 Web 服務背後是怎麼運作的,慢慢加深理解吧。


PRUM 的工程師有 95% 以上是從零經驗錄用的。
如果可以,也歡迎來公司網站看看。
公司網站

我們也經營一個整理對工程師有幫助文章的網站。如果有興趣,也歡迎看看。
對工程師有幫助的文章網站


原文出處:https://qiita.com/masa20057/items/8d0e2eba108351f930d3


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝17   💬11   ❤️1
568
🥈
alicec
📝1   ❤️2
79
🥉
我愛JS
💬2  
7
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登