數據安全&加密算法介紹&Openssl&建立CA

Securing Data 數據安全

1理解安全加密協議
2在rhel5配置安全
3在普通互聯網模型上的加密網絡服務

TCP/IP協議棧 本身在安全方面的設計缺陷
man in the middle 中間人***
身份認證 + 數據加密 Authentication + Encryption
MAC 泛洪***
MAC 複製
ARP 重定向 即arp欺騙
如 telnet FTP POP3 賬號密碼都爲明文傳送
rsh,rcp等等 在主機之間cp數據的工具

Kerchoffs` principle
加密必須基於密鑰 而不是基於算法
置換算法比置換密鑰難得多

保證數據完整性 不能被篡改 身份認證杜絕冒名頂替
安全架構

One way hashes    單向散列加密算法
    MD5;sha1 ...
    保證數據完整性
Symmetric Algorithms  對稱加密算法(雙方使用同一個密鑰)(fast)
    DES,由IBM開發 已被破解;3DES;AES;Blowfish;
    數據加密
Asymmetric Algorithms    非對稱加密(safe)(slow)
    公私玥PublicKey SecretKey rsa;(dsa)
    B--->A    B用自己的私鑰加密給A A用B的公鑰解密
    身份驗證 數字簽名 密鑰交換
Digital Signatures 數字簽名
    rsa;dsa;ElGamal
Key Exchange 密鑰交換
    Diffie-Hellman算法 密碼不在網上傳輸 但雙方可以協商出密碼

CA 證書頒發機構 雙方都信任的安全機構

CA給雙方頒發兩個證書 如果a要給b通信 就去CA拿b的證書

CA給a 發證書 證書既是a的公鑰
CA維護了一個證書回收列表
CA授權給微軟redhat等機構 做OS時內置CA的證書

對稱加密比非對稱加密快1000倍

單向加密:能夠提取任何數據特徵碼 輸出定長 不可逆 雪崩效應(輸入信息的微小改變會對結果造成巨大影響)
CA頒發證書時用私鑰加密特徵碼 用戶用CA公鑰解密 如果能解密則證明CA身份
MD5-->輸出定長128bit
sha1-->輸出定長160bit

實現數據完整 數據加密 身份認證 防止中間人***

B-->w--->單向加密出特徵碼用私鑰加密特徵碼放在w後面--->用對稱密碼加密所有數據-->用A的公鑰
加密所有數據-->發送
A-->用同樣的單向加密算法計算數據得到特徵碼 用B的公鑰解密w附帶的特徵碼 比對特徵碼

PKI Public key Infrastructure公鑰基礎架構 是現代互聯網電子商務最基礎的安全架構

在TCP/IP協議棧的傳輸層和會話層之間加入半層--SSL Secure Socket Layer 安全套接字層
TLS Transport Layer Security 即傳輸層安全協議 SSL是TLS的實現 一般認爲是同種東西
網銀https
服務器收到連接請求後 首先進行加密協商(Server將自己支持的加密方式發送給Client 由Client挑選一種或幾種)
服務器將自己證書發給客戶端 以給客戶端提供公鑰 以保證後面的加密傳輸的進行
客戶端用CA公鑰去解密證書後面的加密的特徵碼 如果能夠解密 則證明是CA發的證書
(客戶端拿服務器的公鑰加密一段數據發送給服務器 如果服務器能夠解密 則證明服務器身份)
客戶端生成 臨時對稱密碼(會話密鑰)使用服務器公鑰加密 發送給服務器
服務器使用自己的私鑰解密 如果能解密則驗證服務端合法身份
服務端解密成功 得到此對稱密碼 以後傳送的http頁面用此密碼加密

銀行確定用戶身份時 短信 電子密保卡 用加密狗(內置用戶的證書 此證書由銀行生成 內部使用)

證書=Public key + expire date(有效期限) + owner's information/fqdn
+ how the Certificate may be used + CA's information + CA用自己私鑰做的簽名
使用單向加密算法 抽取整個證書的特徵碼 將此特徵碼用私鑰加密

Openssl 安全工具

兩個庫文件
Libcrypto 數據加密
Libssl 是常見的linux上的比較常見的
一個工具
openssl 多用途工具 生成密鑰對 生成頒發請求 生成自簽證書等等

Openssl的實現:
對稱加密:基於塊加密 block ciphers
    gpg(3DES,CAST5,Blowfish)
    openssl enc

#openssl ? 顯示子命令
#openssl version 顯示版本號
#openssl version -a 顯示所有信息 編譯選項 目錄
#openssl ciphers 所支持的參數
#openssl speed 測速
    #openssl speed rsa 測試rsa算法速度
#openssl enc -des3 -salt -a -in fstab -out cipher.fstab 加密
#openssl enc -d -des3 -salt -a -in cipher.fstab -out fstab 解密

提取特徵碼:
#md5sum fstab
#sha1sum fstab
#openssl dgst -sha1 fstab
#openssl sha1 < fstab

#openssl passwd -1 跟#passwd username同算法
每次生成密碼要加入一個隨機數 但所有生成的密文等效 可以相互替換 都可以代表真實密碼

#openssl genrsa -out mykey.key 1024 生成一個1024位的私鑰保存到mykey.key
或者#openssl genrsa 1024 > mykey.key
#openssl rsa -in mykey.key -pubout 可以從mykey.key中提取對應公鑰
#openssl req -new -x509 -key mykey.key -out mykey.crt -days 3655 生成自簽證書

#openssl req -new -key mykey.key -out my.csr 生成證書頒發請求
輸入國家名 CN
輸入省 henan
城市 zhengzhou
所屬組織
組織單位名
common name
email
    將生成文件發給CA 獲取證書

將一個服務器做成CA
#vim /etc/pki/tls/openssl.cnf
    -+&gt; [ CA_default ] 裏 dir=/etc/pki/CA 其餘東西自己創建
#openssl genrsa 1024 &gt; private/cakey.pem
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
#mkdir certs newcerts crl
#touch index.txt serial
#echo 00 &gt; serial

客戶端生成一對key 並生成證書頒發請求
#openssl genrsa 1024 &gt; station.key
#openssl req -new -key station.key -out station.csr
CA簽署客戶端的請求 並生成證書
#openssl ca -in station.crs -out station.crt

#openssl req -new -x509 -key mykey.key -out my.crt -days 3655 生成證書頒發請求
#openssl req -noout -in my.csr -text 查看證書頒發請求

簡便方法: (一般情況下EHCE考試使用這種方法)
#cd /etc/pki/tls/certs
#make a.key 生成key
#make a.pem 生成pem格式證書 此證書包含私鑰公鑰
#make a.crt 生成crt格式證書 不包含私鑰

實驗: 手動把自己做成CA 給別人發證讓別人互相認證之後通信

總結:
3個需求:
1數據加密 對稱加密算法 sy
2身份驗證 非對稱 公鑰加密 asy
3數據完整性 單向加密 hash

發送方A
將源數據用某種單向加密算法(如MD5)提取特徵碼
並用自己的私鑰加密特徵碼
用對稱密碼(自己隨機生成)加密--&gt;(源數據+加密過的特徵碼)
用接收方B的公鑰加密這個對稱密碼
-----------發送給B---------------
接收方B
用自己的私鑰解密A加密過的對稱密碼--&gt;拿到對稱密碼
用拿到的對稱密碼解密--&gt;(源數據+加密過的特徵碼)
拿A的公鑰解密特徵碼--&gt;驗證A的身份
拿同種單向加密算法(MD5)計算源數據的特徵碼
拿計算出的特徵碼和A發過來的特徵碼對比--&gt;如果相同則證明數據沒被篡改
---------------------------------
此過程中 BA都要用到對方的公鑰
CA給A頒發證書
A的證書=A的公鑰+A的信息(地址姓名組織單位)+證書用途+有效期+CA信息+CA簽名(用CA的私鑰加密過的A證書的特徵碼)

AB通信前先相互交換證書

B如何驗證A的證書的可靠性
每個操作系統內置有CA的證書(其中有CA的公鑰) B拿CA的公鑰去解密A的證書中CA的簽名 如果能夠解密 則驗證了CA的身份 再對A的證書進行單向加密計算特徵碼 拿計算出的特徵碼和解密出的特徵碼做對比 如果相同 則A的證書沒有被篡改過

如果給A和B發證書的CA不是同一個CA 則用相應的CA的公鑰去驗證對方的證書

把一臺服務器S做成CA
(CA自己先給自己做一個證書然後聲明自己是CA)

A,B分別生成一個私鑰和一個請求給CA
CA給A,B分別頒發一個它們自己的證書
A,B互相交換證書
如果要A,B驗證CA的可靠性 則到S下載一個此CA的證書

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