您好,登錄后才能下訂單哦!
加密解密的技術:
對稱加密
加密方和解密方使用是同一個密鑰,加密解密的速度都很快,先將數據明文
分成數據塊兒,一般來講是大小相同的,如果到最后剩下的不能與其他數據塊兒的
大小相同,那么就給它添加一些填充物,然后對每個數據塊兒逐個加密,
然后把加密后的數據塊兒發給對方,每一次管理一塊兒,
但是,加密后的塊兒怎么處理,因為每一個塊兒都是單獨處理,對方在破解數據時
每一塊兒獨立破解,也就是說這樣的加密過程對反破解并沒有任何幫助,
對于加密以后的數據塊兒的處理有以下兩種方法
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了
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。