網絡安全——數據的加密與簽名,RSA介紹

1、 密碼概述

發送者對明文進行加密而後生成密文,接受者再對密文解密獲得明文的過程。 如今使用的全部加密算法都是公開的!可是密鑰確定不是公開的。git

1 散列(哈希)函數

  • 一般有MD五、SHA一、SHA25六、SHA512
  • 實質是抽取特徵碼,這樣通常不會重複!是的,不一樣的文本它的哈希結果是有可能相同的,但機率很小。
    (舉例:好比想要識別一我的,咱們能夠經過他的指紋來鎖定他,指紋出現相同的機率很低吧!在這裏,人就至關於數據,而指紋就至關於對人這個數據進行hash後獲得的結果)
  • 對任意一個二進制數據進行哈希,能夠獲得定長的字符串結果,例如MD5哈希結果是128位,更可能是以32個字符的十六進制格式哈希輸出
  • 還有就是不可逆的,既然是不可逆的,那麼固然不是用來加密的,而是簽名

2 對稱加密算法

  • 有DES、3DES、AES
  • 加密和解密使用同一個祕鑰,加密解密的速度快
  • 適合給大數據進行加密
  • 密鑰的安全性很是重要

3 非對稱加密算法:RSA

  1. 使用 公鑰 加密,使用 私鑰 解密
  2. 使用 私鑰 加密,使用 公鑰 解密(私鑰簽名,公鑰驗籤)
  3. 更安全,固然速度會慢下來,若是隨着硬件的突破,使用愈來愈多,特別是支付

1是對數據加密,2是防止僞造客戶端數據,對服務器攻擊,更重要是防止模擬了客戶端,進行支付相關的操做github

4 對稱加密與非對稱加密的區別

就我的理解,最主要的就是密鑰的不一樣,對稱加密客戶端和服務端使用同一個密鑰,非對稱加密使用不一樣的密鑰。算法

客戶端的代碼是很容易被破解的,IDA、hopper disassembler工具的使用,使得破解更加簡單並且破解後容易閱讀,再配合Charles抓取網絡包,根據關鍵字很容易就定位到加密代碼,而後獲取密鑰。sass

因爲對稱加密密鑰同樣,因此解密就垂手可得;可是非對稱加密就不會出現這種問題,由於服務端和客戶端的密鑰不同,公鑰加密私鑰解密,加密的公鑰也是公開的,而私鑰通常放在服務端,黑客通常是拿不到的。安全

另外就是沒有密鑰狀況下強制暴力破解,非對稱加密也要比對稱加密花的多的多的時間來破解。一條信息就要花你幾年的時間,因此很安全。服務器

2、加密與簽名區別(RSA)

  • 最大的區別是,加密是可逆的,而簽名是不可逆的。

好比對於"Hello world!"進行加密後獲得結果R,還可使用密鑰經過結果R解密獲得"Hello world!";而對"Hello world!"進行簽名獲得結果R,卻不能使用密鑰經過R得到"Hello world!",要否則的話壓縮算法要逆天了!好比hash,使用幾十個字符就能存儲幾G幾T的數據。。。網絡

  • 加密是對數據進行機密性保護,簽名主要用於身份驗證

好比A對B發送了信息Message;經過加密後,即使C經過網絡包截取得到了Message,它也不知道里面的具體內容,只能看到一堆亂碼;經過簽名,假設D也用相同的加密算法發送了此Message,可是簽名錯誤,那麼B經過簽名依然拒絕D的Message。函數

  • 以當前使用的比較多的RSA爲例舉例:

假設A、B雙方均擁有一對公私鑰(PUB_APRI_APUB_BPRI_B)。工具

A向B發送Message的整個簽名和加密的過程以下:性能

  1. A先使用HASH對Message生成一個固定長度的信息摘要Message_hash_A
  2. A使用A的私鑰PRI_AMessage_hash_A進行簽名獲得Message_sign(這裏爲何不直接對Message進行簽名,而要對Message_hash_A進行簽名呢?由於Message的長度可能很長,而Message_hash_A的長度則是固定的,這樣性能更高,格式也固定,何況hash的結果通常不會出現重複的可能)
  3. A接着使用B的公鑰PUB_B對信息Message和信息Message_sign進行加密獲得Message_RSA,這時A將Message_RSA發送給B。

當B接收到A的信息Message_RSA後,獲取Message的步驟以下:

  1. B用本身的私鑰PRI_B解密獲得明文:MessageMessage_sign
  2. 而後B使用A的公鑰PUB_AMessage_sign獲得Message_hash_A;同時,B再對Message使用與A相同的HASH獲得Message_hash_B
  3. 若是Message_hash_AMessage_hash_B相同,則說明Message沒有被篡改過。

上面的過程當中,A知道A的公私鑰同時也要知道B的公鑰;同理B要知道A的公鑰和B的公私鑰

關於公私鑰再打個比方:公鑰就像一把鎖同樣將數據鎖住;私鑰就像鑰匙同樣,能將對應的鎖打開。

公鑰加密,私鑰解密的好處是:公鑰能夠公開,那麼不管誰有公鑰均可以給你發送信息,並且也只有你才能解密

咱們常用的Github就是使用了簽名的方法,SSH,在本地電腦生成一對公私鑰,將公鑰傳到github,而後使用私鑰進行簽名,github經過公鑰延籤後認爲你的身份合法。

另外,加密和編碼是不同的,好比ASCII是屬於編碼,是將0~255與字符一一對應。

相關文章
相關標籤/搜索