應用加密1;非對稱加密演算法揭祕

android飛魚發表於2018-11-02

非對稱加密演算法

  使用過程:

  乙方生成兩把金鑰(公鑰和私鑰)

甲方獲取乙方的公鑰,然後用它對資訊加密。

  乙方得到加密後的資訊,用私鑰解密,乙方也可用私鑰加密字串

  甲方獲取乙方私鑰加密資料,用公鑰解密

  優點:

  更安全,金鑰越長,它就越難破解

  缺點:

  加密速度慢

  常用演算法:

  RSA、Elgamal、揹包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)

  非對稱加密方法

  1公鑰私鑰的使用原則

  ①每一個公鑰都對應一個私鑰。

②金鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。

③如果用其中一個金鑰加密資料,則只有對應的那個金鑰才可以解密。

  ④如果用其中一個金鑰可以進行解密資料,則該資料必然是對應的那個金鑰進行的加密。

  非對稱金鑰密碼的主要應用就是公鑰加密和公鑰認證。

  2公鑰加密、解密

  加密的目的,是不希望第三者看到當前兩個通訊使用者的通訊內容。

  2.1加密

  A(客戶)想給B(伺服器)傳送一段文字,但是不想讓別人看到,因此想使用非對稱加密方法來加密這段文字,當然,B需要有一對公鑰和私鑰:

  ① B將他的公鑰傳送給A

  ② A用B給他的公鑰加密這段文字,然後傳給B

  ③ B用他的私鑰解密A發過來的訊息,這裡要強調的是,只要B的私鑰不洩露,這封信就是安全的,即使落在別人手裡,也無法解密。

  通過這幾步,B就能成功收到A傳送的資訊,同時又達到了保密的目的。

  2.2解密

  如果B想給A回資訊,就簡單的多了:

  ① B將要回復的資訊通過自己的私鑰加密,然後傳送給A

  ② A用B之前給他的公鑰解出這份資訊。

  3、公鑰認證

  在公鑰加密、解密裡面描述的通訊過程看似簡單,但想想這個問題:在過程2中,A怎麼B給他的回信在傳遞過程中,有沒有被人修改?這就涉及到數字簽名的概念。

  3.1數字簽名(digital signature)

  微軟官方給出的定義:“數字簽名”是指可以新增到檔案的電子安全標記。使用它可以驗證檔案的發行者以及幫助驗證檔案自被數字簽名後是否發生更改。

  3.1.1數字簽名原理

  要達到這個目的,一般是對資訊做一個hash計算得到一個hash值,注意,這個過程是不可逆的,也就是說無法通過hash值得出原來的資訊內容。在把資訊傳送出去時,把這個hash值加密後做為一個簽名和資訊一起發出去。 接收方在收到資訊後,會重新計算資訊的hash值,並和資訊所附帶的hash值(解密後)進行對比,如果一致,就說明資訊的內容沒有被修改過,因為這裡hash計算可以保證不同的內容一定會得到不同的hash值,所以只要內容一被修改,根據資訊內容計算的hash值就會變化。當然,不懷好意的人也可以修改資訊內容的同時也修改hash值,從而讓它們可以相匹配,為了防止這種情況,hash值一般都會加密後(也就是簽名)再和資訊一起傳送。

  3.1.2數字簽名使用方式

  下面通過例子來說明這個過程:

  B給A回信時,採用了數字簽名的方式

  1、B先用hash函式,生成信件的摘要(digest)

  2、B使用自己的私鑰,對這個摘要加密,這樣就生成了數字簽名(signature)

  3、B將這個簽名附在要回復的資訊後面,一起發給A

  4、A收到B的資訊後,取下數字簽名,並通過B的公鑰解密,得到信件的摘要資訊

  5、A在對B傳送的資訊本身使用B指定的hash函式,將得到的結果同上一步解密得到的摘要進行對比,如果兩者一致,就說明B發過來的資訊未被修改過。

3.2數字證書(Digital CerTIficate)

  問題就這樣結束了嗎?遠沒有,試想,雖然A確定了B回給他的資訊是未修改過的,但是怎麼確定給他回資訊的就是B?如果有不懷好意的C把A儲存的B的公鑰偷偷換成自己的,並冒用B的名義給A發資訊呢?

  要解決這個問題,A只要能確定自己持有的公鑰到底是不是B的就行了,這就需要用到數字證書。

  數字證書是用來驗證公鑰所屬的使用者身份。在日常生活中,如果我們要驗證一個人的身份,通常的做法是檢視他的身份證。我們信任身份證頒發機構即政府機構的公信力,因此只要驗證一個人的身份證不是偽造的,我們就相信這個人的身份和身份證上所描述的是一致的。

數字證書就是一個人或者組織在網路世界中的身份證,其發證機關是證書管理機構(cerTIficate authority,CA)。CA用自己的私鑰對使用者的身份資訊(主要是使用者名稱和該使用者的公鑰)進行簽名,該簽名和使用者的身份資訊一起就形成了證書。

  3.2.1數字證書的構成

  證書的釋出機構(Issuer)

指出是什麼機構釋出的這個證書,也就是指明這個證書是哪個證書中心(cerTIficate authority,簡稱CA)釋出的的(只是建立證書,不是指證書的使用者)。

  證書的有效期(Valid from , Valid to)

  也就是證書的有效時間,或者說證書的使用期限。 過了有效期限,證書就會作廢,不能使用了。

  公鑰 (Public key)

  這個我們在前面介紹公鑰密碼體制時介紹過,公鑰是用來對訊息進行加密解密的,是很長的一串數字。

  證書所有者(Subject)

  這個證書是釋出給誰的,或者說證書的所有者,一般是某個人或者某個公司名稱、機構的名稱、公司網站的網址等。

  簽名所使用的演算法 (Signature algorithm)

  指的這個數字證書的數字簽名所使用的加密演算法,這樣就可以使用證書釋出機構的證書裡面的公鑰,根據這個演算法對指紋進行解密。指紋的加密結果就是數字簽名

  指紋以及指紋演算法 (Thumbprint, Thumbprint algorithm)

  這個是用來保證證書的完整性的,也就是說確保證書沒有被修改過。 其原理就是在釋出證書時,釋出者根據指紋演算法(一個hash演算法)計算整個證書的hash值(指紋)並和證書放在一起,使用者在開啟證書時,自己也根據指紋演算法計算一下證書的hash值(指紋),如果和剛開始的值對得上,就說明證書沒有被修改過,因為證書的內容被修改後,根據證書的內容計算的出的hash值(指紋)是會變化的。


相關文章