萬盛學電腦網

 萬盛學電腦網 >> 網絡應用技術 >> 如何正確地使用加密與認證技術

如何正確地使用加密與認證技術

  在密碼學專家之中,“加密並不是認證”是一個簡單的共識。但很多不了解密碼學的開發者,並不知道這句話的意義。如果這個知識更廣為人知和深入理解,那麼將會避免很多的設計錯誤。

  這一概念本身並不困難,但在表面之下,還有更多豐富的細節和玄妙之處有待發現。本文就是講述開發者對於加密和認證二者的混淆與誤用,並附上了優秀的解決方案。

  0x01 加密與認證之間有哪些區別?

  加密是呈現信息,使其在沒有正確的密鑰情況下,變得難以卒讀的過程。在簡單的對稱加密中,同一個密鑰被用於加密和解密。在非對稱加密中,可以使用用戶的公鑰對信息加密,使得只有對應私鑰的擁有者才能讀取它。

  認證是呈現信息,使其抗篡改(通常在某一非常低的概率之內,小於1除以已知宇宙中粒子的數量),同時也證明它起源於預期發送者的過程。

  注意:當本文提及真實性時,是專門指的信息真實性,而不是身份真實性。這是一個PKI和密鑰管理問題,我們可能在未來的博客中詳細說明。

  就CIA triad而言:加密提供機密性,認證提供完整性。

  加密不提供完整性;被篡改的信息(通常)還能解密,但結果通常會是垃圾。單獨加密也不抑制惡意第三方發送加密信息。

  認證不提供機密性;可以為明文信息提供抗篡改。

  在程序員中,常見的錯誤是混淆這兩個概念。你能很容易找到這樣的一個庫或者框架:加密cookie數據,然後在僅僅解密它之後就無條件地信任與使用之。

copyright © 萬盛學電腦網 all rights reserved