加密認證功能

加密解密的技術:

對稱加密

加密方和解密方使用是同一個密鑰,加密解密的速度都很快,先將數據明文

分成數據塊兒,一般來講是大小相同的,如果到最後剩下的不能與其他數據塊兒的

大小相同,那麼就給它添加一些填充物,然後對每個數據塊兒逐個加密,

然後把加密後的數據塊兒發給對方,每一次管理一塊兒,

但是,加密後的塊兒怎麼處理,因爲每一個塊兒都是單獨處理,對方在破解數據時

每一塊兒獨立破解,也就是說這樣的加密過程對反破解並沒有任何幫助,

對於加密以後的數據塊兒的處理有以下兩種方法

ECB:每一塊兒單獨加密,加密一個傳遞一個,

CBC:加密或密文塊兒鏈,通過抑或運算實現,每一個數據塊兒,在發送給對方

之前會實現將此數據塊兒與此前的數據塊兒做一次抑或運算,並把結果發送給對方

所以得不到第一個塊兒,得到其他也就沒有用,即使是第一塊,也會和一個隨機數

進行抑或運算

其最大好處在於,做兩次抑或運算後可以將數據還原

 

算法:DES:數據加密標準,使用56位的密鑰長度

AES:高級加密標準,可以使用128、192、256三種長度的密鑰

3DES:對原有加密3次,

Blowfish

Twofish

RC6

IDEA

CAST5

缺陷:1、一個人跟衆多對象通信的時候需要記的密碼過多

2、密鑰分發困難,是最大的難題,沒有一種可靠的手段將密鑰送給一個

沒有見過面的對象

 

非對稱加密

公鑰加密算法:DSA,RSA,EIGamal

加密方和解密方使用不同的密鑰

功能:加密解密

用戶的身份認證,RSA兩者都可以實現,而DSA只能加密數據

公鑰,私鑰

公鑰是從私鑰中抽出的一段特徵,公鑰隱含在私鑰中

現在主流的密鑰長度是2048

 

缺陷:1、加密速度慢,比對稱加密慢3個數量級 1000倍,一個數量級10倍

2、公鑰加密一般不用於加密數據,主要用於實現用戶認證,數據加密

主要是通過對稱加密實現的

如何實現用戶認證:

現在假設,有兩個通信的對象,一個較小黑,一個較小白,現在小黑給小白髮了

一封電子郵件,但是,小白在接受郵件的時候不希望自己的郵件的內容被篡改,

這時小黑就將郵件內容加密且說自己是小黑,併產生一個公鑰和一個私鑰,

私鑰小黑會隨身攜帶

而且不能外泄,公鑰則連同郵件一起發給小白,這是小白拿着小黑的公鑰如果能夠

解密,則說明小黑就是小黑...這就實現了認證,但是如果小黑加密的數據很大,再加上

公鑰加密要用很久時間,等加密好,小黑也無語了,所以小黑加密的不是數據

而是這段數據的特徵值,說到特徵值,下面就說一下單向加密》》》

 

單向加密

雪崩效應:輸入的數據有一點點不同,結果會有巨大不同,主要目的在防暴力破解

單向加密就是去計算一段數據的特徵值,加密過程是不可逆的,是去計算一段數據的特徵碼,是獨一無二的,用於對

數據完整性的校驗

無論你輸入的數據是多長,輸出的結果都是一樣長度

MD5:message digest,輸出結果固定長度128bit

SHA1:secure hash algorithm安全的哈希算法,輸出結果固定長度160bit

身份認證:

單向加密在實現用戶身份認證的時候不會去加密整段數據,而是先去計算這段數據的特徵值,

把它的特徵值用私鑰加密,加密以後附着在數據後面,一起發給對方,在對方收到以後,對方

可以驗證兩方面的內容,第一用戶的身份,第二數據的完整性,接收方先用發送方的公鑰對其解密

如果能解密就驗證了對方了身份,此時接收方會獲得這段數據的特徵值,然後接收方也用相同的

算法進行運算,得到一個數據的特徵值,如果這兩個特徵值相同,則說明數據在發送過程完好無損

如果不相同,則說明數據有改動

假設還是小黑和小白通信,雙方都希望在數據的發送過程中,既能實現用戶身份驗證,

又能實現數據加密,還能實現數據的完整性,那該怎麼辦呢?

現在小黑在發送數據前,先將數據用單向加密,計算出特徵值,然後再用私鑰解密將特徵值加密

接下來會再用產生一個一次性的密碼,用小白的公鑰將這個密碼加密然後放在數據後,最後再用對稱加密

將全部加密,這時就是密文了,到了小白那裏以後,小白先用自己的私鑰拿到那個密碼,然後再用那個

密碼解密,獲得數據的特徵值,然後再用單向解密計算出一個特徵值,如果這兩個值相同,則說明

數據完好,以上過程就實現了三重驗證

這三項結合起來是現在電子商務的基礎。

可以實現這整個過的工具:

opssh

gpg

但是這兩個過程還存在問題,小白怎樣去獲得小黑的公鑰呢?在傳輸公鑰的時候也有可能

出現欺騙,這怎麼解決了?

IKE:互聯網密鑰交換,實現雙方使眼色交換密鑰,和密鑰本身不在互聯網上

傳播

PKI:公鑰基礎設施,或公鑰基礎架構,CA證書頒發機構,證書內放的就是通信人的公鑰信息

怎樣基於證書通信:

雙方在通信時都出示證件,這個證件由某個權威機構發放,只要驗證證件內的有效信息

就可以驗證對方的身份,但是在發證的時候怎樣防止中間出現欺騙呢?

這又是一個雞生蛋,蛋生雞的問題,想想該如何解決呢?

所以一些操作系統在安裝時就已經將一些權威的發證機構的證書放在你的電腦裏了,這樣在一定程度

上可以解決一些問題

 

證書的格式:X509,PKCS 

證書廢棄列表:CRL

 

最常見的***“man in the middle”主要是雙方身份無法驗證

會話劫持,

數據插入,

數據篡改,

這些都是常見的威脅

加密解密用於:

 

1、用戶密碼/數據嗅探 password/data sniffing 

2、數據操縱,data manipulation 

3、authentication manipulation 認證 

4、equivalent to mailing on postcards 

這幾個方面

加密算法的基本法則:kerckhoff's principle

1、一般來講加密本身並不靠算法,算法固然很關鍵能將明文變成密文

但是一項真正的加密過程,你的數據是否會被破解,主要不能過強依賴於算法本身,

而要依賴於密碼,算法的研究週期很長,更改一個密碼很簡單,但是更換一個算法就麻煩了

算法需要耗費很多精力,只要算法不公開,就無從下手破解

2、電子商務的過程中不僅要保證數據加密,還要保證不被別人看見

算法:

1、隨機數來源靠得住

########openssl#########l

用C語言實現了很多種常見的加密算法:

三個組件:

1、libcrypto 庫文件 專門實現加密解密的庫文件,

2、libssl 庫文件,主要是實現https這樣協議 

3、openssl 多用途加密工具,還可以製作一個CA出來

 

一般來講openssl都會裝上,使用一個openssl加一個錯誤的選項就能看見它的使用

選項

單項加密時的用法:

 

openssl enc -des3 -salt -a -in inittab -out inittab.des3 

實現對於一個文件加密 enc是加密 -des3是加密算法 -salt 加入雜質

-in後面跟文件名 -out加密後放在哪個文件裏

openssl enc -d -des3 -salt -a -in inittab.des3 -out inittab 

-d表示解密

openssl dgst -sha inittab 表示計算inittab文件的特徵值

用戶認證時passwd的用法,怎麼去幫你生成一個類似於保存在/etc/shadow文件裏的密碼一樣

openssl passwd -1 -1表示使用MD5算法

[root@server46 ~]# openssl passwd -1 

Password: 

Verifying - Password: 

$1$7HW0kv8y$IntkyNppqtTQ2fHAJ1FMk1 

 

openssl passwd -1 -salt 雜質 這樣計算結果就一樣了

[root@server46 ~]# openssl passwd -1 

Password: 

Verifying - Password: 

$1$7HW0kv8y$IntkyNppqtTQ2fHAJ1FMk1 

[root@server46 ~]# openssl passwd -1 -salt 7HW0kv8y 

Password: 

$1$7HW0kv8y$IntkyNppqtTQ2fHAJ1FMk1

man sslpasswd可以查看用法

 

非對稱加密:

openssl怎樣發證:

切換目錄到/etc/pki/tls/certs

 

make *.key就可以產生一個密鑰 

make *.cert可以生成一個證書,主要是看文件後綴生成文件,是redhat提供的便捷方式 

make my.key就可以生成一個密鑰 

(umask 66;openssl genrsa 1024 > my.key)

生成私鑰文件

這是在一個子shell裏進行,umask只對後面的這一個命令有效,umask執行完以後就恢復到原來

提取公鑰:

 

openssl rsa -in my.key -pubout -out myr.pubkey 

[root@server46 certs]# (umask 66; openssl genrsa 1024 > my.key) 

Generating RSA private key, 1024 bit long modulus 

...++++++ 

........++++++ 

e is 65537 (0x10001) 

[root@server46 certs]# cat my.key 

-----BEGIN RSA PRIVATE KEY----- 

MIICXQIBAAKBgQDRSlvZZ7p7sRbczdGhcw/8z5mzEKIjDZw63ffsxCDC9XWKO0vE 

FaxbPrgwZYF+iu8QHUKVzuJoqO8MmfY7p9aGz2WT2GQ/wUTnjsbL8mNbSclV/2m8 

K0XZqSLsKzuhaBOFC+sylQvnZiXP23slNWZIuV0EVh9k2ULSV4f8B5QtywIDAQAB 

AoGATNkA4NM1pjVgL7NjReT5+dpAlX+GCVj2BKd8YXOik/ONNTSQnW9X2ikteJfM 

9KoPHdugl2FfwQ5GuFnQEBeQrUV5SnR09k2OZTsdOMVNXqamf4V/rXidOs+L3RVK 

Q4X6vpasS1CJ1/q/fCcsi1Nl0nLcV9stLXbmEzYqE6+hwAECQQDqxrbF5W9j5vVM 

ZkKmvx1ViojwTJovlkOtl6RSkqHMR3msnHhizbc+iGrGiP/vH9H+AvDK7AJPNVng 

kHAa5YGbAkEA5DXX0dIajPoAdLvmNG1kNY1fp6IJjfR8UJRWeOwjhVjul1yp47hP 

bM/f55OmowdsQamfNVwk4P5iYIcZ8uwfkQJBAJoXToLYsaF6Rumb/IcAzLoGMRa2 

0EQHdegLrVhc0UEIcH2wPPtsVab/VkV0SbaixerX9z7YZDOkqpbPdiTRGZ0CQBWv 

2DakVMmY6HovcQ0CaEd+i9yOVYIb/cRalG0hY67EaMgRkkOFvGaGyqxjJ67Ogccr 

q2mSvB51jjvGGv0u20ECQQCHvgJkF3xHkQnahqCTTgym0CNocHhVfyo6KveIfBAk 

Vz69+zsGK2kKBOseSbgRKqVmM21Iqu0aZatjEevHwZIo 

-----END RSA PRIVATE KEY----- 

[root@server46 certs]# openssl rsa -in my.key -pubout -out my.pubkey 

writing RSA key 

[root@server46 certs]# cat my.pubkey 

-----BEGIN PUBLIC KEY----- 

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRSlvZZ7p7sRbczdGhcw/8z5mz 

EKIjDZw63ffsxCDC9XWKO0vEFaxbPrgwZYF+iu8QHUKVzuJoqO8MmfY7p9aGz2WT 

2GQ/wUTnjsbL8mNbSclV/2m8K0XZqSLsKzuhaBOFC+sylQvnZiXP23slNWZIuV0E 

Vh9k2ULSV4f8B5QtywIDAQAB 

-----END PUBLIC KEY----- 

發證步驟:

1、首先生成一對密鑰(S/P密鑰)

2、然後把公鑰放在一個叫證書頒發請求裏(裏面包括你的公鑰,姓名,地址,等一些列描述信息)

發送到證書頒發機構

3、CRT證書就生成了

 

自己成爲CA:

1、cd /etc/pki/CA

有一個 private 文件,裏面專門放CA的私鑰文件

2、給自己生成一個密鑰

(umask 66; openssl genrsa 2048 > private/cakey.pem[這裏只能叫cakey.pem]) 

ll private 

給自己發證書:

openssl req -new -x509 -key private/cake.pem -out cacert.pem 

openssl req -new -x509 -key private/cake.pem -out cacert.pem

 

接下來會提示你輸入一些信息

寫完之後就是一個自籤的證書

接下來就可以給別人發證了

view plaincopy to clipboardprint?

openssl req -new -x509 -key private/cake.pem -out cacert.pem -days3655 

openssl req -new -x509 -key private/cake.pem -out cacert.pem -days3655

 

3、編輯cA的配置文件

 

view plaincopy to clipboardprint?

vim /etc/pki/tls/openssl.cnf這裏定義了 

vim /etc/pki/tls/openssl.cnf這裏定義了

找到【 CA_default 】字段

修改 dir 改爲絕對路徑

這裏有些目錄沒有需要我們手動建立,在這個配置文件內我們都能找到

然後還可以修改默認信息

到這裏才 算是一個完整的CA

4、接下來給web服務器做一個證書:

 

view plaincopy to clipboardprint?

cd /etc/httpd 

mkdir ssl 

cd ssl 

(umask 66;openssl genrsa 2048 > web.key) 

cd /etc/pki/CA 

mkdir certs crl newcerts 

touch index.txt serial 

echo 01 > serial 

openssl req -new -key wed.key -out wed.csr 這是一個證書頒發請求 

opssl ca -in wed.csr -out web.crt 頒發證書 

cd /etc/httpd

mkdir ssl

cd ssl

(umask 66;openssl genrsa 2048 > web.key)

cd /etc/pki/CA

mkdir certs crl newcerts

touch index.txt serial

echo 01 > serial

openssl req -new -key wed.key -out wed.csr 這是一個證書頒發請求

opssl ca -in wed.csr -out web.crt 頒發證書

然後敲兩次回車 就ok了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章