【開發經驗】幾種常見的加密方式

叄滴水發表於2020-11-01


一、加密型別

1、對稱加密

       對稱加密又可以成為私鑰加密,即通訊雙方各個持有一個祕鑰,傳送方通過私鑰加密,接收方通過私鑰解密。
在這裡插入圖片描述
       一個優秀的加密演算法需要產出隨機的密文,這個攻擊者就沒辦法分析出明文的資訊。替換密碼就不是一種好的加密演算法,因為攻擊者可以通過一些字元的出現頻率嘗試所有可能的解碼祕鑰來恢復明文,這種方式稱為窮舉祕鑰搜尋。
對稱加密可以分為兩類,序列密碼分組密碼

1.1序列密碼

       從概念上講,序列密碼(stream cipher)的操作過程與我們想象中加密的過程一致。將1位元組的明文輸入加密演算法,就得到1位元組的密文輸出。在對端則進行相反的過程。整個過程持續重複,直到所有資料處理完成。因為這種思路比較簡單,序列密碼絕不能第二次使用相同的金鑰。這是因為在實際使用中,攻擊者知道或者可以預測特定區域的明文(請思考加密HTTP請求的情景;許多請求的請求方法、協議版本、請求頭名稱都是一樣的)當你知道明文,又觀察到密文時,就可以解析一部分金鑰序列。如果使用了相同的金鑰,那麼就可以解密後續的部分密文。為了解這個問題,序列密碼都與從長期金鑰中提取出來的一次性金鑰一同使用。
在這裡插入圖片描述

       RC4是最為人熟知的序列密碼。因為它很快很簡單,所以一度非常流行。但是它已經不再安全,因為發現大量的金鑰都存在一個弱點,就是金鑰中的一小部分可以決定初始化輸出的大部分內容。這意味著如果金鑰的一部分被使用了一段時間,攻擊者就可以破解金鑰流的一部分(例如利用某些位置上的已知明文)。因此,在不瞭解序列密碼特性的情況下,儘量避免使用這種加密方式。
       儘管序列密碼有這種弊端,但是還是有適合他的場景。直到現在,還可以在TLS加密方式中發現這種加密方式的身影。因為每個連線都會使用新的金鑰(詳解可以瞭解下https的原理)。

1.2 分組密碼

       分組密碼(block cipher)每次加密一整塊資料,並且現代的分組密碼傾向於使用128位(16位元組)大小的塊。一種分組密碼就是一個變換函式:接受輸入並生成看似雜亂無章的輸出。只要使用相同的金鑰,每一個可能的輸入組合都有唯一的輸出。
       我們可以理解為更高階的對稱加密演算法。這種加密演算法也是非常常見,例如AES加密,有128位、192位和256位的加密強度。在現在的系統對接時,AES加密非常常見。

2、非對稱加密

       對稱加密適用於兩個系統或者少數系統之間的資訊通訊。但是在不適合多系統之間的通訊。如果使用對稱加密,一旦有系統被攻陷,或者祕鑰處理不當,導致祕鑰洩露,那麼所有系統間的資訊將不再安全。
       因此,通過非對稱加密對此問題進行解決。非對稱加密也稱公鑰加密,即生成一對祕鑰,公鑰私鑰。私鑰為私有祕鑰,自己儲存,公鑰是公開的。這種加密方式有個特點:通過私鑰加密的資訊可以通過公鑰解密,通過公鑰加密的資訊可以通過私鑰解密。這種加密的方式很常見,git拉取程式碼的時候就有這種場景。常見的非對稱加密演算法有RSA演算法。
       知道了對稱加密和非對稱加密的作用之後,這樣https加密的最初的思想也就有了。

  • 伺服器生成一對公私鑰。私鑰據為己有,公鑰下發給各個瀏覽器。
  • 在公鑰能安全到達的時候(保證公鑰安全的到達瀏覽器設計到證書的概念,暫且認為可以安全到達),這個時候瀏覽器提交給伺服器的資料,只有伺服器可以解析。
  • 瀏覽器生成對稱加密是私鑰通過非對稱加密的公鑰進行加密提交給伺服器。瀏覽器通過公鑰進行加密,所以,只有伺服器的私鑰能夠解析。
  • 伺服器收到瀏覽器的私鑰,之後通過對稱加密進行通訊。
    https相當複雜,這個只是http最簡單的思想,有興趣的可以自己查閱,肯定有所收穫的。
    在這裡插入圖片描述

3、雜湊函式

雜湊函式在密碼學中也是不可缺少的一部分。雜湊函式(hash function)是將任意長度的輸入轉化為定長輸出的演算法。談到雜湊函式,肯定會想到MD5加密,這種就是一種最為常見的雜湊函式。雜湊函式的特點:

  • . 抗原像性單向性)給定一個雜湊,計算上無法找到或者構造出生成它的訊息。即不能還原,MD5即是一種單項加密,因此,經常用於密碼加密,實現即使管理員也無法知道使用者的密碼的功能。
  • 抗第二原像性弱抗碰撞性)給定一條訊息和它的雜湊,計算上無法找到一條不同的訊息具有相同的雜湊。
  • 強抗碰撞性 計算上無法找到兩條雜湊相同的訊息。

3.1、使用場景

  • 系統檔案秒傳功能的實現。可通過雜湊函式來快速的比較兩個檔案是否相等。
  • 密碼加密,往往系統只需要知道使用者登入的密碼和系統儲存的密碼相等即可,無需知道使用者的密碼到底是什麼。
  • 資料完整性驗證,網上下載一些檔案,可能會因為種種原因導致檔案下載不完整,所以,經常會遇到較大的檔案下載的時候,下載按鈕一邊會有一長串字元。下載成功,通過對應的方式計算出雜湊函式即可驗證資料是否與伺服器一致。如下:
    • 在這裡插入圖片描述

4、數字簽名

數字簽名?好熟悉的感覺,在微信支付就有簽名這一個概念。在通過雜湊函式來驗證訊息完整性的時候,僅僅在資訊和資料的雜湊分開傳輸的時候才可以,否則中間人可以修改資料的同時修改雜湊,從而避開檢測。
在這裡插入圖片描述
數字簽名主要是驗證資料的真偽。微信通過對稱加密生成的簽名,支付寶通過非對稱加密生成簽名。效果差別不大。只要足夠證明自己的身份即可。

相關文章