密码学知识
密鑰
密鑰secret key:是一種參數,它是在明文轉換為密文或將密文轉換為明文的算法中輸入的參數。
根據密碼算法所使用的加密密鑰和解密密鑰是否相同,密鑰分為對稱密鑰與非對稱密鑰。
1、對稱密鑰加密
又稱私鑰加密或會話密鑰加密算法,即信息的發送方和接收方使用同一個密鑰去加密和解密數據。它的最大優勢是加/解密速度快,適合于對大數據量進行加密,但密鑰管理困難。
2、非對稱密鑰加密
又稱公鑰密鑰加密。它需要使用不同的密鑰來分別完成加密和解密操作,一個公開發布,即公開密鑰,另一個由用戶自己秘密保存,即私用密鑰。信息發送者用公開密鑰去加密,而信息接收者則用私用密鑰去解密。公鑰機制靈活,但加密和解密速度卻比對稱密鑰加密慢得多。
所以在實際的應用中,人們通常將兩者結合在一起使用,例如,對稱密鑰加密系統用于存儲大量數據信息,而公開密鑰加密系統則用于加密密鑰。
密鑰詳解
常用加密算法
常用加密算法的應用
加密算法的比較和項目中的應用
總結:
1. 加密算法是可逆的,用來對敏感數據進行保護。散列算法(簽名算法、哈希算法)是不可逆的,主要用于身份驗證。
2. 對稱加密算法使用同一個密鑰加密和解密,速度快,適合給大量數據加密。對稱加密客戶端和服務端使用同一個密匙,存在被抓包破解的風險。
3. 非對稱加密算法使用公鑰加密,私鑰解密,私鑰簽名,公鑰驗簽。安全性比對稱加密高,但速度較慢。非對稱加密使用兩個密匙,服務端和客戶端密匙不一樣,私鑰放在服務端,黑客一般是拿不到的,安全性高。
4. Base64不是安全領域下的加解密算法,只是一個編碼算法,通常用于把二進制數據編碼為可寫的字符形式的數據,特別適合在http,mime協議下的網絡快速傳輸數據。UTF-8和GBK中文的Base64編碼結果是不同的。采用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到,但這種方式很初級,很簡單。Base64可以對圖片文件進行編碼傳輸。
5. https協議廣泛用于萬維網上安全敏感的通訊,例如交易支付方面。它的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
6. 大量數據加密建議采用對稱加密算法,提高加解密速度;小量的機密數據,可以采用非對稱加密算法。
在實際的操作過程中,我們通常采用的方式是:采用非對稱加密算法管理對稱算法的密鑰,然后用對稱加密算法加密數據,這樣我們就集成了兩類加密算法的優點,既實現了加密速度快的優點,又實現了安全方便管理密鑰的優點。
7. MD5標準密鑰長度128位(128位是指二進制位。二進制太長,所以一般都改寫成16進制,每一位16進制數可以代替4位二進制數,所以128位二進制數寫成16進制就變成了128/4=32位。16位加密就是從32位MD5散列中把中間16位提取出來);sha1標準密鑰長度160位(比MD5摘要長32位),Base64轉換后的字符串理論上將要比原來的長1/3。
對稱加密
加密一般分為對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key Encryption)。
對稱加密又分為分組加密和序列密碼。
(1)分組加密,也叫塊加密(block cyphers),一次加密明文中的一個塊。是將明文按一定的位長分組,明文組經過加密運算得到密文組,密文組經過解密運算(加密運算的逆運算),還原成明文組。具有代表性的塊加密算法有DES,AES,3DES等。
(2)序列加密,也叫流加密(stream cyphers),一次加密明文中的一個位。是指利用少量的密鑰(制亂元素)通過某種復雜的運算(密碼算法)產生大量的偽隨機位流,用于對明文位流的加密。解密是指用同樣的密鑰和密碼算法及與加密相同的偽隨機位流,用以還原明文位流。
分組加密算法中,有ECB、CBC、PCBC、CFB、OFB、CTR這幾種算法模式:
我在實際項目中用到的是CBC模式(密碼分組鏈接(CBC,Cipher-block chaining)模式)
對稱加密算法之分組加密的六種工作模式(ECB、CBC、PCBC、CFB、OFB、CTR)
分組密碼模式的填充
在密碼學中,分組加密(Block cipher),又稱分塊加密或塊密碼,是一種對稱密鑰算法。 它將明文分成多個等長的模塊(block),使用確定的算法和對稱密鑰對每組分別加密解密。(對過長的數據 進行循環調用加解密)
常見的分組加密算法有: DES、3DES、AES、IDEA。
填充 padding
一般的填充方式有以下幾種:
1、ANSI X9.23
ANSIX923 填充字符串由一個字節序列組成,此字節序列的最后一個字節填充字節序列的長度,其余字節均填充數字零。
假定塊長度為8,數據長度為 9,數據: FF FF FF FF FF FF FF FF FF,填充: FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
2、ISO10126
ISO10126 填充字符串由一個字節序列組成,此字節序列的最后一個字節填充字節序列的長度,其余字節填充隨機數據。
假定塊長度為 8,數據長度為 9,數據: FF FF FF FF FF FF FF FF FF,填充: FF FF FF FF FF FF FF FF FF 7D 2A 75 EF F8 EF 07
3、PKCS7 (RFC5652)
PKCS7 填充字符串由一個字節序列組成,每個字節填充該字節序列的長度。
假定塊長度為 8,數據長度為 9,數據: FF FF FF FF FF FF FF FF FF,填充: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07,如果恰好8個字節時還要補8個字節的0x08,可以讓解密的數據很確定無誤的移除多余的字節。 PKCS5 Padding 和 PKCS7 Padding 在這方面是類似的。不同點在于,選擇算法的時候如果選用 PKCS5 Padding 填充模式,就是明確指定塊大小是 8 個字節。選用 PKCS7 Padding 則是沒有明確指定塊大小。如果選擇算法的時候選用 PKCS7 Padding 填充模式,同時設置塊大小為 8 字節,和選用 PKCS5 Padding 填充模式,沒有設置塊大?。▽嶋H已經設置了 8 字節),這兩種情況下,兩種填充模式沒有區別。另外有個值得注意的是,AES 中塊大小是固定 16 字節。
補零
填充字符串由設置為零的字節組成
非對稱加密
什么是不對稱加密,以及公鑰和私鑰
每個用戶都有兩把鑰匙,一把公鑰一把私鑰。公鑰是對外發布的,所有人都看的到所有人的公鑰,私鑰是自己保存,每個人都只知道自己的私鑰而不知道別人的。當用公鑰加密的時候,就用私鑰解密,用私鑰加密的時候,就用公鑰解密。常用于https協議加密。
常見的不對稱加密方式
一種是服務端用私鑰加密,然后客戶端用公鑰解密,這種常用于分發數字簽名,當數字簽名被工信單位認證之后就成了數字證書。
一種是客戶端用公鑰加密,然后服務端用私鑰解密,因為客戶端一旦用公鑰加密之后,只有擁有私鑰的服務端才能打開,所以是安全的。這種方式常用于加密客戶端發送的信息。
數字簽名:是用于解密的公鑰,可以比喻成合同中的簽字,能夠認證信息發送方身份的真實性。數字簽名的本質是公鑰。
數字證書:經過工信部門認證過的數字簽名叫做數字證書。
不對稱加密的發展及流程
基礎版
所有人持有一份我的公鑰,私鑰只有我一個人持有,也就是說所有人都可以用公鑰加密包裹,但是只有我一個人能用私鑰拆開包裹。
這個時候出現了另一個問題
只通過前面的方法 你沒有辦法確認這個包裹到底是不是我發的。
這個時候如果有一個人裝作快遞員,把我的包裹攔了下來,然后假裝我給你發包裹,當你把你的公鑰放進這個包裹并發回的時候,這個快遞員再把包裹攔截下來,然后用另外一個包裹把快遞員自己的公鑰放進去,這個時候他就有了我們兩個人的公鑰,他就可以扮演一個中間者,隨意的更改我們兩個發的包裹中的數據,而我們兩個人并不知道我們實際上是在和這個快遞員互發包裹。
升級版--加入數字簽名
我們采用數字簽名的方式,先用hash函數生成包裹的摘要 digest,然后我用私鑰對這個digest加密生成數字簽名,這個時候這個數字簽名可以被所有人解密看到,但是大家都沒有辦法對他進行修改,因為能加密他的只有我的私鑰。這個時候你就能知道這個包裹是不是我發的了(你對信件的內容進行hash,如果得到的結果和數字簽名解密后的結果一樣,說明包裹沒有被人修改過)
但是這里還有一個問題:因為我們前面的前提是你知道你手里的公鑰是我的,但是萬一你手里的公鑰是假的呢,是上一個快遞員偽造的呢,這個時候上一個快遞員就可以假裝是我給你發包裹了。
終極版--數字簽名升級成數字證書。
這個時候就有了一個認證中心,在認證中心CA,我的公鑰進行了登記,認證中心用他的私鑰加密我的公鑰和一些其他信息發給我,這個時候我就有了數字證書,相當于我的身份證,之后我再給你發消息的時候在發送數字簽名的同時也發送一份我的證書給你,通過對比你就知道這個包裹有沒有被偽造了。認證中心發給你的加密過的文件就叫做數字證書,證書必須是工信機構頒發的,必須人工進行登記,所以很難偽造。這也是https信息安全的原因,但是https證書需要注冊認證,所以不需要保證網站數據安全的時候一般都使用http。
RSA
1、RSA簡介
這種算法1978年就出現了,它是第一個既能用于數據加密也能用于數字簽名的算法。它易于理解和操作,也很流行。算法的名字以發明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。
2、數字簽名技術
數字簽名技術是將摘要信息用發送者的私鑰加密,與原文一起傳送給接收者。接收者只有用發送者的公鑰才能解密被加密的摘要信息,然后用HASH函數對收到的原文產生一個摘要信息,與解密的摘要信息對比。如果相同,則說明收到的信息是完整的,在傳輸過程中沒有被修改,否則說明信息被修改過,因此數字簽名能夠驗證信息的完整性。數字簽名是個加密的過程,數字簽名驗證是個解密的過程。
3、RSA加解密
C# RSA 分段加解密
RSA非對稱加密內容長度有限制,1024位key的最多只能加密127位數據,否則就會報錯。
解決辦法是用對稱加密(AES/DES etc)加密數據,然后用RSA公鑰加密對稱加密的密鑰,用RSA的私鑰解密得到對稱加密的密鑰,然后完成反向操作得到明文。
rsa加解密的內容超長的問題解決
由于RSA算法相對于對稱加密算來說效率較低,通常RSA算法用來加密小數據,如對稱加密使用的key等。實際上應用更為廣泛的是RSA算法用在簽名操作上。通常使用私鑰對一段消息的hash值進行簽名操作,達到消息的防篡改和偽造。
RSA加解密算法還有兩種不同的方式:
一種是使用對稱密鑰(比如DES等加解密方法)加密數據,然后使用非對稱密鑰(RSA加解密密鑰)加密對稱密鑰;另一種是直接使用非對稱密鑰加密數據。
第一種方式安全性高,復雜度也高,不存在加密數據長度限制問題,第二種方式安全性差一些,復雜度低,但是存在加密數據限制問題(即使用非對稱密鑰加密數據時,一次加密的數據長度是(密鑰長度/8-11))。
4、RSA密鑰結構
RSAParameters 結構
在利用Org.BouncyCastle.Crypto.Parameters產生CSR,公鑰私鑰的時候,因為【modulus 為一個大整數,最高位為符號位,其為1時,就是負數,所以要在最高位填充0x00以保證不為負?!克粤私庖幌缕浣Y構。
RSA私鑰文件(PEM)解析(TLV格式見下面)
5、TLV格式:
(每一個字段都是TLV)
|
Tag |
Length |
Value |
||
|
Tag |
Length |
Value |
||
TLV的注意事項
1)上述TLV結構中:
V值長度<0x80,L表示數據的長度;
V值長度>=0x80的時候,L為0x8X,X表示的L長度要占用的字節數,X個字節用來表示V的長度。
2)RSA公鑰N的第一個字節如果大于0x80,則需要在公鑰值前面補00,這是因為modulus為一個大整數,最高位為符號位,其為1時,就是負數,所以要在最高位填充0x00以保證不為負。所以公鑰TLV應該是:02 81 81 00 [128字節個公鑰值]。
3)RSA私鑰的N,d,p,q,Dp,Dq,Mp也需要考慮(2)中的第一個字節如果大于0x80的情況。
4)TLV格式中是可以嵌套原,就是說V里面可以包括另一個TLV,嵌套的層數沒有陰制
【基礎】TLV 報文格式詳細解析
【IoT】加密與安全:非對稱加密算法 RSA 公私鑰 DER 編碼示例解析
附:不同證書格式Der 、Cer 、Pfx 、Pem區別
Der 、Cer、 Pfx、 Pem它們都是擴展名(文件名的后綴,代表格式)
.DER:用二進制DER編碼的證書;
.PEM:用ASCLL(BASE64)編碼的證書;
.CER:存放公鑰,沒有私鑰;
.PFX:存放公鑰和私鑰
(pem 后綴的證書都是base64編碼;der 后綴的證書都是二進制格式;crt .cer 后綴的文件都是證書文件(編碼方式不一定,有可能是.pem,也有可能是.der);.pfx 主要用于windows平臺,瀏覽器可以使用,也是包含證書和私鑰,獲取私鑰需要密碼才可以)
X509文件擴展名(x509這種證書只有公鑰,不包含私鑰。)
附:ASN.1解析器
CSR文件在線生成工具
ASN.1 JavaScript decoder
這是JavaScript通用ASN.1解析器,該解析器可以解碼任何有效的ASN.1 DER或BER結構,無論是使用Base64編碼(可識別原始base64,PEM裝甲和begin-base64)還是十六進制編碼。
數字簽名與證書
前面提到了數字簽名,數字簽名的作用就是防止篡改和偽裝,并且能夠防止否認。但是要正確運用數字簽名技術還有一個非常大的前提,那就是用來驗證簽名的公鑰必須真正的屬于發送者。
如果你獲取到的公鑰是偽造的,那么不管你的簽名算法多完美,也是會得到錯誤的結果。
那么我們怎么才能安全的獲得發送者的公鑰呢?這里就需要使用到證書了。所謂證書就是通過第三方的可信機構 對發送者的公鑰進行簽名而得到的。
這里有兩個概念:公鑰證書(Public-Key Certificate, PKC)和認證機構(Certification Authority, CA)。
證書的例子
我們看一個實際中可能會遇到的例子:
假如A要向B發送一條消息,這條消息希望使用B的公鑰來加密,但是A事先無法知道B的公鑰到底是什么,那么可以使用下面的證書架構:
在第一步,B需要生成自己的密鑰對,然后將公鑰注冊到CA中。這里CA就是一個第三方的可信賴的機構。
CA獲得到了B的公鑰之后,使用自己的私鑰對B的公鑰進行簽名,得到證書。
A從CA獲得到證書和CA的公鑰(CA是個可信賴機構,可以從公共站點中獲取),并使用CA的公鑰來驗證證書簽名的合法性。
A獲得了B的公鑰,使用B的公鑰加密消息。
B用自己的私鑰解密消息,得到明文。
好了,這就是一個最簡單的證書使用的例子。
證書的標準和生成
因為證書是由認證機構頒發的,使用者需要對其進行驗證,那么就需要一個標準的證書格式來方便使用者使用。最廣泛的一個證書標準格式是由ITU和ISO制定的X.509規范。
x.509有很多擴展格式包括:DER、CRT、CER、PEM等。他們在不同的環境中有不同的用處。
你了解HTTPS,但你可能不了解X.509
那么怎么生成證書呢?可以借助第三方工具,也可以使用命令行命令比如:openssl來生成。
PKI
有了證書的格式,是不是就可以實際使用證書了呢?
其實這還是不夠的,我們還需要定義證書該由誰來頒發,如何頒發,如果作廢證書等。而PKI(Public-Key Infrastructure)公鑰基礎設施就是為了有效的使用證書而制定的一系列規范和協議。
PKI的組成主要有三部分:
用戶
用戶是使用PKI的人,也就是需要借助CA來發布自己的公鑰和獲取別人公鑰的人。
認證機構
認證機構就是CA了,它是對證書進行管理的人。CA除了生成證書之外,還有一個非常重要的工作就是作廢證書。
因為用戶有可能會丟失密鑰,或者出于特殊的原因,廢棄掉某些證書。那么就可以向CA發起一個作廢請求。而作廢的證書會被保存在CRL中。CRL就是對外的證書廢棄列表。用戶在使用證書的時候必須首先查看該證書是否在CRL列表中。如果在則該證書不能夠被使用。
倉庫
倉庫是一個保存證書的數據庫,用戶注冊之后生成的證書都存在倉庫中,以供其他的用戶獲取使用。
參考:一文讀懂密碼學中的證書
哈希函數
Hash函數又稱哈希函數、散列函數、雜湊函數。它是一種單向密碼體制,即從一個從明文到密文的不可逆映射,只有加密過程,沒有解密過程。
Hash函數H將可變長度的數據塊M(長度任意)作為輸入,產生固定長度的Hash值h=H(M)。
在安全應用中使用的Hash函數稱為密碼學Hash函數。
特性
1.(逆天特性)應用于任意長的消息,產生固定長的輸出(散列值,消息摘要,數字指紋隨便你叫什么了);
2.(單向性)對于給定消息x,H(x)很容易得出。但是對于給定z,尋找H(x)=z是不可行的;
3.(安全特性)抗弱碰撞性:有x,找一個y,使得H(x)=H(y)計算不可行;抗強碰撞性:尋找(x,y),使得使得H(x)=H(y)計算不可行。
4.(雪崩性)雪崩效應,散列值的每一位都與消息的每一位有關,相近的消息,輸出很大差別。
哈希函數的運用
1、消息認證(由于雪崩性,稍有改動一對比就發現了)
消息認證是用來驗證消息完整性的一種機制或服務。消息認證確保收到的數據確實和發送時的一樣(即沒有修改、插入、刪除或重放)。
當Hash函數用于提供消息認證功能時,Hash函數值通常稱為消息摘要。
發送者將明文通過單向加密算法加密生成定長的密文串,然后傳遞給接收方。接收方在收到加密的報文后進行解密,將解密獲取到的明文使用相同的單向加密算法進行加密,得出加密后的密文串。隨后將之與發送者發送過來的密文串進行對比,若發送前和發送后的密文串相一致,則說明傳輸過程中數據沒有損壞;若不一致,說明傳輸過程中數據丟失了。單向加密算法只能用于對數據的加密,無法被解密,其特點為定長輸出、雪崩效應。
參考:https://www.jiamisoft.com/blog/24470-sansan.html
2、數字簽名(計算H(m),然后私鑰加密)
在進行數字簽名過程中使用用戶的私鑰加密 消息的Hash值,其他任何知道該用戶公鑰的人都能夠通過數字簽名來驗證消息的完整性。
可以驗證很長的消息。
數字簽名和驗證的文件傳輸過程如下:
(1) 被發送文件(明文)用Hash算法加密產生xx bit的數字摘要。
(2) 發送方用自己的私鑰對摘要再加密,這就形成了數字簽名。
(3) 將原文和加密的摘要同時傳給對方。
(4) 對方用發送方的公鑰對 加密的摘要 解密,同時對收到的明文用相同的hash算法加密產生又一摘要。
(5) 將解密后的摘要和收到的明文在接收方重新加密產生的摘要相互對比。如兩者一致,則說明傳送過程中信息沒有被破壞或篡改過。否則不然。
3、其他應用
單向口令文件。
入侵檢測。
病毒檢測。
構建隨機函數(PRF)或用做偽隨機數發生器(PRNG)
安全Hash算法(SHA)
安全散列算法SHA(Secure Hash Algorithm)是美國國家安全局 (NSA) 設計,美國國家標準與技術研究院(NIST) 發布的一系列密碼散列函數,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等變體。主要適用于數字簽名標準(DigitalSignature Standard DSS)里面定義的數字簽名算法(Digital Signature Algorithm DSA)。
SHA-1
SHA-1產生160位的Hash值。(20字節)
SHA1始終把消息當成一個位(bit)字符串來處理。
SHA-2
Hash值長度依次為256位、384位和512位,分別稱為SHA-256、SHA-384和SHA-512,這些算法統稱為SHA-2。
SHA-256算法:SHA-256算法的輸入是最大長度小于264位的消息,輸出是256位的消息摘要,輸入消息以512位的分組為單位進行處理。
MAC與HMAC
MAC
在密碼學中,(消息認證碼)Message Authentication Code是用來認證消息比較短的信息。換言之,MAC用來保證消息的數據完整性和消息的數據源認證。
MAC由消息本身和一個密鑰經過一系列計算產生,用于生成MAC的算法,稱為MAC算法。MAC算法應能滿足如下幾個條件:
在僅有消息本身沒有密鑰的情況下,無法得到該消息的MAC;
同一個消息在使用不同密鑰的情況下,生成的MAC應當無關聯;
在已有一系列消息以及其MAC時,給定一個新的消息,無法得到該消息的MAC。
下圖摘自維基百科,可以很好的描述MAC的使用原理:
過程:
(1)明文+key,通過mac算法得到MAC值;
(2)將明文和MAC值 傳給對方,再 對明文+key進行mac運算,計算得到的MAC和 接收到的MAC值進行比較。
MAC就是消息驗證碼(Message Authentication Code)的簡稱,是一種與密鑰相關的單向散列函數,它能夠做到驗證消息是來自發送者發送的,正確的沒有被篡改過的。具體做法是:
發送方和接收方事先共享同一個密鑰。
發送方將發送消息和密鑰進行MAC運算,得到MAC值,并把MAC值與消息一同發送給接收方。
接收方接收到消息后,將消息部分與事先共享的密鑰進行MAC運算,得到MAC值,將MAC值與發送方發送的MAC值進行比較,如果一致,證明消息是來自發送方。
參考:消息驗證碼-MAC算法總結
HMAC
由H.Krawezyk,M.Bellare,R.Canetti于1996年提出的一種基于Hash函數和密鑰進行消息認證的方法,它可以與任何迭代散列函數捆綁使用。
HMAC是MAC算法中的一種,其基于加密HASH算法實現。任何加密HASH, 比如MD5、SHA256等,都可以用來實現HMAC算法,其相應的算法稱為HMAC-MD5、HMAC-SHA256等。
HMAC運算利用hash算法,以一個消息M和一個密鑰K作為輸入,生成一個定長的消息摘要作為輸出。HMAC算法利用已有的Hash函數,關鍵問題是如何使用密鑰。
HMAC的密鑰長度可以是任意大小,如果小于n(hash輸出值的大?。?,那么將會消弱算法安全的強度。建議使用長度大于n的密鑰,但是采用長度大的密鑰并不意味著增強了函數的安全性。密鑰應該是隨機選取的,可以采用一種強偽隨機發生器,并且密鑰需要周期性更新,這樣可以減少散列函數弱密鑰的危險性以及已經暴露密鑰所帶來的破壞。
HMAC的圖解
HTTPS
HTTPS全過程 = 對稱加密 + 非對稱加密 + 數字證書
客戶端瀏覽器 vs 服務端
1、客戶端瀏覽器 內置 各大權威機構(CA)的數字證書【含CA的公鑰,權威的,不會被篡改的】
CA例如Digicert、GeoTrust、Globalsign等等,
2、訪問https網站,獲取到服務器的數字證書,進行驗證
校驗證書聲明的CA在操作系統的根證書里面
校驗證書在有效期內
校驗證書的簽名,這一步能夠證明此證書確實是由CA機構頒發的。
其中校驗證書簽名是關鍵,證書簽名是網站申請證書時,CA機構對一個hash值使用CA私鑰對稱加密后的字符串。 證書的簽名 可以用表達式表達為:
sign = encrypt(hash("證書機構" + "證書有效期" + "證書所有者" + "公鑰"))
校驗簽名的步驟:
客戶端從系統根證書中取出對應CA的公鑰,然后對簽名解密 獲取到hash值。
客戶端使用相同的方式拼接證書信息,使用相同算法 得到hash值。
比較解密出來的hash值和客戶端拼接并運算得到的hash值是否相同,相同則通過。
這個過程其實完成了這么一件事情,客戶端看了一眼證書提供的信息,然后通過CA公鑰解密,證明了證書提供的信息是被擁有CA私鑰的機構確認過的(證書的簽名),便相信了證書提供的信息。
就像現實生活中的票據,相信票據中的信息,因為有一個獨一無二的機構簽章(雖然可以偽造,但是非對稱機密的簽章是不可偽造的)
3、客戶端 CA的公鑰 加密自己的對稱密鑰 發給服務器
服務端用CA的私鑰 解密,得到客戶端的對稱密鑰。。之后用此對稱密鑰 加密傳輸文本。
(涉及到 非對稱加密 和對稱加密)
Https流程圖:
解決的問題:
非對稱加密只用來傳輸密碼本,實際數據傳輸用的對稱加密,解決了非對稱加密解密速度慢的問題
CA機構數字證書驗證公鑰,解決公鑰傳輸的信任問題
參考:https://blog.csdn.net/weixin_40898368/article/details/103691882
國產算法概述
簡介
國產密碼算法(國密算法)是指國家密碼局認定的國產商用密碼算法,在金融領域目前主要使用公開的SM2、SM3、SM4三類算法,分別是非對稱算法、哈希算法和對稱算法。
SM2算法:SM2橢圓曲線公鑰密碼算法是我國自主設計的公鑰密碼算法,包括SM2-1橢圓曲線數字簽名算法,SM2-2橢圓曲線密鑰交換協議,SM2-3橢圓曲線公鑰加密算法,分別用于實現數字簽名密鑰協商和數據加密等功能。SM2算法與RSA算法不同的是,SM2算法是基于橢圓曲線上點群離散對數難題,相對于RSA算法,256位的SM2密碼強度已經比2048位的RSA密碼強度要高。
SM3算法:SM3雜湊算法是我國自主設計的密碼雜湊算法,適用于商用密碼應用中的數字簽名和驗證消息認證碼的生成與驗證以及隨機數的生成,可滿足多種密碼應用的安全需求。為了保證雜湊算法的安全性,其產生的雜湊值的長度不應太短,例如MD5輸出128比特雜湊值,輸出長度太短,影響其安全性SHA-1算法的輸出長度為160比特,SM3算法的輸出長度為256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。
SM4算法:SM4分組密碼算法是我國自主設計的分組對稱密碼算法,用于實現數據的加密/解密運算,以保證數據和信息的機密性。要保證一個對稱密碼算法的安全性的基本條件是其具備足夠的密鑰長度,SM4算法與AES算法具有相同的密鑰長度分組長度128比特,因此在安全性上高于3DES算法。
常用國產密碼算法
國密算法是我國自主研發創新的一套數據加密算法,經過多年的發展,已經頒布多個算法標準,包括SM1、SM2、SM3、SM4、SM7、SM9、祖沖之密碼算法(ZUC)等。
目前應用最廣泛的是SM2、SM3、SM4三種商用密碼算法,分別為非對稱加密算法、哈希算法和對稱加密算法。
1. SM1算法。
該算法是由國家密碼管理局編制的一種商用密碼分組標準對稱算法,分組長度和密鑰長度均為128位,算法的安全保密強度及相關軟硬件實現性能與AES算法相當,目前該算法尚未公開,僅以IP核的形式存在于芯片中。調用該算法時,需要通過加密芯片的接口進行調用。
2. SM2算法
該算法是一種基于ECC算法的非對稱密鑰算法,其加密強度為256位,其安全性與目前使用的RSA1024相比具有明顯的優勢。
由于該算法基于ECC,故其簽名速度與秘鑰生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一種)
3. SM3算法
該算法也叫密碼雜湊算法,屬于哈希(摘要)算法的一種,雜湊值為256位,和SM2算法一起被公布。功能與MD5,SHA-1相同。產生256位的編碼。該算法為不可逆的算法。具體算法也是保密。
4. SM4算法
該算法為對稱加密算法,隨WAPI標準一起被公布,其加密強度為128位。此算法是一個分組算法,用于無線局域網產品。
該算法的分組長度為128比特,密鑰長度為128比特。加密算法與密鑰擴展算法都采用32輪非線性迭代結構。解密算法與加密算法的結構相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。
注:由于SM1、SM4加解密的分組大小為128bit,故對消息進行加解密時,若消息長度過長,需要進行分組,要消息長度不足,則要進行填充。
5. SM7對稱密碼
SM7算法是一種分組密碼算法,分組長度為128比特,密鑰長度為128比特。SM7的算法文本目前沒有公開發布。SM7適用于非接IC卡應用包括身份識別類應用(門禁卡、工作證、參賽證),票務類應用(大型賽事門票、展會門票),支付與通卡類應用(積分消費卡、校園一卡通、企業一卡通、公交一卡通)。
6. SM9非對稱算法
SM9是基于對的標識密碼算法,與SM2類似,包含四個部分:總則,數字簽名算法,密鑰交換協議以及密鑰封裝機制和公鑰加密算法。在這些算法中使用了橢圓曲線上的對這一個工具,不同于傳統意義上的SM2算法,可以實現基于身份的密碼體制,也就是公鑰與用戶的身份信息即標識相關,從而比傳統意義上的公鑰密碼體制有許多優點,省去了證書管理等。
雙線性對的雙線性的性質是基于對的標識密碼SM2中的總則部分同樣適用于SM9,由于SM9總則中添加了適用于對的相關理論和實現基礎。
其他參考:淺談DES、RAS、SHA-256與SM1、SM2、SM3、SM4區別
編程參考
.Net Framework參考:C#編程總結(八)數字簽名
.NetCore參考:https://www.cnblogs.com/stulzq/category/1611398.html
總結
- 上一篇: P多行溢出省略号的处理
- 下一篇: 工商银行信用卡制卡要多久能到?卡片审核时