Ⅰ 常見密碼技術簡介
##
密碼技術在網路傳輸安全上的應用
隨著互聯網電子商務和網路支付的飛速發展,互聯網安全已經是當前最重要的因素之一。作為一名合格的軟體開發工程師,有必要了解整個互聯網是如何來保證數據的安全傳輸的,本篇文章對網路傳輸安全體系以及涉及到的演算法知識做了一個簡要的介紹,希望大家能夠有一個初步的了解。
###密碼技術定義
簡單的理解,密碼技術就是編制密碼和破譯密碼的一門技術,也即是我們常說的加密和解密。常見的結構如圖:
其中涉及到的專業術語:
1.秘鑰:分為加密秘鑰和解密秘鑰,兩者相同的加密演算法稱為對稱加密,不同的稱為非對稱加密;
2.明文:未加密過的原文信息,不可以被泄露;
3.密文:經過加密處理後的信息,無法從中獲取有效的明文信息;
4.加密:明文轉成密文的過程,密文的長度根據不同的加密演算法也會有不同的增量;
5.解密:密文轉成明文的過程;
6.加密/解密演算法:密碼系統使用的加密方法和解密方法;
7.攻擊:通過截獲數據流、釣魚、木馬、窮舉等方式最終獲取秘鑰和明文的手段。
###密碼技術和我們的工作生活息息相關
在我們的日常生活和工作中,密碼技術的應用隨處可見,尤其是在互聯網系統上。下面列舉幾張比較有代表性的圖片,所涉及到的知識點後面都會一一講解到。
1.12306舊版網站每次訪問時,瀏覽器一般會提示一個警告,是什麼原因導致的? 這樣有什麼風險呢?
2.360瀏覽器瀏覽HTTPS網站時,點開地址欄的小鎖圖標會顯示加密的詳細信息,比如網路的話會顯示```AES_128_GCM、ECDHE_RSA```,這些是什麼意思?
3.在Mac系統的鑰匙串里有很多的系統根證書,展開後有非常多的信息,這些是做什麼用的?
4.去銀行開通網上支付都會附贈一個U盾,那U盾有什麼用呢?
##如何確保網路數據的傳輸安全
接下來我們從實際場景出發,以最常見的客戶端Client和服務端Server傳輸文件為例來一步步了解整個安全體系。
####1. 保密性
首先客戶端要把文件送到服務端,不能以明文形式發送,否則被黑客截獲了數據流很容易就獲取到了整個文件。也就是文件必須要確保保密性,這就需要用到對稱加密演算法。
** 對稱加密: **加密和解密所使用的秘鑰相同稱為對稱加密。其特點是速度快、效率高,適用於對較大量的數據進行加密。常見的對稱加密演算法有DES、3DES、AES、TDEA、RC5等,讓我們了解下最常見的3DES和AES演算法:
** DES(Data Encryption Standard): **1972年由美國IBM研製,數學原理是將明文以8位元組分組(不足8位可以有不同模式的填充補位),通過數學置換和逆置換得到加密結果,密文和明文長度基本相同。秘鑰長度為8個位元組,後有了更安全的一個變形,使用3條秘鑰進行三次加密,也就是3DES加密。
**3DES:**可以理解為對明文進行了三次DES加密,增強了安全程度。
** AES(Advanced Encryption Standard): **2001年由美國發布,2002年成為有效標准,2006年成為最流行的對稱加密演算法之一。由於安全程度更高,正在逐步替代3DES演算法。其明文分組長度為16位元組,秘鑰長度可以為16、24、32(128、192、256位)位元組,根據秘鑰長度,演算法被稱為AES-128、AES-192和AES-256。
對稱加密演算法的入參基本類似,都是明文、秘鑰和模式三個參數。可以通過網站進行模擬測試:[http://tool.chacuo.net/crypt3des]()。其中的模式我們主要了解下ECB和CBC兩種簡單模式,其它有興趣可自行查閱。
** ECB模式(Electronic Codebook Book): **這種模式是將明文分成若干小段,然後對每一段進行單獨的加密,每一段之間不受影響,可以單獨的對某幾段密文進行解密。
** CBC模式(Cipher Block Chaining): **這種模式是將明文分成若干小段,然後每一段都會和初始向量(上圖的iv偏移量)或者上一段的密文進行異或運算後再進行加密,不可以單獨解密某一斷密文。
** 填充補位: **常用為PKCS5Padding,規則為缺幾位就在後面補幾位的所缺位數。,比如明文數據為```/x01/x01/x01/x01/x01/x01```6個位元組,缺2位補```/x02```,補完位```/x01/x01/x01/x01/x01/x01/x02/x02```。解密後也會按照這個規則進行逆處理。需要注意的是:明文為8位時也需要在後面補充8個```/x08```。
####2. 真實性
客戶端有了對稱秘鑰,就需要考慮如何將秘鑰送到服務端,問題跟上面一樣:不能以明文形式直接傳輸,否則還是會被黑客截獲到。這里就需要用到非對稱加密演算法。
** 非對稱加密: **加密和解密秘鑰不同,分別稱為公開秘鑰(publicKey)和私有秘鑰(privateKey)。兩者成對出現,公鑰加密只能用私鑰解密,而私鑰加密也只能用公鑰加密。兩者不同的是:公鑰是公開的,可以隨意提供給任何人,而私鑰必須保密。特點是保密性好,但是加密速度慢。常見的非對稱加密演算法有RSA、ECC等;我們了解下常見的RSA演算法:
** RSA(Ron Rivest、Adi Shamir、Leonard Adleman): **1977年由麻省理工學院三人提出,RSA就是他們三個人的姓氏開頭字母拼在一起組成的。數學原理是基於大數分解。類似於```100=20x5```,如果只知道100的話,需要多次計算才可以試出20和5兩個因子。如果100改為極大的一個數,就非常難去試出真正的結果了。下面是隨機生成的一對公私鑰:
這是使用公鑰加密後結果:
RSA的這種特性就可以保證私鑰持有者的真實性,客戶端使用公鑰加密文件後,黑客就算截獲到數據因為沒有私鑰也是無法解密的。
** Tips: **
+** 不使用對稱加密,直接用RSA公私鑰進行加密和解密可以嗎? **
答案:不可以,第一是因為RSA加密速度比對稱加密要慢幾十倍甚至幾百倍以上,第二是因為RSA加密後的數據量會變大很多。
+** 由服務端生成對稱秘鑰,然後用私鑰加密,客戶端用公鑰解密這樣來保證對稱秘鑰安全可行嗎? **
答案:不可行,因為公鑰是公開的,任何一個人都可以拿到公鑰解密獲取對稱秘鑰。
####3. 完整性
當客戶端向服務端發送對稱秘鑰加密後的文件時,如果被黑客截獲,雖然無法解密得到對稱秘鑰。但是黑客可以用服務端公鑰加密一個假的對稱秘鑰,並用假的對稱秘鑰加密一份假文件發給服務端,這樣服務端會仍然認為是真的客戶端發送來的,而並不知道閱讀的文件都已經是掉包的了。
這個問題就需要用到散列演算法,也可以譯為Hash。常見的比如MD4、MD5、SHA-1、SHA-2等。
** 散列演算法(哈希演算法): **簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。而且該過程是不可逆的,無法通過摘要獲得原文。
** SHA-1(Secure Hash Algorithm 1): **由美國提出,可以生成一個20位元組長度的消息摘要。05年被發現了針對SHA-1的有效攻擊方法,已經不再安全。2010年以後建議使用SHA-2和SHA-3替代SHA-1。
** SHA-2(Secure Hash Algorithm 2): **其下又分為六個不同演算法標准:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA512/256。其後面數字為摘要結果的長度,越長的話碰撞幾率越小。SHA-224的使用如下圖:
客戶端通過上面的散列演算法可以獲取文件的摘要消息,然後用客戶端私鑰加密後連同加密的文件發給服務端。黑客截獲到數據後,他沒有服務端私鑰無法獲取到對稱秘鑰,也沒有客戶端私鑰無法偽造摘要消息。如果再像上面一樣去掉包文件,服務端收到解密得到摘要消息一對比就可以知道文件已經被掉包篡改過了。
這種用私鑰對摘要消息進行加密的過程稱之為數字簽名,它就解決了文件是否被篡改問題,也同時可以確定發送者身份。通常這么定義:
** 加密: **用公鑰加密數據時稱為加密。
** 簽名: **用私鑰加密數據時稱為簽名。
####4. 信任性
我們通過對稱加密演算法加密文件,通過非對稱加密傳輸對稱秘鑰,再通過散列演算法保證文件沒被篡改過和發送者身份。這樣就安全了嗎?
答案是否定的,因為公鑰是要通過網路送到對方的。在這期間如果出現問題會導致客戶端收到的公鑰並不一定是服務端的真實公鑰。常見的** 中間人攻擊 **就是例子:
** 中間人攻擊MITM(Man-in-the-MiddleAttack): **攻擊者偽裝成代理伺服器,在服務端發送公鑰證書時,篡改成攻擊者的。然後收到客戶端數據後使用攻擊者私鑰解密,再篡改後使用攻擊者私鑰簽名並且將攻擊者的公鑰證書發送給伺服器。這樣攻擊者就可以同時欺騙雙方獲取到明文。
這個風險就需要通過CA機構對公鑰證書進行數字簽名綁定公鑰和公鑰所屬人,也就是PKI體系。
** PKI(Privilege Management Infrastructure): **支持公鑰管理並能支持認證、加密、完整性和可追究性的基礎設施。可以說整個互聯網數據傳輸都是通過PKI體系進行安全保證的。
** CA(Certificate Authority): **CA機構就是負責頒發證書的,是一個比較公認的權威的證書發布機構。CA有一個管理標准:WebTrust。只有通過WebTrust國際安全審計認證,根證書才能預裝到主流的瀏覽器而成為一個全球可信的認證機構。比如美國的GlobalSign、VeriSign、DigiCert,加拿大的Entrust。我國的CA金融方面由中國人民銀行管理CFCA,非金融CA方面最初由中國電信負責建設。
CA證書申請流程:公司提交相應材料後,CA機構會提供給公司一張證書和其私鑰。會把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式寫到證書裡面,然後用一個指紋演算法計算出這些數字證書內容的一個指紋,並把指紋和指紋演算法用自己的私鑰進行加密。由於瀏覽器基本都內置了CA機構的根證書,所以可以正確的驗證公司證書指紋(驗簽),就不會有安全警告了。
但是:所有的公司其實都可以發布證書,甚至我們個人都可以隨意的去發布證書。但是由於瀏覽器沒有內置我們的根證書,當客戶端瀏覽器收到我們個人發布的證書後,找不到根證書進行驗簽,瀏覽器就會直接警告提示,這就是之前12306打開會有警告的原因。這種個人發布的證書,其實可以通過系統設置為受信任的證書去消除這個警告。但是由於這種證書機構的權威性和安全性難以信任,大家最好不要這么做。
我們看一下網路HTTPS的證書信息:
其中比較重要的信息:
簽發機構:GlobalSign Root CA;
有效日期:2018-04-03到2019-05-26之間可用;
公鑰信息:RSA加密,2048位;
數字簽名:帶 RSA 加密的 SHA-256 ( 1.2.840.113549.1.1.11 )
綁定域名:再進行HTTPS驗證時,如果當前域名和證書綁定域名不一致,也會出現警告;
URI:在線管理地址。如果當前私鑰出現了風險,CA機構可以在線吊銷該證書。
####5. 不可抵賴性
看起來整個過程都很安全了,但是仍存在一種風險:服務端簽名後拒不承認,歸咎於故障不履行合同怎麼辦。
解決方法是採用數字時間戳服務:DTS。
** DTS(digital time-stamp): **作用就是對於成功的電子商務應用,要求參與交易各方不能否認其行為。一般來說,數字時間戳產生的過程為:用戶首先將需要加時間戳的文件用Hash演算法運算形成摘要,然後將該摘要發送到DTS。DTS在加入了收到文件摘要的日期和事件信息後再對該文件進行數字簽名,然後送達用戶。
####6. 再次認證
我們有了數字證書保證了身份的真實性,又有了DTS提供的不可抵賴性。但是還是不能百分百確定使用私鑰的就是合法持有者。有可能出現被別人盜用私鑰進行交易的風險。
解決這個就需要用到強口令、認證令牌OTP、智能卡、U盾或生物特徵等技術對使用私鑰的當前用戶進行認證,已確定其合法性。我們簡單了解下很常見的U盾。
** USB Key(U盾): **剛出現時外形比較像U盤,安全性能像一面盾牌,取名U盾。其內部有一個只可寫不可讀的區域存儲著用戶的私鑰(也有公鑰證書),銀行同樣也擁有一份。當進行交易時,所有涉及到私鑰的運算都在U盾內部進行,私鑰不會泄露。當交易確認時,交易的詳細數據會顯示到U盾屏幕上,確認無誤後通過物理按鍵確認就可以成功交易了。就算出現問題黑客也是無法控制U盾的物理按鍵的,用戶可以及時取消避免損失。有的U盾裡面還有多份證書,來支持國密演算法。
** 國密演算法: **國家密碼局針對各種演算法制定了一些列國產密碼演算法。具體包括:SM1對稱加密演算法、SM2公鑰演算法、SM3摘要演算法、SM4對稱加密演算法、ZUC祖沖之演算法等。這樣可以對國產固件安全和數據安全進行進一步的安全控制。
## HTTPS分析
有了上面的知識,我們可以嘗試去分析下HTTPS的整個過程,用Wireshark截取一次HTTPS報文:
Client Hello: 客戶端發送Hello到服務端443埠,裡麵包含了隨機數、客戶端支持的加密演算法、客戶端的TLS版本號等;
Server Hello: 服務端回應Hello到客戶端,裡麵包含了服務端選擇的加密套件、隨機數等;
Certificate: 服務端向客戶端發送證書
服務端計算對稱秘鑰:通過ECDH演算法得到對稱秘鑰
客戶端計算對稱秘鑰:通過ECDH演算法得到對稱秘鑰
開始用對稱秘鑰進行加密傳輸數據
其中我們又遇到了新的演算法:DH演算法
** DH(Diffie-Hellman): **1976年由Whitefield與Martin Hellman提出的一個奇妙的秘鑰交換協議。這個機制的巧妙在於可以通過安全的方式使雙方獲得一個相同的秘鑰。數學原理是基於原根的性質,如圖:
*** DH演算法的用處不是為了加密或解密消息,而是用於通信雙方安全的交換一個相同的秘鑰。 ***
** ECDH: **基於ECC(橢圓曲線密碼體制)的DH秘鑰交換演算法,數學原理是基於橢圓曲線上的離散對數問題。
** ECDHE: **字面少了一個E,E代表了臨時。在握手流程中,作為伺服器端,ECDH使用證書公鑰代替Pb,使用自身私鑰代替Xb。這個演算法時伺服器不發送server key exchange報文,因為發送certificate報文時,證書本身就包含了Pb信息。
##總結
| 演算法名稱 | 特點 | 用處 | 常用演算法名 |
| --- | :--- | :---: | ---: |
| 對稱加密 | 速度快,效率高| 用於直接加密文件 | 3DES、AES、RC4 |
| 非對稱加密 | 速度相對慢,但是確保安全 | 構建CA體系 | RSA、ECC |
| 散列演算法 | 算出的摘要長度固定,不可逆 | 防止文件篡改 | SHA-1、SHA-2 |
| DH演算法 | 安全的推導出對稱秘鑰 | 交換對稱秘鑰 | ECDH |
----
Ⅱ 加密方式有幾種
加密方式的種類:
1、MD5
一種被廣泛使用的密碼散列函數,可以產生出一個128位(16位元組)的散列值(hash value),用於確保信息傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於1992年公開,用以取代MD4演算法。這套演算法的程序在 RFC 1321 標准中被加以規范。
2、對稱加密
對稱加密採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
3、非對稱加密
與對稱加密演算法不同,非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密。
如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。
(2)加密演算法圖片大全擴展閱讀
非對稱加密工作過程
1、乙方生成一對密鑰(公鑰和私鑰)並將公鑰向其它方公開。
2、得到該公鑰的甲方使用該密鑰對機密信息進行加密後再發送給乙方。
3、乙方再用自己保存的另一把專用密鑰(私鑰)對加密後的信息進行解密。乙方只能用其專用密鑰(私鑰)解密由對應的公鑰加密後的信息。
在傳輸過程中,即使攻擊者截獲了傳輸的密文,並得到了乙的公鑰,也無法破解密文,因為只有乙的私鑰才能解密密文。
同樣,如果乙要回復加密信息給甲,那麼需要甲先公布甲的公鑰給乙用於加密,甲自己保存甲的私鑰用於解密。
Ⅲ 常見密碼演算法原理
PBKDF2(Password-Based Key Derivation Function)是一個用來導出密鑰的函數,用來生成加密的密碼,增加破解的難度,類似bcrypt/scrypt等,可以用來進行密碼或者口令的加密存儲。主要是鹽值+pwd,經過多輪HMAC演算法的計算,產生的密文。
PBKDF2函數的定義
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
• PRF是一個偽隨機函數,例如HASH_HMAC函數,它會輸出長度為hLen的結果。
• Password是用來生成密鑰的原文密碼。
• Salt是一個加密用的鹽值。
• c是進行重復計算的次數。
• dkLen是期望得到的密鑰的長度。
• DK是最後產生的密鑰。
https://segmentfault.com/a/1190000004261009
下面我們以Alice和Bob為例敘述Diffie-Hellman密鑰交換的原理。
1,Diffie-Hellman交換過程中涉及到的所有參與者定義一個組,在這個組中定義一個大質數p,底數g。
2,Diffie-Hellman密鑰交換是一個兩部分的過程,Alice和Bob都需要一個私有的數字a,b。
下面是DH交換的過程圖:
本圖片來自wiki
下面我們進行一個實例
1.愛麗絲與鮑伯協定使用p=23以及g=5.
2.愛麗絲選擇一個秘密整數a=6, 計算A = g^a mod p並發送給鮑伯。
A = 5^6 mod 23 = 8.
3.鮑伯選擇一個秘密整數b=15, 計算B = g^b mod p並發送給愛麗絲。
B = 5^15 mod 23 = 19.
4.愛麗絲計算s = B a mod p
19^6 mod 23 = 2.
5.鮑伯計算s = A b mod p
8^15 mod 23 = 2.
ECDH:
ECC演算法和DH結合使用,用於密鑰磋商,這個密鑰交換演算法稱為ECDH。交換雙方可以在不共享任何秘密的情況下協商出一個密鑰。ECC是建立在基於橢圓曲線的離散對數問題上的密碼體制,給定橢圓曲線上的一個點P,一個整數k,求解Q=kP很容易;給定一個點P、Q,知道Q=kP,求整數k確是一個難題。ECDH即建立在此數學難題之上。密鑰磋商過程:
假設密鑰交換雙方為Alice、Bob,其有共享曲線參數(橢圓曲線E、階N、基點G)。
來自 http://www.cnblogs.com/fishou/p/4206451.html
https://zh.wikipedia.org/wiki/SHA%E5%AE%B6%E6%97%8F
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
-----END RSA PRIVATE KEY-----
while a RSA public key contains only the following data:
-----BEGIN RSA PUBLIC KEY-----
RSAPublicKey ::= SEQUENCE {
molus INTEGER, -- n
publicExponent INTEGER -- e
}
-----END RSA PUBLIC KEY-----
and this explains why the private key block is larger.
Note that a more standard format for non-RSA public keys is
-----BEGIN PUBLIC KEY-----
PublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
PublicKey BIT STRING
}
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
-----END PUBLIC KEY-----
More info here.
BTW, since you just posted a screenshot of the private key I strongly hope it was just for tests :)
密鑰的長度
C:\herong>java RsaKeyGenerator 128
p: 17902136406704537069
q: 17902136406704537077
m:
Molus:
Key size: 128
Public key:
Private key:
C:\herong>java RsaKeyGenerator 256
p:
q:
m: ...
Molus: ...
Key size: 256
Public key: ...
Private key: ...
https://security.stackexchange.com/questions/90169/rsa-public-key-and-private-key-lengths
https://stackoverflow.com/questions/2921508/trying-to-understand-java-rsa-key-size >
http://www.herongyang.com/Cryptography/RSA-BigInteger-Keys-Generated-by-RsaKeyGenerator-java.html
update() adds data to the Cipher』s internal buffer, then returns all currently completely encoded blocks. If there are any encoded blocks left over, they remain in the Cipher』s buffer until the next call, or a call to doFinal(). This means that if you call update() with a four byte array to encrypt, and the buffer size is eight bytes, you will not receive encoded data on the return (you』ll get a null instead). If your next call to update() passes five bytes of data in, you will get an 8 byte (the block size) array back, containing the four bytes passed in on the previous call, the first four bytes from the current call – the remaining byte from the current call is left in the Cipher』s buffer.
doFinal() on the other hand is much simpler: it encrypts the passed data, pads it out to the necessary length, and then returns it. The Cipher is essentially stateless.
來自 https://segmentfault.com/a/1190000006931511
DH演算法的中間人攻擊
在最初的描述中,迪菲-赫爾曼密鑰交換本身並沒有提供通訊雙方的身份驗證服務,因此它很容易受到中間人攻擊。 一個中間人在信道的中央進行兩次迪菲-赫爾曼密鑰交換,一次和Alice另一次和Bob,就能夠成功的向Alice假裝自己是Bob,反之亦然。而攻擊者可以解密(讀取和存儲)任何一個人的信息並重新加密信息,然後傳遞給另一個人。因此通常都需要一個能夠驗證通訊雙方身份的機制來防止這類攻擊。
優缺點:
1、 僅當需要時才生成密鑰,減小了將密鑰存儲很長一段時間而致使遭受攻擊的機會。
2、 除對全局參數的約定外,密鑰交換不需要事先存在的基礎結構。
然而,該技術也存在許多不足:
1、 沒有提供雙方身份的任何信息。
2、 它是計算密集性的,因此容易遭受阻塞性攻擊,即對手請求大量的密鑰。受攻擊者花費了相對多的計算資源來求解無用的冪系數而不是在做真正的工作。
3、 沒辦法防止重演攻擊。
4、 容易遭受中間人的攻擊。第三方C在和A通信時扮演B;和B通信時扮演A。A和B都與C協商了一個密鑰,然後C就可以監聽和傳遞通信量。中間人的攻擊按如下進行:
(1) B在給A的報文中發送他的公開密鑰。
(2) C截獲並解析該報文。C將B的公開密鑰保存下來並給A發送報文,該報文具有B的用戶ID但使用C的公開密鑰YC,仍按照好像是來自B的樣子被發送出去。A收到C的報文後,將YC和B的用戶ID存儲在一塊。類似地,C使用YC向B發送好像來自A的報文。
(3) B基於私有密鑰XB和YC計算秘密密鑰K1。A基於私有密鑰XA和YC計算秘密密鑰K2。C使用私有密鑰XC和YB計算K1,並使用XC和YA計算K2。
(4) 從現在開始,C就可以轉發A發給B的報文或轉發B發給A的報文,在途中根據需要修改它們的密文。使得A和B都不知道他們在和C共享通信。
Ⅳ 十大常見密碼加密方式
一、密鑰散列
採用MD5或者SHA1等散列演算法,對明文進行加密。嚴格來說,MD5不算一種加密演算法,而是一種摘要演算法。無論多長的輸入,MD5都會輸出一個128位(16位元組)的散列值。而SHA1也是流行的消息摘要演算法,它可以生成一個被稱為消息摘要的160位(20位元組)散列值。MD5相對SHA1來說,安全性較低,但是速度快;SHA1和MD5相比安全性高,但是速度慢。
二、對稱加密
採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密。對稱加密演算法中常用的演算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
三、非對稱加密
非對稱加密演算法是一種密鑰的保密方法,它需要兩個密鑰來進行加密和解密,這兩個密鑰是公開密鑰和私有密鑰。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。非對稱加密演算法有:RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)。
四、數字簽名
數字簽名(又稱公鑰數字簽名)是只有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。它是一種類似寫在紙上的普通的物理簽名,但是在使用了公鑰加密領域的技術來實現的,用於鑒別數字信息的方法。
五、直接明文保存
早期很多這樣的做法,比如用戶設置的密碼是「123」,直接就將「123」保存到資料庫中,這種是最簡單的保存方式,也是最不安全的方式。但實際上不少互聯網公司,都可能採取的是這種方式。
六、使用MD5、SHA1等單向HASH演算法保護密碼
使用這些演算法後,無法通過計算還原出原始密碼,而且實現比較簡單,因此很多互聯網公司都採用這種方式保存用戶密碼,曾經這種方式也是比較安全的方式,但隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。
七、特殊的單向HASH演算法
由於單向HASH演算法在保護密碼方面不再安全,於是有些公司在單向HASH演算法基礎上進行了加鹽、多次HASH等擴展,這些方式可以在一定程度上增加破解難度,對於加了「固定鹽」的HASH演算法,需要保護「鹽」不能泄露,這就會遇到「保護對稱密鑰」一樣的問題,一旦「鹽」泄露,根據「鹽」重新建立彩虹表可以進行破解,對於多次HASH,也只是增加了破解的時間,並沒有本質上的提升。
八、PBKDF2
該演算法原理大致相當於在HASH演算法基礎上增加隨機鹽,並進行多次HASH運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。
九、BCrypt
BCrypt 在1999年就產生了,並且在對抗 GPU/ASIC 方面要優於 PBKDF2,但是我還是不建議你在新系統中使用它,因為它在離線破解的威脅模型分析中表現並不突出。
十、SCrypt
SCrypt 在如今是一個更好的選擇:比 BCrypt設計得更好(尤其是關於內存方面)並且已經在該領域工作了 10 年。另一方面,它也被用於許多加密貨幣,並且我們有一些硬體(包括 FPGA 和 ASIC)能實現它。 盡管它們專門用於采礦,也可以將其重新用於破解。
Ⅳ 數字加密方法
數字加密方法:將該數每一位上的數字加9,然後除以10取余,做為該位上的新數字,最後將第1位和第3位上的數字互換,第2位和第4位上的數字互換,組成加密後的新數。
數據加密演算法是一種對稱加密演算法,是使用最廣泛的密鑰系統,特別是在保護金融數據的安全中;密碼演算法是加密演算法和解密演算法的統稱,它是密碼體制的核心,密碼演算法可以看成一些交換的組合,當輸入為明文時,經過這些變換,輸出就為密文,此過程為加密演算法。
數字加密標准(DES)
對每個64位的數據塊採用56位密鑰。加密的過程可以用若干種模式進行操作包括16次循環或操作。雖然它被認為是「強」加密,許多公司使用三個密鑰,「三重數字加密標准(DES)」。這並不是說,DES加密信息不能被破解。早在1997年,另一個加密方法公鑰加密演算法(Rivest-Shamir-Adleman)的擁有人懸賞一萬美元來破解數字加密標准信息。
Ⅵ 密鑰加密方法有哪些 密鑰加密方法介紹【詳解】
密鑰加密方法大全
密鑰加密技術用於加密和解密數據。密鑰是與加密演算法一起用於加密某些輸入(稱為明文)的值。輸出稱為密文。密鑰本質上是非常非常大的數。密鑰的尺寸用位(bit)來衡量,1024位密鑰代表的數是非常巨大的。在公開密鑰加密方法中,密鑰的尺寸越大,密文就越安全。假定有相同的輸入和相同的演算法,不同的密鑰會生成不同的密文。
有兩種大量使用的密鑰加密技術:私用密鑰(對稱加密)和公共密鑰(非對稱加密)。
對稱密鑰加密,又稱私鑰加密,即信息的發送方和接收方用一個密鑰去加密和解密數據。它的最大優勢是加/解密速度快,適合於對大數據量進行加密,但密鑰管理困難。
使用對稱加密技術將簡化加密的處理,每個參與方都不必彼此研究和交換專用設備的加密演算法,而是採用相同的加密演算法並只交換共享的專用密鑰。如侍渣果進行通信的雙方能夠確保專用密鑰在密鑰交換階段未曾泄露,那麼機密性和團明報文完整性就可以通過使用對稱加密方法對機密信息進行加密以及通過隨報文一起發送報文摘要或報文散列值來實現。
非對稱密鑰加密,又稱公共密鑰加密技術(Public Key Cryptography)是基於特地功能的數學演算法。使用一個特定的公式來創建數學上相關聯的兩個密鑰(key),但是,兩個密鑰之間不能推導出對方。一個密鑰被用於加密信息,生成密文,另一個密鑰用於解密信息,生成明文。然而,原始的密鑰不能用於解密密文,因此,這種類型的加密技術被稱為非對稱的加密技術。公鑰機制靈活,但加密老或悄和解密速度卻比對稱密鑰加密慢得多。
在非對稱加密體系中,密鑰被分解為一對。這對密鑰中的任何一把都可作為公開密鑰(加密密鑰)通過非保密方式向他人公開,而另一把則作為私用密鑰(解密密鑰)加以保存。私用密鑰只能由生成密鑰對的貿易方掌握,公開密鑰可廣泛發布。
Ⅶ 請哪位大神告知下磁碟加密的技術原理如何實現的呢
我們以AES加密舉例
AES簡介
高級加密標准(AES,Advanced Encryption Standard)為最常見的對稱加密演算法(微信小程序加密傳輸就是用這個加密演算法的)。對稱加密演算法也就是加密和解密用相同的密鑰,具體的加密流程如下圖: