非對稱加密,加密與解密使用的密鑰不是同一密鑰,對中一個對外公開,稱爲公鑰,另外一個只有全部者知道,稱爲私鑰。用公鑰加密的信息只有私鑰才能解開,反之,用私鑰加密的信息只有公鑰才能解開(簽名驗籤)表明:RSA算法。速度慢,適合少許數據加密。對稱加密算法不能實現簽名,所以簽名只能非對稱算法。 非對稱加密是一種比對稱加密更加優秀的加密算法,固然算法有利有弊,對稱加密速度快可是安全性相對於非對稱加密來講低,爲何呢,你想啊,要想使用對稱加密,那麼分享信息的各個個體之間都須要分享這個密鑰,好比大家1000我的之間都使用同一個密鑰進行密文傳輸,只要其中一我的密鑰被盜竊了,那麼總體加密的信息將都被破解了。好了,那麼咱們開始說說非對稱加密。就從上面提到的這個對稱加密的缺點開始,怎麼作到即時一我的的密鑰被盜竊了,最起碼保證你給其餘人發送密文不被破解。因而,人們就想出了這麼個辦法,首先,咱們中止分享共同的密鑰,由於上面的bug就是來源於共享一個密鑰,那麼怎麼辦呢?每一個人生成一個「私鑰-公鑰」對,這個私鑰須要每一個人自行進行保護!公鑰能夠隨便分享,後面詳細說,同時,生成的這個「私鑰-公鑰」對還有個強大的功能就是,使用私鑰加密的信息,只能由該私鑰對應的公鑰才能解密,使用公鑰加密的信息,只能由該公鑰對應的私鑰才能解密!好了,好比說張三生成了他本身的一個「私鑰-公鑰」對,叫作「張三私鑰-張三公鑰」,李四生成了他本身的一個「私鑰-公鑰」對,叫作「李四私鑰-李四公鑰」,以前咱們說過私鑰要每一個個體本身進行保存,公鑰能夠隨便分享,目的是爲何呢?是爲了加密信息! 好比,李四想給張三發送密文。 李四:「hi哥們,我想給你發個密文,把你的公鑰給我發過來用用。」 張三:「沒問題的,這是個人公鑰: d#8yHE8eU#hb*!neb,用這個公鑰加密你的信息後給我發過來吧」 李四:「這是我想對你說的話: *&#@uehuu(**#eehu&$##bfeu&&」 恩?你是否是有點疑問呢?咳咳,李四這是做死的節奏?爲何公開問公鑰?不怕被網警查水錶?哈哈,非對稱解密算法的威力就在這裏!無所謂!隨便誰截取!咱們上面說了,公鑰能夠隨意分發,因此即便別人截取了,也只是知道該公鑰而已,可是要是想解密使用該公鑰加密的密文!只有一我的能夠辦獲得!就是張三! 爲何?李四使用張三的公鑰加密的信息,只有張三的公鑰所對應的私鑰,這裏就是「張三私鑰」,該私鑰才能夠解密!因此,沒有張三私鑰的第三方即時截取了這些密文,也破解不了!或者更嚴格的說在有限時間內好比說幾千年內是暴力破解不出的! 咱們來看看非對稱加密的官方定義: 公開密鑰加密(英語:public-key cryptography,又譯爲公開密鑰加密),也稱爲非對稱加密(asymmetric cryptography),一種密碼學算法類型,在這種密碼學方法中,須要一對密鑰(其實這裏密鑰說法很差,就是「鑰」),一個是私人密鑰,另外一個則是公開密鑰。這兩個密鑰是數學相關,用某用戶密鑰加密後所得的信息,只能用該用戶的解密密鑰才能解密。若是知道了其中一個,並不能計算出另一個。所以若是公開了一對密鑰中的一個,並不會危害到另一個的祕密性質。稱公開的密鑰爲公鑰;不公開的密鑰爲私鑰。這個定義有點繞,不過就是說,要想使用非對稱加密算法,首先要有一對key,一個被稱爲private key私鑰,一個成爲public key公鑰,而後能夠把你的public key分發給想給你傳密文的用戶,而後用戶使用該public key加密過得密文,只有使用你的private key才能解密,也就是說,只要你本身保存好你的private key,就能確保,別人想給你發的密文不被破解,因此你不用擔憂別人的密鑰被盜,不要緊。正由於,這種加密是單向的,因此被稱爲非對稱加密算法。 這種加密算法應用很是普遍,SSH, HTTPS, TLS,電子證書,電子簽名,電子身份證等等。 RSA算法很是簡單,概述以下: 找兩素數p和q 取n=p*q 取t=(p-1)*(q-1) 取任何一個數e,要求知足e<t而且e與t互素(就是最大公因數爲1) 取d*e%t==1 這樣最終獲得三個數: n d e 設消息爲數M (M <n) 設c=(M**d)%n就獲得了加密後的消息c 設m=(c**e)%n則 m == M,從而完成對c的解密。 注:**表示次方,上面兩式中的d和e能夠互換。 在對稱加密中: n d兩個數構成公鑰,能夠告訴別人; n e兩個數構成私鑰,e本身保留,不讓任何人知道。 給別人發送的信息使用e加密,只要別人能用d解開就證實信息是由你發送的,構成了簽名機制。別人給你發送信息時使用d加密,這樣只有擁有e的你可以對其解密。 rsa的安全性在於對於一個大數n,沒有有效的方法可以將其分解,從而在已知n d的狀況下沒法得到e;一樣在已知n e的狀況下沒法求得d。 **下面看一個很是經典的漫畫圖示**: 數字簽名是什麼?
1git
鮑勃有兩把鑰匙,一把是公鑰,另外一把是私鑰。
2算法
鮑勃把公鑰送給他的朋友們----帕蒂、道格、蘇珊----每人一把。瀏覽器
3安全
蘇珊給鮑勃寫信,寫完後用鮑勃的公鑰加密,達到保密的效果。
4服務器
鮑勃收信後,用私鑰解密,看到信件內容。網絡
5函數
鮑勃給蘇珊回信,寫完後用Hash函數,生成信件的摘要(digest)。工具
6編碼
而後,鮑勃使用私鑰,對這個摘要加密,生成"數字簽名"(signature)。加密
7
鮑勃將這個簽名,附在信件下面,一塊兒發給蘇珊。
8
蘇珊收信後,取下數字簽名,用鮑勃的公鑰解密,獲得信件的摘要。由此證實,這封信確實是鮑勃發出的。
9
蘇珊再對信件自己使用Hash函數,將獲得的結果,與上一步獲得的摘要進行對比。若是二者一致,就證實這封信未被修改過。
下面的圖你能夠選擇不看,若是你感受能理解的話就繼續看
10.
複雜的狀況出現了。道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用本身的公鑰換走了鮑勃的公鑰。所以,他就能夠冒充鮑勃,寫信給蘇珊。
11.
蘇珊發現,本身沒法肯定公鑰是否真的屬於鮑勃。她想到了一個辦法,要求鮑勃去找"證書中心"(certificate authority,簡稱CA),爲公鑰作認證。證書中心用本身的私鑰,對鮑勃的公鑰和一些相關信息一塊兒加密,生成"數字證書"(Digital Certificate)。
12.
鮑勃拿到數字證書之後,就能夠放心了。之後再給蘇珊寫信,只要在簽名的同時,再附上數字證書就好了。
13.
蘇珊收信後,用CA的公鑰解開數字證書,就能夠拿到鮑勃真實的公鑰了,而後就能證實"數字簽名"是否真的是鮑勃籤的。
14.
下面,咱們看一個應用"數字證書"的實例:https協議。這個協議主要用於網頁加密。
15.
首先,客戶端向服務器發出加密請求。
16.
服務器用本身的私鑰加密網頁之後,連同自己的數字證書,一塊兒發送給客戶端。
17.
客戶端(瀏覽器)的"證書管理器",有"受信任的根證書頒發機構"列表。客戶端會根據這張列表,查看解開數字證書的公鑰是否在列表以內。
18.
若是數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告。
19.
若是這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另外一種警告。
20.
數字證書若是是可靠的,客戶端就可使用證書中的服務器公鑰,對信息進行加密,而後與服務器交換加密信息。
在簽名的過程當中,有一點很關鍵,收到數據的一方,須要本身保管好公鑰,可是要知道每個發送方都有一個公鑰,那麼接收數據的人須要保存很是多的公鑰,這根本就管理不過來。而且本地保存的公鑰有可能被篡改替換,無從發現。怎麼解決這一問題了?由一個統一的證書管理機構來管理全部須要發送數據方的公鑰,對公鑰進行認證和加密。這個機構也就是咱們常說的CA。認證加密後的公鑰,便是證書,又稱爲CA證書,證書中包含了不少信息,最重要的是申請者的公鑰。 CA機構在給公鑰加密時,用的是一個統一的密鑰對,在加密公鑰時,用的是其中的私鑰。這樣,申請者拿到證書後,在發送數據時,用本身的私鑰生成簽名,將簽名、證書和發送內容一塊兒發給對方,對方拿到了證書後,須要對證書解密以獲取到證書中的公鑰,解密須要用到CA機構的」統一密鑰對「中的公鑰,這個公鑰也就是咱們常說的CA根證書,一般須要咱們到證書頒發機構去下載並安裝到相應的收取數據的客戶端,如瀏覽器上面。這個公鑰只須要安裝一次。有了這個公鑰以後,就能夠解密證書,拿到發送方的公鑰,而後解密發送方發過來的簽名,獲取摘要,從新計算摘要,做對比,以驗證數據內容的完整性。
總結:
(1)信息 + HASH = 摘要 摘要 + 私鑰 = 數字簽名(給收方作對比用的,驗證收發內容是否一致)
(2)公鑰 + 相關信息 + CA私鑰 = 數字證書(驗證發送者是否正確,是可信任的公鑰) 用於我發保密信息給你以前,你得讓我相信真的是「你」讓我「這麼作」的。
(3)、非對稱加密算法
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,須要加密的文件塊的長度也是可變的; DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準); ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。 ECC和RSA相比,在許多方面都有對絕對的優點,主要體如今如下方面: 抗攻擊性強。相同的密鑰長度,其抗攻擊性要強不少倍。 計算量小,處理速度快。ECC總的速度比RSA、DSA要快得多。 存儲空間佔用小。ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多,意味着它所佔的存貯空間要小得多。這對於加密算法在IC卡上的應用具備特別重要的意義。 帶寬要求低。當對長消息進行加解密時,三類密碼系統有相同的帶寬要求,但應用於短消息時ECC帶寬要求卻低得多。帶寬要求低使ECC在無線網絡領域具備普遍的應用前景。 一、每一個用戶擁用一對密鑰加密:公鑰和私鑰。 二、公鑰加密,私鑰解密;私鑰加密,公鑰解密。 三、公鑰傳輸的過程不安全,易被竊取和替換。 四、因爲公鑰使用的密鑰長度很是長,因此公鑰加密速度很是慢,通常不使用其去加密。 五、某一個用戶用其私鑰加密,其餘用戶用其公鑰解密,實現數字簽名的做用。 六、公鑰加密的另外一個做用是實現密鑰交換。 七、加密和簽名算法:RSA、ELGamal。 八、公鑰簽名算法:DSA。 九、加密工具:gpg、openssl
(4)、對稱加密算法
經常使用的算法包括: DES(Data Encryption Standard):數據加密標準,速度較快,適用於加密大量數據的場合。 3DES(Triple DES):是基於DES,對一塊數據用三個不一樣的密鑰進行三次加密,強度更高。 AES(Advanced Encryption Standard):高級加密標準,是下一代的加密算法標準,速度快,安全級別高; 一、加密方和解密方使用同一個密鑰。 二、加密解密的速度比較快,適合數據比較長時的使用。 三、密鑰傳輸的過程不安全,且容易被破解,密鑰管理也比較麻煩。 四、加密算法:DES(Data Encryption Standard)、3DES、AES(Advanced Encryption Standard,支持12八、19二、25六、512位密鑰的加密)、Blowfish。 五、加密工具:openssl、gpg(pgp工具) 因爲非對稱加密算法的運行速度比對稱加密算法的速度慢不少,當咱們須要加密大量的數據時,建議採用對稱加密算法,提升加解密速度。
對稱加密算法不能實現簽名,所以簽名只能非對稱算法。
因爲對稱加密算法的密鑰管理是一個複雜的過程,密鑰的管理直接決定着他的安全性,所以當數據量很小時,咱們能夠考慮採用非對稱加密算法。 在實際的操做過程當中,咱們一般採用的方式是:採用非對稱加密算法管理對稱算法的密鑰,而後用對稱加密算法加密數據,這樣咱們就集成了兩類加密算法的優勢,既實現了加密速度快的優勢,又實現了安全方便管理密鑰的優勢。
(5)、單向加密(散列算法)
散列是信息的提煉,一般其長度要比信息小得多,且爲一個固定長度。加密性強的散列必定是不可逆的,這就意味着經過散列結果,沒法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將致使散列結果的明顯變化,這稱之爲雪崩效應。散列還應該是防衝突的,即找不出具備相同散列結果的兩條信息。具備這些特性的散列結果就能夠用於驗證信息是否被修改。 單向散列函數通常用於產生消息摘要,密鑰加密等,常見的有: 一、MD5(Message Digest Algorithm 5) 是RSA數據安全公司開發的一種單向散列算法,非可逆,相同的明文產生相同的密文。 二、SHA(Secure Hash Algorithm) 能夠對任意長度的數據運算生成一個160位的數值; SHA-1與MD5的比較 由於兩者均由MD4導出,SHA-1和MD5彼此很類似。相應的,他們的強度和其餘特性也是類似,但還有如下幾點不一樣: 一、對強行供給的安全性:最顯著和最重要的區別是SHA-1摘要比MD5摘要長32 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD5是2128數量級的操做,而對SHA-1則是2160數量級的操做。這樣,SHA-1對強行攻擊有更大的強度。 二、對密碼分析的安全性:因爲MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。 三、速度:在相同的硬件上,SHA-1的運行速度比MD5慢。 四、特徵:雪崩效應、定長輸出和不可逆。 五、做用是:確保數據的完整性。 六、加密算法:md5(標準密鑰長度128位)、sha1(標準密鑰長度160位)、md四、CRC-32 七、加密工具:md5sum、sha1sum、openssl dgst。 八、計算某個文件的hash值,例如:md5sum/shalsum FileName,openssl dgst –md5/-sha1