從加密到驗證,全方位保障您應用的通信安全

在一個完美的世界上,沒有人須要用到密碼。每一個人都高度自律,心無邪念;每件快遞都能不經攔截準確送達收件人;而每一個寄件者都是值得信賴的。可是咱們並不在這樣完美的世界中生存。過去的數十年間,密碼學已經發展到不只能夠經過加密來保障機密性,還能夠確保消息的完整性、身份驗證,以及不能否認性——全部的一切都是爲了保證消息私密、真實和可靠。html

假如您的系統已經實現了強有效的密碼策略,這可能會使您認爲再也不須要經過生物特徵來驗證就是用戶本人。爲了理解爲何驗明用戶正身在密碼學中如此重要,讓咱們依次對照來看密碼學中幾種方法的成功和不足之處。由此,做爲諸如銀行系統或醫療系統等高端服務的提供者,能夠了解爲何您可能須要在密碼策略的基礎上進一步實現基於生物特徵的身份驗證功能。android

僅憑加密沒法防護某些特定類型的攻擊

您能夠把加密比做一個函數,好比 E,這個函數接收兩個參數,消息 m 和密鑰 k,並由今生成密文 c。生活中人們經常把這個密文看成加密,但事實上加密指的是可以生成攻擊者沒法讀取的加擾信息的算法,而最終的加擾信息就是密文。算法

c = E(m,k)編程

只要密鑰 k 足夠長,當您僅知道 m 或 c 部份內容時,幾乎不可能得出密鑰 k。可是,攻擊者無需解密消息便可對其進行篡改,攻擊者也許能夠編輯密文、刪除密文,或者以重放的方式從新發送一條包含密文的消息。api

並非全部的攻擊者都想要盜竊您的數據;他們可能只想給您帶來不便。試想有一個攻擊者,他只是重放了您向電腦城付款 $2,000 購買筆記本的加密交易。假設他是與該電腦城沒有任何聯繫的攻擊者,因此他什麼也沒有偷走。您當然能夠經過一些申訴手段向店家要回退款,但既蒙受了時間的損失又沒了好心情。更糟糕的是,某些精於此道的攻擊者也許會將電腦城的銀行帳戶替換爲其餘銀行帳戶——這一切徹底不須要解密您傳輸的密文。安全

固然,剛纔的這些都只是接觸了其中的皮毛。針對純加密方案的攻擊有許多更知名的案例。即便您的加密算法充分防範了已知的攻擊手段,但仍可能會有不足。簡單說來,您沒辦法永遠保證消息的私密性。甚至是在最佳密碼學策略的加持下,當下技術的發展速度只能讓您的消息在 30 年內保持私密,或許運氣好的話,能有 50 年。所以,僅憑加密是沒法與破壞消息完整性的攻擊者相抗衡的。您還須要用上身份驗證手段,也就是下個小節要探討的問題。網絡

經過消息身份認證保證消息不被篡改

在一些敏感場合中,欺騙性質的消息誤傳會形成破壞性影響。這個重要的事實啓發安全工程師們創造了消息認證碼 (Message Authentication Code,簡稱 MAC 或 HMAC)。若是發信人在發送消息的同時還傳輸了 MAC,那麼攻擊者就沒法再修改內容並僞裝這就是原始消息。同時攻擊者也沒法重放已經發送過的消息。攻擊者能作到的最多就是刪除發送的消息形成通信失敗。框架

MAC 是什麼?MAC a 與經過消息和密鑰計算獲得的密文類似。本質上,發信人將消息 m 和密鑰 k傳入函數 h 計算就能生成 MAC 了。隨後,發信人同時將消息和 MAC 發送給收信人。函數

m,a = h(m,k)google

MAC 與單條消息並非惟一對應的,這是因爲鴿籠原理致使的,大體意思是若是您的鴿子數量比鴿籠要多,那麼某些鴿籠中就不止一隻鴿子了。MAC 的長度是預先就決定了的,所以消息的數量會比對應 MAC 的數量要多。可是因爲搜索域太大,攻擊者想要在不知道密鑰的狀況下很難猜出修改後的消息對應的 MAC。所以,MAC 可以有效防止消息被修改的緣由是隻有發件人和目標收件人知道密鑰。若是攻擊者想要修改發送的消息,那麼他必須替換 MAC 以匹配更改。可是在不知道密鑰的狀況下這幾乎是不可能的。因爲連續兩次計算 m,a = h(m,k) 會生成兩個不一樣的 MAC,消息重放攻擊也會隨之失效。這是由於在實踐中一般還有第三個嚴格增長的參數 t: 所以公式寫做 m,a = h(m,k,t)。由此,MAC 函數能幫助合法的收件人輕鬆驗證是否遭遇了消息重放攻擊。

MAC 機制本質上使得攻擊者必須破解密鑰。因爲 MAC 的存在,模仿原始消息再也不可行。消息完整性獲得根本保障。雖然 MAC 機制很是實用,但在機密性方面它仍然有侷限,這也是後面章節要說明的問題。

已簽名但未封裝

值得注意的是,MAC 只是對消息進行了簽名而沒有將其封裝——也就是沒有機密性。攻擊者仍然能夠讀到消息的內容;只不過他們沒法輕鬆篡改內容。可是同時進行簽名和封裝並不難。咱們再也不使用 m,a = h(m,kₐ),取而代之的是經過代數替換獲得 c,a = h(c,kₐ) ,其中 c 是由 c= E(m,k𝒸) 計算得出的。

好的密碼算法就像是好房子。它們能夠在暴風驟雨中屹立 30 年以上,而不是僅存在一天就坍塌。特別是對於密碼學家來講,這意味着他們須要預見在將來的 10 年或是 30 年後攻擊者會以當下還沒有發明的技術來破解加密算法,而不是僅考慮攻擊是否會在明天或下個月發生。所以,MAC 並不能使加密牢不可破。它只是增長了攻擊者的破解難度。30 年後的攻擊者可能會用 生日攻擊中途相遇攻擊 來猜想通過篡改的消息的 MAC 值,從而使收信人接到假冒的消息。

非對稱加密讓擴展更從容

目前爲止,咱們談到了密碼學家如何搭配加密和 MAC 來生成簽名且封裝的消息。咱們也談到了攻擊者所能作的最多就是刪除這些消息;不然消息會成功、私密、完整地送達收信人。聽起來這就是咱們所須要的所有了,其實還有更多。在咱們開始討論 "更多" 以前,不妨先聊聊可擴展性。

目前爲止咱們討論的大多數技術被統稱爲對稱密碼學。簡言之,它們要求發信人和收信人都是用徹底相同的密鑰來加密或者解密消息,以及建立或校驗 MAC。這種方法的問題在於,若是整個羣組有 10 名成員,那麼每名成員都須要分享和存儲 9 個不一樣的密鑰,這樣纔可以在任意兩名成員之間互發加密信息。這樣一來,整個羣組就有 45 個 key 存在。若是有 20 我的,就有 190 個密鑰;通常地, n 我的就有 (n-1)n/2 個密鑰。假想一下,若是對聯繫人列表裏的每一個人,您都須要使用一個獨立手機號碼與其聯繫會怎樣?這樣一來,您不能將一個號碼發給全部的聯繫人,而每次結交新朋友,您都須要購買一個新的手機號碼!這就是對稱加密的問題所在。難以擴展。不過幸虧還有非對稱加密可用。

非對稱密碼學 使用數論中的觀點 (尤爲是 有限域理論單射函數) 來實現其技術優雅。本質上是每一個人都建立一個公鑰和一個私鑰。任何想要和您交流的人可使用您的公鑰來加密信息,但只有您的私鑰能夠將其解密。

這裏意在討論非對稱加密,而不是深刻探討數論。要支持不能否認性,您必需要使用到非對稱加密,這是咱們接着要討論的下一個密碼學屬性。

必要的不能否認性

不能否認性是 "不可食言" 的專業說法。電子商務革命把這個簡單的公平交易原則帶到密碼學領域的前沿和中心。

在使用對稱密鑰的狀況下,收到消息的人 (好比 Bob) 沒辦法向法官證實發信人 (好比 Alice) 是真正發消息的那我的。這是由於 Alice 和 Bob 用相同的密鑰來通信。或許 Alice 真的發送了原始消息,但 Bob 篡改了它,抑或 Alice 在撒謊。裁判沒辦法判斷究竟是哪種狀況。

然而在使用非對稱密鑰時,只有持私鑰的那我的才能夠對消息簽名。全世界任何人均可以讀到消息的內容,畢竟公鑰是公開的。所以會出現這樣的狀況: 當 Alice 須要從 Bob 那邊買東西時,她會用 Bob 的公鑰來加密交易,並使用她本身的私鑰來簽名。而後當 Bob 收到交易信息後,能夠用 Alice 的公鑰來肯定是否是真的用 Alice 的私鑰籤的名,隨後用他本身的私鑰來解密消息。因而可知,簽名就被用來提供不能否認性了。MAC 和簽名本質上是同樣的,不過前者是對稱加密的概念,然後者屬於非對稱加密。

簡單回顧

如今咱們來回顧一下。密碼學被應用於加密和認證消息,而且提供不能否認性。當使用了正確的技術,消息的真實性和加密性兩方面都難以被破解——它們都依賴較爲複雜的數學手段,好比整數分解、離散對數和橢圓曲線算法,這些方法隨後被應用於有限域問題中。須要指出的是,經過數學分析來得到加密密鑰可能會很困難,可是仍有其餘方法能夠攻入安全系統,好比社會工程學,也就是人可能被誘導泄密。此外,咱們沒有聊到密鑰生成和認證的過程,由於咱們已經說得很明確了: 做爲一門工程學科,密碼學會根據時代的發展而不斷演進,並試圖保持超前攻擊者。

與加密和身份認證不一樣,不能否認性會更難對付一點,由於用戶身份的驗證能夠爲攻擊者再添一層難度。

用戶在場的重要性

到目前咱們已經瞭解到密碼學就是在研究安全等級: 對於一個攻擊者來講,擾亂通信的代價 (時間、金錢和體力) 有多麼高。儘管如此,仍然存在一個主要問題: 僅憑消息發自我所持有的設備且由個人私鑰簽名,並不能說明是我本人發送的消息。病毒或是未經受權的用戶也有可能發送了該消息。因爲這些以及相似的緣由,儘管數字簽名已經被歸入國際法律體系中,好比 ESIGN,許多跨國商貿機構仍然沒有信任它,由於在沒法證實用戶在場的狀況下很難保證不能否認性,而舉證責任由商家承擔。

爲了加強商家對不能否認性的信心,業界引入了 雙重要素驗證 (2FA)。由於網絡罪犯經常會破解那些僅受用戶名和密碼保護的在線帳號,2FA 引出了讓自稱是合法用戶的代理提供多一種信息的概念。這裏所說的多一種信息,一般指的是如下三類中的一種: 某件您知道的事、某樣您擁有的事物,或是您是誰。2FA 的目標是要給商家信心去相信,用戶本人的確在進行交易。兩種常見的 2FA 形式是電子鑰匙鏈和一般由短信發送的驗證碼。使用電子鑰匙鏈或類似的硬件令牌都有容易丟失或被盜的問題。而當遺失或被竊的設備就是接收短信或者推送通知的設備時,用短信驗證碼做 2FA 也就毫無抵禦能力了。所以,現在 2FA 最早進的形式就只剩您身體的一部分。生物特徵身份驗證就是這種加強 2FA 的例子。

在您的安全策略實現中用生物識別特徵驗證是否爲用戶本人,可讓您的應用更安全,而且不能否認性成爲了您的商業模式中的一個可靠特性。對於醫療保健或是酒店服務業應用來講,這可以確保更真實的用戶登記或是取消預定狀況。對於電子商務和銀行應用,這使得您的客戶服務團隊花費更少的時間來處理顧客的小孩意外產生的購買行爲和退款,從而有更多的時間以更多使人滿意的方式使顧客開心。

使生物特徵認證在您的安全系統中成爲阻攔攻擊者的額外障礙的根本緣由在於: 雖然生物識別和密碼學手段是相互徹底獨立的措施,但它們都使得攻擊者難以攻破。所以,二者結合就可讓攻擊者更難以得逞。

舉個例子,在 Android 當中,生物特徵識別像是一條單行道。用戶的生物特徵信息永遠不會離開設備,並且毫不會與應用共享。當用戶決定把本身的生物特徵信息錄入 Android 設備時,他們必需要經過系統的設置應用。假若用戶要使用指紋或是人臉識別,那麼他們須要把手指放在傳感器上,傳感器會直接把指紋圖像發送到 Android 設備的受限區域內,這個區域被稱爲可信執行區域 (TEE)。隨後,當您的應用須要經過生物特徵驗證用戶本人在操做時,Android 框架和運行於 TEE 中的生物識別系統會替您的應用處理整個 "用戶是否在場" 的驗證過程。因爲 Android 框架讓冒充設備主人的生物特徵很是困難,您能夠給這個用戶本人驗證充分的信心。

您能夠經過閱讀咱們的文章《結合使用 BiometricPrompt 和 CryptoObject》,更深刻了解在 Android 系統上生物特徵驗證是怎樣用不能否認性來加強您應用的安全的。

總結

您在本篇文章中瞭解到了:

  • 爲何良好的密碼策略實現須要強調私密性、真實性和不能否認性。
  • 爲何只使用加密不足以保護消息免受攻擊。
  • 爲何 MAC 或 HMAC 可以有效避免消息被篡改。
  • 爲何非對稱加密比對稱加密更容易擴大規模。
  • 爲何現實生活中,不採用生物特徵驗證就難以實現不能否認性。
  • 爲何生物特徵驗證能夠經過用戶存在性驗證來加強加密實現。
  • 在哪裏能夠了解到如何在您的應用中實現生物特徵驗證。

咱們還撰寫了許多文章,它們涉及工程最佳實踐、設計指南以及將生物特徵驗證集成到您應用中的技巧:

祝您編程愉快!

相關文章
相關標籤/搜索