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


一、 密碼概述

發送者對明文進行加密然后生成密文,接受者再對密文解密得到明文的過程。 現在使用的所有加密算法都是公開的!但是密鑰肯定不是公開的。

1 散列(哈希)函數

  • 通常有MD5、SHA1、SHA256、SHA512
  • 實質是抽取特征碼,這樣一般不會重復!是的,不同的文本它的哈希結果是有可能相同的,但概率很小。
    (舉例:比如想要識別一個人,我們可以通過他的指紋來鎖定他,指紋出現相同的概率很低吧!在這里,人就相當於數據,而指紋就相當於對人這個數據進行hash后得到的結果)
  • 對任意一個二進制數據進行哈希,可以得到定長的字符串結果,例如MD5哈希結果是128位,更多是以32個字符的十六進制格式哈希輸出
  • 還有就是不可逆的,既然是不可逆的,那么當然不是用來加密的,而是簽名

2 對稱加密算法

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

3 非對稱加密算法:RSA

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

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

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

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

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

由於對稱加密密鑰一樣,所以解密就輕而易舉;但是非對稱加密就不會出現這種問題,因為服務端和客戶端的密鑰不一樣,公鑰加密私鑰解密,加密的公鑰也是公開的,而私鑰一般放在服務端,黑客一般是拿不到的。

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

二、加密與簽名區別(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與字符一一對應。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM