加密、簽名、證書基本概念


1.非對稱加密

非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。

公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。

因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。

工作原理

  • A要向B發送信息,A和B都要產生一對用於加密和解密的公鑰和私鑰。
  • A的私鑰保密,A的公鑰告訴B;B的私鑰保密,B的公鑰告訴A。
  • A要給B發送信息時,A用B的公鑰加密信息,因為A知道B的公鑰。
  • A將這個消息發給B(已經用B的公鑰加密消息)。
  • B收到這個消息后,B用自己的私鑰解密A的消息。其他所有收到這個報文的人都無法解密,因為只有B才有B的私鑰。

RSA算法

RSA加密算法是一種非對稱加密算法

RSA是三位開發者姓氏開頭字母拼在一起組成的。

2.對稱加密

所謂對稱,就是采用這種加密方法的雙方使用方式同樣的密鑰進行加密和解密。

密鑰是控制加密及解密過程的指令。

算法是一組規則,規定如何進行加密和解密。

優缺點

由於其速度快,對稱性加密通常在消息發送方需要加密大量數據時使用。對稱性加密也稱為密鑰加密。

加密的安全性不僅取決於加密算法本身,密鑰管理的安全性更是重要。因為加密和解密都使用同一個密鑰,如何把密鑰安全地傳遞到解密者手上就成了必須要解決的問題。

工作原理

  • 數據發送方將明文(原始數據)和加密密鑰一起經過特殊加密算法處理后,使其變成復雜的加密密文發送出去。
  • 接收方收到密文后,若想解讀原文,則需要使用加密密鑰及相同算法的逆算法對密文進行解密,才能使其恢復成可讀明文。
  • 在對稱加密算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密。

AES

高級加密標准(英語:Advanced Encryption Standard,縮寫:AES)

這個標准用來替代原先的DES

DES全稱為Data Encryption Standard,即數據加密標准,是一種使用密鑰加密的塊算法

AES屬於對稱加密方法

3.密碼散列函數

密碼散列函數(Cryptographic hash function),又譯為加密散列函數,是散列函數(哈希函數)的一種。

它被認為是一種單向函數,也就是說極其難以由散列函數輸出的結果,回推輸入的數據是什么。

這種散列函數的輸入數據,通常被稱為消息(message),而它的輸出結果,經常被稱為消息摘要(message digest)或摘要(digest)。

特點

  • 對於任何一個給定的消息,它都很容易就能運算出散列數值
  • 難以由一個已知的散列數值,去推算出原始的消息
  • 在不更動散列數值的前提下,修改消息內容是不可行的
  • 對於兩個不同的消息,它不能給與相同的散列數值

MD5

MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數

可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整一致。

SHA家族

安全散列算法(英語:Secure Hash Algorithm,縮寫為SHA)是一個密碼散列函數家族,是FIPS所認證的安全散列算法。

能計算出一個數字消息所對應到的,長度固定的字符串(又稱消息摘要)的算法。

家族成員

  • SHA家族的五個算法,分別是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512
  • SHA-1在許多安全協定中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec
  • SHA-1的安全性如今被密碼學家嚴重質疑;后四者有時並稱為SHA-2,至今尚未出現對SHA-2有效的攻擊

4.證書機制

  • 引入一個公正的第三方
  • 當某一方想要發布公鑰時,它將自身的身份信息及公鑰提交給這個第三方
  • 第三方對其身份進行證實,如果沒有問題,則將其信息和公鑰打包成為證書(Certificate)
  • 而這個公正的第三方,就是常說的證書頒發機構(Certificate Authority)
  • 當我們需要獲取公鑰時,只需要獲得其證書,然后從中提取出公鑰就可以了

解決問題:

通常情況下,獲取外部平台的公鑰時,除非對方手把手將公鑰交給我們,否則公鑰在網絡中傳遞時,可能被篡改

5.數據安全傳輸條件

數據傳輸安全要滿足的要求:

  • 消息的發送方能夠確定消息只有預期的接收方可以解密(不保證第三方無法獲得,但保證第三方無法解密)。
  • 消息的接收方可以確定消息是由誰發送的(消息的接收方可以確定消息的發送方)。
  • 消息的接收方可以確定消息在途中沒有被篡改過(必須確認消息的完整性)。

如何實現?

假設有兩組四個密鑰

A的公鑰(PUB_A),A的私鑰(PRI_A);B的公鑰(PUB_B),B的私鑰(PRI_B)

公鑰一般用來加密,私鑰用來簽名

A發送消息

  • 利用加密散列函數(SHA-2、MD5)對要發送的消息進行運算,單向生成消息摘要
  • A用自己的私鑰(PRI_A)對消息摘要進行簽名
  • A用B的公鑰(PUB_B)對消息和簽名后的消息摘要進行加密

B接受消息

  • B用自己的私鑰(PRI_B)解密A用B的公鑰(PUB_B)加密的內容
  • 解密后的內容分為兩部分,一部分是消息,一部分是簽名后的消息摘要
  • B用A的公鑰(PUB_A)解簽A用A自己私鑰(PRI_A)簽的簽名
  • 對解密后的消息,進行加密散列函數運算,生成新的消息摘要,對比解簽后的消息摘要,判斷是否一致

非對稱加密盡可能的保證了,消息在網絡傳輸過程中,即使被截取,也無法被解密;

對消息摘要解簽的過程,要用到發送方的公鑰,這樣也就確定了消息的發送方;

消息摘要的前后對比,保證了消息的完整性。

非對稱加密是一種很耗時的操作,而對稱加密效率雖然高,但不安全。

我們可以結合使用。

利用非對稱加密,加密(簽名)消息摘要和對稱加密中的密鑰;利用對稱加密方式,加密消息數據

偷了一幅圖:

這篇博客寫的很詳細,圖偷他的:

加密、簽名和SSL握手機制細節https://www.cnblogs.com/f-ck-need-u/p/6089523.html

圖中利用私鑰,加密摘要信息生成數字簽名,就是 簽名 的過程。

參考

加密和簽名的區別:https://blog.csdn.net/youshaoduo/article/details/78476578

簽名、加密、證書的基本原理和理解:https://www.cnblogs.com/Caersi/p/6720789.html

加密、簽名和SSL握手機制細節https://www.cnblogs.com/f-ck-need-u/p/6089523.html

還有一篇,關於前后端代碼層面的,可以看一下:

前后端API交互如何保證數據安全性https://mp.weixin.qq.com/s?__biz=MzIwMDY0Nzk2Mw==&mid=2650319474&idx=1&sn=58d93748e1fce98a49378f611584dac2&chksm=8ef5fe06b982771076064fdca41117a5aadf782f7a2cecb7ca1b6208fadbe4103ade35bafdf7&scene=21#wechat_redirect

API數據加密框架monkey-api-encrypthttps://mp.weixin.qq.com/s?__biz=MzIwMDY0Nzk2Mw==&mid=2650319952&idx=1&sn=7cc80ab7ed6f3e1df48c23b245372ba8&chksm=8ef5f824b9827132f60d34dbe6915fe0528a2c56a8554b8f49ac797f372822d212f4f2a5f642&mpshare=1&scene=1&srcid=01163FLdZcK0cq47tY4ZG0Da&pass_ticket=Sn9gxTq46KCLz60J3Cs6MnKXjxGSsgKRe48Qz7idTxoU200Ohd5V420i5WMYpEWP#rd


免責聲明!

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



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