當前位置:首頁 » 網頁前端 » web常用的加密演算法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web常用的加密演算法

發布時間: 2023-03-23 22:52:49

① 常用的加密演算法有哪些

對稱密鑰加密

對稱密鑰加密 Symmetric Key Algorithm 又稱為對稱加密、私鑰加密、共享密鑰加密:這類演算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單的相互推算的密鑰,對稱加密的速度一般都很快。

  • 分組密碼

  • 分組密碼 Block Cipher 又稱為「分塊加密」或「塊加密」,將明文分成多個等長的模塊,使用確定的演算法和對稱密鑰對每組分別加密解密。這也就意味著分組密碼的一個優點在於可以實現同步加密,因為各分組間可以相對獨立。

    與此相對應的是流密碼:利用密鑰由密鑰流發生器產生密鑰流,對明文串進行加密。與分組密碼的不同之處在於加密輸出的結果不僅與單獨明文相關,而是與一組明文相關。

  • DES、3DES

  • 數據加密標准 DES Data Encryption Standard 是由IBM在美國國家安全局NSA授權下研製的一種使用56位密鑰的分組密碼演算法,並於1977年被美國國家標准局NBS公布成為美國商用加密標准。但是因為DES固定的密鑰長度,漸漸不再符合在開放式網路中的安全要求,已經於1998年被移出商用加密標准,被更安全的AES標准替代。

    DES使用的Feistel Network網路屬於對稱的密碼結構,對信息的加密和解密的過程極為相似或趨同,使得相應的編碼量和線路傳輸的要求也減半。

    DES是塊加密演算法,將消息分成64位,即16個十六進制數為一組進行加密,加密後返回相同大小的密碼塊,這樣,從數學上來說,64位0或1組合,就有2^64種可能排列。DES密鑰的長度同樣為64位,但在加密演算法中,每逢第8位,相應位會被用於奇偶校驗而被演算法丟棄,所以DES的密鑰強度實為56位。

    3DES Triple DES,使用不同Key重復三次DES加密,加密強度更高,當然速度也就相應的降低。

  • AES

  • 高級加密標准 AES Advanced Encryption Standard 為新一代數據加密標准,速度快,安全級別高。由美國國家標准技術研究所NIST選取Rijndael於2000年成為新一代的數據加密標准。

    AES的區塊長度固定為128位,密鑰長度可以是128位、192位或256位。AES演算法基於Substitution Permutation Network代換置列網路,將明文塊和密鑰塊作為輸入,並通過交錯的若干輪代換"Substitution"和置換"Permutation"操作產生密文塊。

    AES加密過程是在一個4*4的位元組矩陣(或稱為體State)上運作,初始值為一個明文區塊,其中一個元素大小就是明文區塊中的一個Byte,加密時,基本上各輪加密循環均包含這四個步驟:

  • ECC

  • ECC即 Elliptic Curve Cryptography 橢圓曲線密碼學,是基於橢圓曲線數學建立公開密鑰加密的演算法。ECC的主要優勢是在提供相當的安全等級情況下,密鑰長度更小。

    ECC的原理是根據有限域上的橢圓曲線上的點群中的離散對數問題ECDLP,而ECDLP是比因式分解問題更難的問題,是指數級的難度。而ECDLP定義為:給定素數p和橢圓曲線E,對Q=kP,在已知P,Q 的情況下求出小於p的正整數k。可以證明由k和P計算Q比較容易,而由Q和P計算k則比較困難。

  • 數字簽名

  • 數字簽名 Digital Signature 又稱公鑰數字簽名是一種用來確保數字消息或文檔真實性的數學方案。一個有效的數字簽名需要給接收者充足的理由來信任消息的可靠來源,而發送者也無法否認這個簽名,並且這個消息在傳輸過程中確保沒有發生變動。

    數字簽名的原理在於利用公鑰加密技術,簽名者將消息用私鑰加密,然後公布公鑰,驗證者就使用這個公鑰將加密信息解密並對比消息。一般而言,會使用消息的散列值來作為簽名對象。

② 確保Web安全的HTTPS

很多人說「不用HTTPS就是裸奔」

HTTP的不足:

通信使用明文(不加密),內容可能會被竊聽(wireshark/fiddler)

不驗證通信方的身份,因此有可能遭遇偽裝

無法證明報文的完整性,所以有可能已遭篡改

TCP/IP 是可能被竊聽的網路

1.通訊的加密:

SSL(Secure Socket Layer,安全套接層)或TLS(Transport Layer Security,安全層傳輸協議)

有興趣深入SSL/TLS: https://www.jianshu.com/p/3e5f01360827

用 SSL 建立安全通信線路之後,就可以在這條線路上進行 HTTP通信了。與 SSL 組合使用的 HTTP 被稱為 HTTPS(HTTP Secure,超文本傳輸安全協議)或 HTTP over SSL。

2.內容的加密:

為了做到有效的內容加密,前提是要求客戶端和伺服器同時具備加密和解密機制。主要應用在 Web 服務中。有一點必須引起注意,由於該方式不同於 SSL 或 TLS 將整個通信線路加密處理,所以內容仍有被篡改的風險。

不驗證通訊方的身份就可能遭遇偽裝

無法確定請求發送至目標的 Web 伺服器是否是按真實意圖返回響應的那台伺服器。有可能是已偽裝的 Web 伺服器。

無法確定響應返回到的客戶端是否是按真實意圖接收響應的那個客戶端。有可能是已偽裝的客戶端。

無法確定正在通信的對方是否具備訪問許可權。因為某些Web 伺服器上保存著重要的信息,只想發給特定用戶通信的許可權。

無法判定請求是來自何方、出自誰手。

無法證明報文的完整性,可能已遭篡改

如何防篡改?

可以使用MD5和SHA-1等散列演算法,但這仍然無法百分百保證結果的正確,因為散列碼如果同時被修改的話,用戶還是無法意識到文件已經被修改。還是用HTTPS吧。

HTTP+ 加密 + 認證 + 完整性保護=HTTPS

HTTP是身披SSL外殼的HTTP

相互交換密鑰的公開密鑰加密技術 :

共享密鑰加密的問題:

證明公開密鑰的正確性的證書:

也可以通過設置->高級->管理HTTPS證書來查看所有已經安裝的證書(chrome瀏覽器)

HTTPS的安全通信機制:

步驟 1: 客戶端通過發送 Client Hello 報文開始 SSL 通信。報文中包含客戶端支持的 SSL 的指定版本、加密組件(Cipher Suite)列表(所使用的加密演算法及密鑰長度等)。

步驟 2: 伺服器可進行 SSL 通信時,會以 Server Hello 報文作為應答。和客戶端一樣,在報文中包含 SSL 版本以及加密組件。伺服器的加密組件內容是從接收到的客戶端加密組件內篩選出來的。

步驟 3: 之後伺服器發送 Certificate 報文。報文中包含公開密鑰證書。

步驟 4: 最後伺服器發送 Server Hello Done 報文通知客戶端,最初階段的 SSL 握手協商部分結束。

步驟 5: SSL 第一次握手結束之後,客戶端以 Client Key Exchange 報文作為回應。報文中包含通信加密中使用的一種被稱為 Pre-mastersecret 的隨機密碼串。該報文已用步驟 3 中的公開密鑰進行加密。

步驟 6: 接著客戶端繼續發送 Change Cipher Spec 報文。該報文會提示伺服器,在此報文之後的通信會採用 Pre-master secret 密鑰加密。

步驟 7: 客戶端發送 Finished 報文。該報文包含連接至今全部報文的整體校驗值。這次握手協商是否能夠成功,要以伺服器是否能夠正確解密該報文作為判定標准。

步驟 8: 伺服器同樣發送 Change Cipher Spec 報文。

步驟 9: 伺服器同樣發送 Finished 報文。

步驟 10: 伺服器和客戶端的 Finished 報文交換完畢之後,SSL 連接就算建立完成。當然,通信會受到 SSL 的保護。從此處開始進行應用層協議的通信,即發送 HTTP 請求。

步驟 11: 應用層協議通信,即發送 HTTP 響應。

步驟 12: 最後由客戶端斷開連接。斷開連接時,發送 close_notify 報文。上圖做了一些省略,這步之後再發送 TCP FIN 報文來關閉與 TCP的通信。

問題:為何不完全使用非對稱加密演算法,而是使用非對稱加密演算法傳送密鑰,對稱加密演算法加密內容?(性能問題)

常見對稱加密演算法:AES/DES

常見非對稱加密演算法:RSA

對稱加密演算法和非對稱加密演算法速度對比:

https://blog.csdn.net/wowotuo/article/details/80295586

要進行 HTTPS 通信,證書是必不可少的。而使用的證書必須向認證機構(CA)購買。證書價格可能會根據不同的認證機構略有不同。通常,一年的授權需要數萬日元(現在一萬日元大約摺合 600人民幣)。

https不是只有信徒,google的霸道也引來了很多的反抗者~

1.chrome瀏覽器將非https站點默認標注為「不安全」的

2.SEO,不https就掐掉流量。。。

RSS 之父 Winer 炮轟 Google 反客為主強推 HTTPS:

https://www.oschina.net/news/97660/dave-winer-criticize-google

搭建一個https服務端:

https://www.jianshu.com/p/c59ea7d0230e

windows server上的一個簡單https例子(不想亂搞測試環境,就沒弄Linux):