linux學習之路之加密型別及其相關演算法

2021-08-02 06:41:56 字數 3353 閱讀 4757

**:

加密型別及其相關演算法

隨著網際網路越演越烈,網際網路上的各種攻擊層出不窮,因此在網際網路上相互傳遞的資訊越來越不安全,因此為了防止使用者在網際網路上傳遞的資料被竊取,因此我們很有必須加強傳遞的資料的安全性。

資料的安全性主要包括以下三個方面:

資料的機密性:保證傳遞的資料不被讀取

要想使傳遞的資料不被讀取,可以對這些資料進行加密,因為預設這些資料是以明文來傳遞的

整個加密過程可以這麼來理解:

加密:plaintext--->轉換規則--->ciphertext

解密:ciphertext--->轉換規則--->plaintext

這裡的轉換規則就是我們常說的加密/解密演算法,主要的加密演算法有2種:

非對稱加密演算法:使用公鑰加密,私鑰解密

對稱加密演算法:加密和解密的金鑰相同

由於非對稱加密演算法比較慢,因此一般資料加密我們常使用對稱加密演算法,雖然對稱加密演算法

能解決資料的機密性,但是卻無法管理金鑰問題

資料的完整性:保證傳遞的資料不被破壞

對於資料的完整性,一般使用單向加密演算法,單向加密所具有的特徵有:

1、輸入一樣,輸出必然一樣

2、具有雪崩效應,就是微小的改變會引起結果巨大的改變

3、定長輸出:無法原始資料多大,結果大小都是相同的

4、不可逆,無法根據特徵碼還原原來的資料

單向加密保證資料的完整性過程是這樣子的:

首先使用者a為防止明文資料被其他人篡改,因此對此文使用單向加密演算法,生產乙個特徵碼a,然後將資料a和特徵碼a一起傳送給使用者b。當使用者b收到資料a和特徵碼a時,也對資料a使用相同的單向加密演算法,並且也產生乙個特徵碼b;如果特徵碼a和b相同,則說明資料是完整的;否則,資料是不完整的。

雖然單向加密演算法可以保證資料的完整性,但是仍然會有問題?

試想一下,如果使用者a在傳遞資料給b時,不小心被使用者c給攻擊了,這樣使用者a傳送的資料都被傳送到使用者c上去了,此時使用者c對這段資料也進行單向加密的話,也會生產乙個特徵碼c,再將資料和特徵碼c一起傳送給使用者b,顯然使用者b對這段資料進行單向加密,生產的特徵碼和c一樣。這時候雖然特徵碼是相同的,但是這並不是a使用者傳送的資料,而此時的使用者b是無法判斷資料的**是否正確,因此我們需要對資料的**進行身份驗證。這樣才可以保證資料的合法性以及完整性。

如何來確保傳送方的身份正確?

使用者的身份驗證:要保證傳送方身份正確

要想對某個使用者進行身份驗證,就需要用到非對稱加密演算法:

非對稱加密演算法包含乙個公鑰(p)和私鑰(s)

如果傳送方使用自己的私鑰來加密可以實現身份驗證和資料完整性

如果傳送方使用公鑰來加密可以保證資料的機密性

公鑰加密的資料只有相應的私鑰才能解密,因此此種機制可以用來保證資料的機密性

由於非對稱加密演算法速度慢,因此很少用來加密資料

繼續談論剛剛說的單向加密可能出現的問題

,如果此時使用a的私鑰對特徵碼進行加密,

及時c獲取到了a傳送的資料和特徵碼,也可以解密特徵碼(因為公鑰是公開的),在使

用c自己的私鑰加密特徵碼,但是他仍然無法還原a的特徵碼,因此傳送給b的資料和

特 徵碼是用c的私鑰來加密的,因此當b收到資料和特徵碼時,如果

能使用a的公鑰解密

說明是a傳送的;反之,則不是a傳送的,這時b不會相信此時傳送過來的資料。

因此,這種機制可以用來實現身份驗證和保證資料的完整性。

而在這個過程中,最重要的就是公鑰了。

試想一下:如果a和b第一次交換資料,此時a和b並不知道雙方到底是誰,因此如果有人冒

充頂替a或者b的話,那麼所有的資料就在a或b和冒充者之間進行了,而此時a和b卻沒有真

正的進行資料傳遞。

因此為了實現身份驗證,還需要借助第三方機構來實現

而整個顯示過程是這樣的:

使用者a要送資料給b時,首先生產乙個金鑰對(私鑰和公鑰),然後第三方機構也會生產乙個公鑰和乙個私鑰,其中用自己的公鑰生產乙個證書(certificate),用自己的私鑰加密加密a傳送的這段資料,這段資料大概包括:使用者名稱、使用者位址、使用者a的公鑰。然後生成乙個特徵碼,這樣就組成了乙個數字證書,在一起傳送給使用者b。使用者b收到a傳送過來的證書,此時使用者b需要確認這個證書是否是有效的且真實的,由於這個證書是由證書機構的私鑰加密的,因此需要使用第三方機構的公鑰進行解密才可以檢視的到,因此b使用者購買第三方機構的證書即可來解密這段資料。解密完成後,這個證書中就包含了a的公鑰,就可以確定該證書是不是a使用者傳送過來的。

那麼又是如何保證資料的機密性的呢?

1、使用金鑰交換演算法(internet key  exchange,ike)生產對稱金鑰    

金鑰交換演算法是使用diffle-hellman協議來實現的。

大概的工作原理是:

a--->b傳遞資料時,只傳遞g(大素數)、p(生成數),然後使用者a在本地生產乙個x,使用者b

在本地生產乙個y。然後a使用者根據g、p、x生產乙個數為(g^x%p),再將這個數傳遞給b

使用者;b使用者也根據g、p、x生產乙個數為(g^y%p),在傳遞給使用者a。因此此時在網際網路

上傳遞的只有g、p、(g^x%p)、(g^y%p)這四個數,x、y不會在網際網路上傳遞。這時

a在根據b傳遞過來的資料得到另乙個資料(g^y%p)^x,這個資料就是金鑰;而b也根據a

傳遞過來的資料生成另乙個金鑰(g^x%p)^y

,此時使用者a和使用者b生產的金鑰就是對稱密 鑰。

生產完了對稱金鑰之後,就可以對資料和特徵碼進行加密了,當使用者b收到這些資料後,也可

以進行相應的解密了。這樣就實現了資料的機密性,但是由於使用交換金鑰的方式比較復    

雜,因此可以使用另一種方式來保證資料的機密性

2、使用者a隨機生成乙個數,使用這個隨機數對資料和特徵碼進行加密,並使用b的公鑰對這

個隨機數進行加密,然後再將這個隨機數加密後的資料一起和特徵碼+資料a傳送給使用者b,

此時使用者b可以用自己的私鑰來解密隨機數,在用這個隨機數來解密資料a和特徵碼,最後用

使用者a的公鑰來解密特徵碼,這樣就保證了資料的機密性、資料完整性和身份驗證。

加密演算法簡介

對稱加密演算法

主要有des:data encrption standard

3des、aes、blowfish 

單向加密演算法

主要有md4、md5、sha1、sha192、sha256、sha384、crc-32(主要提供校驗功能的)

公鑰加密演算法(非對稱加密演算法)

公鑰加密演算法可以實現身份驗證(數字簽名)、資料加密、金鑰交換       

主要演算法有2種:

rsa:這種演算法既可以簽名也可以加密

dsa:這種演算法只可以實現簽名

還有一種演算法是商業版的,叫做elgamal

Linux之加密及CA證書

加密方法的種類主要分為三種 單向加密,非對稱加密,對稱加密。單向加密 不是加密,而是提取資料特徵碼,主要用於驗證資料的完整性。非對稱加密 非對稱加密也稱公鑰加密,金鑰成對出現。主要用於金鑰交換和數字簽名 身份驗證等。對稱加密 由於加密方和解密方使用同一對金鑰所以稱為對稱加密。常見演算法 md5 me...

Linux學習之路(番外 對資料加密)

整型數 陣列 加密 陣列 整型數 整型數 陣列 解密 陣列 整型數 include 整型 陣列 int int to array int num,int array return len 加密 int jiami int array int len if len 1 int tmp int i 0 ...

Linux學習之路

一直想學習linux,就其原因,一是懂這個的都被認為水平比較高,二是懂這個的工資也不低,這兩點我也是比較看重的。想學linux也不是一件簡單的事,因為用windows的東西太久了,從3.1到95 98 se nt 2000 me xp 2003,直至最新的windows 7 2008等,全算下來,有...