最近做乙個專案涉及到rsa加密解密,看了很多文章大概總結了一下,加密解密的原理和常見的一些加密演算法。
1.摘要演算法
常用的摘要演算法有md5,sha1。摘要演算法是乙個不可逆過程,就是無論多大資料,經過演算法運算後都是生成固定長度的資料,一般結果使用16進製制進行顯示。
md5和sha1的區別:md5結果是128位摘要,sha1是160位摘要。那麼md5的速度更快,而sha1的強度更高。
下面統一使用md5演算法進行說明,sha1類似。
主要用途有:驗證訊息完整性,安全訪問認證,資料簽名。
訊息完整性:由於每乙份資料生成的md5值不一樣,因此傳送資料時可以將資料和其md5值一起傳送,然後就可以用md5驗證資料是否丟失、修改。在下文中對資料內容的完整性就是通過比較傳送內容的md5和接收到的內容的md5是否一樣判斷其完整性。
安全訪問認證:這是使用了演算法的不可逆性質,(就是無法從md5值中恢復原資料)對賬號登陸的密碼進行md5運算然後儲存,這樣可以保證除了使用者之外,即使資料庫管理人員都無法得知使用者的密碼。
數字簽名:這是結合非對稱加密演算法和ca證書的一種使用場景。
一般破解方法:字典法,就是將常用密碼生成md5值字典,然後反向查詢達到破解目的,因此建議使用強密碼
2.對稱加密演算法
對稱加密演算法只是為了區分非對稱加密演算法。其中鮮明的特點是對稱加密是加密解密使用相同的金鑰,而非對稱加密加密和解密時使用的金鑰不一樣。對於大部分情況我們都使用對稱加密,而對稱加密的金鑰交換時使用非對稱加密,這有效保護金鑰的安全。非對稱加密加密和解密金鑰不同,那麼它的安全性是無疑最高的,但是它加密解密的速度很慢,不適合對大資料加密。而對稱加密加密速度快,因此混合使用最好。
常用的對稱加密演算法有:aes和des.
des:比較老的演算法,一共有三個引數入口(原文,金鑰,加密模式)。而3des只是des的一種模式,是以des為基礎更安全的變形,對資料進行了三次加密,也是被指定為aes的過渡演算法。
aes:高階加密標準,新一代標準,加密速度更快,安全性更高(不用說優先選擇
3.非對稱加密(rsa)
這裡主要對rsa進行介紹。
對稱加密加密解密使用的是相同的金鑰,而非對稱加密加密解密時使用的不同的金鑰,分為公鑰(public key)和私鑰(private key).公鑰可以公開,而私鑰自己儲存。它利用的是兩個大質數相乘十分容易,而對其乘積進行因素分解十分困難。這樣就可以將乘積作為金鑰了,這個乘積為n值,根據兩個大質數選擇e和生成d,刪掉兩個大質數。這樣(n,e)為公鑰,(n,d)為私鑰,公鑰無法破解出私鑰(不作詳細介紹,我們不是研究演算法的)。由於非對稱加密的金鑰生成麻煩,所以無法做到一次一密,而且其加密速度很慢,無法對大量資料加密。因此最常用的使用場景就是數字簽名和密碼傳輸,用作數字簽名時使用私鑰加密,公鑰解密;用作加密解密時,使用公鑰加密,私鑰解密。
下面這篇文章對這三個演算法都做了詳細的介紹,想要深入了解的可以看看:
資料傳輸安全的要滿足的要求:
訊息的傳送方能夠確定訊息只有預期的接收方可以解密(不保證第三方無法獲得,但保證第三方無法解密)。
訊息的接收方可以確定訊息是由誰傳送的(訊息的接收方可以確定訊息的傳送方)。
訊息的接收方可以確定訊息在途中沒有被篡改過(必須確認訊息的完整性)。
對稱加密
網路的資料傳輸從傳送方發出到接收方接收到,要經過數個節點才能到達目的地,在這個過程中難免會被別有用心的人監聽(現在常用的網路資料監聽軟體就有charles,具體可以檢視相關使用教程,通過這個軟體可以監聽到某個頁面用到了哪些介面,傳送以及返回的引數分別是什麼)。所以在傳輸敏感資料的過程中,就要對資料進行加密。現行的加密過程中,一般加密演算法是公開的,金鑰是自己持有,傳送方有金鑰對資料進行加密傳輸,在傳輸的過程中經過加密的資料即使被第三方竊取到也因為沒有金鑰不能解密。而接收方同樣持有金鑰通過演算法的逆運算把密文解析出對應的明文來。
過程如下:
上述演算法即為對稱加密,特點是加密和解密都是用同乙個金鑰。這種演算法的前提條件是傳送方和接收方用乙個金鑰,也就是說在資料傳輸之前,接收方要知道傳送方用於傳送加密資料所用到的金鑰。但是現實條件是一般不會把金鑰手把手的交給對方,所以下面就要用到非對稱加密演算法。
非對稱加密演算法
非對稱加密演算法中資訊的傳送方和接收方都分別有兩個金鑰,其中分別為私鑰和公鑰,私鑰為資料的傳送方持有,公鑰可以公開。其中涉及到兩種模式,它們分別為加密模式和認證模式。
加密模式:
傳送方用公鑰給資料進行加密,然後把加密後的資料傳送到接收方,然後接收方用對應的私鑰解密,因為只有接收方的私鑰才能解析資料,所以即使被第三方竊取到資料也沒有關係。這個模式叫做加密模式。在這個過程中如何保證資料的完整性,保證資料是傳送方傳送的資料,而不是被第三方篡改後的資料。這時就要用到簽名,在傳送方加密明文之前,給明文取md5值,得到其資訊的摘要(注:不能通過資訊摘要反推明文)。然後用公鑰分別給明文和明文的摘要加密傳送到資料的接收方,資料的接收方接收到資料之後,用私鑰對密文和摘要進行解密,然後對解密得到的明文取md5摘要,比對解密後的明文摘要和傳送過來的摘要是否一致;一致就證明資料是原始的資料沒有遭到篡改。這個加密的過程中保證了資料的安全性(即只有接收方才可以解密)和防篡改性(簽名認證),這就保證了上面說的資料傳輸要求中的第一點和第三點。下面是**過程:
但是因為公鑰是公開的,所以在加密模式中我們是不知道到底是誰傳送資料給我們的,因此下面就要提到認證模式。
認證模式:
在認證模式中,傳送方用私鑰加密資料,給接收方傳送資料,接收方用公鑰解密,因為私鑰是唯一的,所以只要資料解析成功就可以知道資料傳送方是誰。
這就附和我們在資料的傳輸要求中的第二點了。下面是**過程:
結合加密模式和認證模式就可以實現資料傳輸安全的三大要點了。
下面我們來解釋一下這種高階模式,以傳送方和接收方兩個部分來解釋:
將訊息進行雜湊運算,得到訊息摘要。
使用自己的私鑰對訊息摘要加密(認證模式:確保了接收方能夠確認自己)。
使用接收方的公鑰對訊息進行加密(加密模式:確保了訊息只能由期望的接收方解密)。
傳送訊息和訊息摘要。
接下來我們看一下接收方所執行的步驟:
使用傳送方的公鑰對訊息摘要進行解密(確認了訊息是由誰傳送的)。
使用自己的私鑰對訊息進行解密(安全地獲得了實際應獲得的資訊)。
將訊息進行雜湊運算,獲得訊息摘要。
將上一步獲得的訊息摘要 和 第一步解密的訊息摘要進行對比(確認了訊息是否被篡改)。
可以看到,通過上面這種方式,使用了接收方、傳送方全部的四個金鑰,再配合使用訊息摘要,使得前面提出的安全傳遞的所有三個條件全都滿足了。那麼是不是這種方法就是最好的呢?不是的,因為我們已經說過了,非對稱加密是一種很耗時的操作,所以這個方案是很低效的。實際上,我們可以通過它來解決對稱加密中的金鑰傳遞問題,如果你已經忘記了可以翻到前面再看一看,也就是說,我們可以使用這裡的高階實現方式來進行對稱加密中金鑰的傳遞,對於之後實際的資料傳遞,採用對稱加密方式來完成,因為此時已經是安全的了。
證書機制
與數字簽名相關的乙個概念就是證書機制了,證書是用來做什麼呢?在上面的各種模式中,我們一直使用了這樣乙個假設,就是接收方或者傳送方所持有的、對方的公鑰總是正確的(確實是對方公布的)。而實際上除非對方手把手將公鑰交給我們,否則如果不採取措施,雙方在網路中傳遞公鑰時,一樣有可能被篡改。那麼怎樣解決這個問題呢?這時就需要證書機制了:可以引入乙個公正的第三方,當某一方想要發布公鑰時,它將自身的身份資訊及公鑰提交給這個第三方,第三方對其身份進行證實,如果沒有問題,則將其資訊和公鑰打包成為證書(certificate)。而這個公正的第三方,就是常說的證書頒發機構(certificate authority)。當我們需要獲取公鑰時,只需要獲得其證書,然後從中提取出公鑰就可以了。
簽名 加密 證書的基本原理和理解
最近開始接觸後端php開發,裡面涉及到的簽名 加密 證書等概念弄得自己頭暈眼花,最近檢視了相關資料,下面把自己的理解寫下來,有不對的地方,還請多指點指點。資料傳輸安全的要滿足的要求 訊息的傳送方能夠確定訊息只有預期的接收方可以解密 不保證第三方無法獲得,但保證第三方無法解密 訊息的接收方可以確定訊息...
證書鏈的基本原理
pki public key infrastructure 規範體系,包含 問題 數字簽名技術 基於公鑰密碼技術。ca 數字簽名兩個過程 簽發證書的過程 撰寫證書元資料 使用通用的hash 演算法 如sha 256 對證書元資料計算生成數字摘要使用issuer 的私鑰對該數字摘要進行加密,生成乙個加...
openssl基本原理 生成證書
參考 begin 公司乙個專案要進行交易資料傳輸,因為這個專案銀行那邊也是剛剛開始啟動,所有的支援只有乙個傳輸欄位的說明文件,好吧,總的有人做事不是嘛,於是介面開發正式展開,第一步的難點就是加密解密,我選擇使用openssl.openssl初接觸的人恐怕最難的在於先理解各種概念 公鑰 私鑰 簽名 驗...