1. 程式人生 > >linux基礎篇-加密和安全(一)

linux基礎篇-加密和安全(一)

證書 rss base64 encrypt 加密和解密 leg 效應 pubkey 鼠標

加密和安全(一)
主要內容

♣ 安全機制
♣ 對稱和非對稱加密
♣ 散列算法
♣ gpg
♣ PKI和CA
♣ openssl
♣ 證書管理
♣ ssh服務和dropbear
♣ aide
♣ Sudo
♣ TCP Wrappers
♣ PAM模塊

墨菲定律

♥ 墨菲定律:一種心理學效應,是由愛德華·墨菲(EdwardA.Murphy)提出的、原話:如果有兩種或兩種以上的方式去做某件事情,而其中一種選擇方式將導致災難,則必定有人會做出這種選擇

♥ 主要內容:
♥ 任何事都沒有表面看起來那麽簡單
♥ 所有的事都會比你預計的時間長
♥ 會出錯的事總會出錯
♥ 如果你擔心某種情況發生,那麽它就更有可能發生

安全機制

♥ 信息安全防護的目標
? 保密性 Confidentiality
? 完整性 Integrity
? 可用性 Usability
? 可控制性Controlability
? 不可否認性Non-repudiation
♥ 安全防護環節
? 物理安全:各種設備/主機、機房環境
? 系統安全:主機或設備的操作系統

? 應用安全:各種網絡服務、應用程序網絡安全:對網絡訪問的控制、防火墻規則
? 數據安全:信息的備份與恢復、加密解密
? 管理安全:各種保障性的規範、流程、方法

安全

?安全×××: STRIDE
♣ Spoofing 假冒
♣ Tampering 篡改
♣ Repudiation 否認
♣ Information Disclosure 信息泄漏
♣ Denial of Service 拒絕服務
♣ Elevation of Privilege 提升權限

安全設計基本原則

♣ 使用成熟的安全系統

♣ 以小人之心度輸入數據
♣ 外部系統是不安全的
♣ 最小授權
♣ 減少外部接口
♣ 缺省使用安全模式
♣ 安全不是似是而非
♣ 從STRIDE思考
♣ 在入口處檢查
♣ 從管理上保護好你的系統

安全算法

♣ 常用安全技術
♣ 認證
♣ 授權
♣ 審計
♣ 安全通信
♣ 密碼算法和協議
♣ 對稱加密
♣ 公鑰加密
♣ 單向加密
♣ 認證協議

對稱加密算法

♣對稱加密:加密和解密使用同一個密鑰,算法如下:
? DES:DataEncryption
? Standard,56bits
? 3DES:
? AES:Advanced(128, 192, 256bits)
? Blowfish,Twofish
? IDEA,RC6,CAST5
♣特性:
1、加密、解密使用同一個密鑰,效率高
2、將原始數據分割成固定大小的塊,逐個進行加密
♣ 缺陷:
1、密鑰過多
2、密鑰分發
3、數據來源無法確認

非對稱加密算法

♣ 公鑰加密:密鑰是成對出現
♣ 公鑰:公開給所有人;public key
♣ 私鑰:自己留存,必須保證其私密性;secret key
♣ 特點:用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然
♣ 功能:
♣ 數字簽名:主要在於讓接收方確認發送方身份
♣ 對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰後發送給對方
♣ 數據加密:適合加密較小數據
♣ 缺點:密鑰長,加密解密效率低下
♣ 算法:
?RSA(加密,數字簽名)
?DSA(數字簽名)
?ELGamal

非對稱加密

♣基於一對公鑰/密鑰對
? 用密鑰對中的一個加密,另一個解密
♣實現加密:
?接收者生成公鑰/密鑰對:P和S公開公鑰P,保密密鑰S
? 發送者使用接收者的公鑰來加密消息M將P(M)發送給接收者
? 接收者使用密鑰S來解密:M=S(P(M))

非對稱加密

♣實現數字簽名:
?發送者生成公鑰/密鑰對:P和S公開公鑰P,保密密鑰S使用密鑰S來加密消息M發送給接收者S(M)
?接收者使用發送者的公鑰來解密M=P(S(M))
♣結合簽名和加密
♣分離簽名

單向散列

♣將任意數據縮小成固定大小的“指紋”
? 任意長度輸入
? 固定長度輸出
? 若修改數據,指紋也會改變(“不會產生沖突”)
? 無法從指紋中重新生成數據(“單向”)
♣功能:數據完整性
♣常見算法
? md5: 128bits
? sha1: 160bits
? sha224
? sha256
? sha384
? sha512
♣ 常用工具
? md5sum | sha1sum [ --check ] file
? openssl、gpg
? rpm -V

數字簽名

技術分享圖片

密鑰交換

♣密鑰交換:IKE( Internet Key Exchange )
公鑰加密:DH(Deffie-Hellman):生成會話密鑰,由惠特菲爾德·迪菲(BaileyWhitfieldDiffie)和馬丁·赫爾曼(MartinEdwardHellman)在1976年發表。
參看:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
♣DH:
? A: g,p 協商生成公開的整數g, 大素數pB: g,p
? A:生成隱私數據 :a (a<p ),計算得出 g^a%p,發送給B
? B:生成隱私數據 :b,計算得出 g^b%p,發送給A
? A:計算得出 [(g\^b%p)^a\%p = g^ab%p,生成為密鑰
? B:計算得出 [(g\^a%p)^b] %p = g^ab%p,生成為密

應用程序文件完整性的兩種實施方式:RPM

♣ 被安裝的文件
? MD5單向散列
? rpm --verify package_name (or -V)
♣ 發行的軟件包文件
? GPG公鑰簽名
? rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
? rpm --checksig pakage_file_name (or -K)

使用gpg實現對稱加密

♣ 對稱加密file文件
gpg -c file :加密文件
ls file.gpg :查看加密的文件
♣ 在另一臺主機上解密file
gpg -o file -d file.gpg :解密文件

使用gpg工具實現公鑰加密

♣在hostB主機上用公鑰加密,在hostA主機上解密:
1、在hostA主機上生成公鑰/私鑰對:
? gpg --gen-key
2、在hostA主機上查看公鑰:
? gpg --list-keys
3、在hostA主機上導出公鑰到wang.pubkey:
? gpg -a --export -o wang.pubkey
4、從hostA主機上復制公鑰文件到需加密的B主機上
? scp wang.pubkey hostB:
5、在需加密數據的hostB主機上生成公鑰/私鑰對
? gpg --list-keys
? gpg --gen-key
6、在hostB主機上導入公鑰
? gpg --import wang.pubkey
? gpg --list-keys
7、用從hostA主機導入的公鑰,加密hostB主機的文件file,生成file.gpg
? gpg -e -r wangxiaochun file
? file file.gpg
8、復制加密文件到hostA主機
? scp fstab.gpg hostA:
9、在hostA主機解密文件
? gpg -d file.gpg
? gpg -o file -d file.gpg
10、刪除公鑰和私鑰
? gpg --delete-keys wangxiaochun
? gpg --delete-secret-keys wangxiaochun


CA和證書

♣ PKI: Public Key Infrastructure
簽證機構:CA(Certificate Authority)
註冊機構:RA
證書吊銷列表:CRL
證書存取庫
♣ X.509:定義了證書的結構以及認證協議標準
版本號
序列號
簽名算法
頒發者
有效期限
主體名稱
主體公鑰
CRL分發點
擴展信息
發行者簽名

證書獲取

♣ 證書類型:
證書授權機構的證書
服務器
用戶證書
♣獲取證書兩種方法:
? 使用證書授權機構
1、生成簽名請求(csr)
2、將csr發送給CA
3、從CA處接收簽名
? 自簽名的證書
自已簽發自己的公鑰
♣ 安全協議
? SSL: Secure Socket Layer,TLS: Transport Layer Security
1995:SSL 2.0 Netscape
1996: SSL 3.0
1999: TLS 1.0
2006: TLS 1.1 IETF(Internet工程任務組) RFC 4346
2008:TLS 1.2 當前使用
2015: TLS 1.3
♣ 功能:機密性,認證,完整性,重放保護
? 兩階段協議,分為握手階段和應用階段:
1、握手階段(協商階段):客戶端和服務器端認證對方身份(依賴於PKI體系,利用數字
證書進行身份認證),並協商通信中使用的安全參數、密碼套件以及主密鑰。後續通信使用的所有密鑰都是通過MasterSecret生成。
2、應用階段:在握手階段完成後進入,在應用階段通信雙方使用握手階段協商好的密
鑰進行安全通信。

SSL/TLS

♣ Handshake協議:包括協商安全參數和密碼套件、服務器身份認證(客戶端身份認證可選)、密鑰交換。
♣ ChangeCipherSpec 協議:一條消息表明握手協議已經完成。
♣ Alert 協議:對握手協議中一些異常的錯誤提醒,分為fatal和warning兩個級別,fatal類型錯誤會直接中斷SSL鏈接,而warning級別的錯誤SSL鏈接仍可繼續,只是會給出錯誤警告。
♣ Record 協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等。
♣ HTTPS 協議:就是“HTTP 協議”和“SSL/TLS 協議”的組合。HTTP overSSL”或“HTTP over TLS”,對http協議的文本數據進行加密處理後,成為二進制形式傳輸。


OpenSSL介紹

♣ OpenSSL:開源項目三個組件:
openssl: 多用途的命令行工具,包openssl
libcrypto: 加密算法庫,包openssl-libs
libssl:加密模塊應用庫,實現了ssl及tls,包nss
♣ openssl命令:
? 兩種運行模式:交互模式和批處理模式
? 程序版本號:openssl version
? 標準命令、消息摘要命令、加密命令
? 標準命令:enc, ca, req, ...
♣ openssl命令
? 常用選項有:
-in filename:指定要加密的文件存放路徑
-out filename:指定加密後的文件存放路徑
-salt:自動插入一個隨機數作為文件內容加密,默認選項
-e:可以指明一種加密算法,若不指的話將使用默認加密算法
-d:解密,解密時也可以指定算法,若不指定則使用默認算法,但一定要與加密時的算法一致
-a/-base64:使用-base64位編碼格式
♣ 對稱加密:
? 工具:openssl enc, gpg
? 算法:3des, aes, blowfish, twofish
♣ nc命令:
? 幫助查詢:man enc
? 加密:openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
? 解密:openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile

openssl命令單向加密

♣單向加密工具:md5sum, sha1sum, sha224sum,sha256sum…,openssl dgst
♣dgst命令:對文件做哈希運算
幫助查詢:man dgst
openssl dgst -md5 [-hex默認] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
♣MAC: Message Authentication Code,單向加密的一種延伸應用,用於實現網絡通信中保證所傳輸數據的完整性機制
CBC-MAC
HMAC:使用md5或sha1算法
♣生成用戶密碼:
passwd命令:
幫助查詢:man sslpasswd
openssl passwd -1 -salt SALT(最多8位)
openssl passwd -1 –salt centos
♣ 生成隨機數:
幫助:man sslrand
openssl rand -base64|-hex
(NUM: 表示字節數;-hex時,每個字符為十六進制,相當於4位二進制,出現的字符數為NUM*2)

openssl命令
♣ 公鑰加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
♣ 數字簽名:
算法:RSA, DSA, ELGamal
♣ 密鑰交換:
算法:dh
DSA: Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:
♣ 生成密鑰對兒:man genrsa
♣ 生成私鑰
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
(umask 077;openssl genrsa–outtest.key–des2048):開啟子進程設置生成的私鑰權限
openssl rsa -in test.key –out test2.key 將加密key解密
♣ 從私鑰中提取出公鑰
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
openssl rsa –in test.key –pubout –out test.key.pub
♣ 隨機數生成器:偽隨機數字
鍵盤和鼠標,塊設備中斷
/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞

OpenSSL創建CA和申請證書

♣ PKI:Public Key Infrastructure
CA
RA
CRL
證書存取庫
♣ 建立私有CA:
OpenCA
openssl
♣ 證書申請及簽署步驟:
1、生成申請請求
2、RA核驗
3、CA簽署
4、獲取證書

創建私有CA:

openssl的配置文件:/etc/pki/tls/openssl.cnf
配置文件有三種策略:匹配、支持和可選:匹配指要求申請填寫的信息跟CA設置信息必須一致,支持指必須填寫這項申請信息,可選指可有可無
♣ 1、創建CA所需要的文件
touch /etc/pki/CA/index.txt 生成證書索引數據庫文件
echo 01 > /etc/pki/CA/serial 指定第一個頒發證書的序列號
♣ 2、 創建CA自簽證書
? 生成私鑰
cd /etc/pki/CA/
(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
? 生成自簽名證書
openssl req -new -x509 –key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
? 查看簽名證書信息
openssl x509 -in cacert.pem -noout -text
? 選項:
-new: 生成新證書簽署請求
-x509: 專用於CA生成自簽證書
-key: 生成請求時用到的私鑰文件
-days n:證書的有效期限
-out /PATH/TO/SOMECERTFILE: 證書的保存路徑
♣ 3、頒發證書
? 生成私鑰在需要使用證書的主機生成證書請求:
給web服務器生成私鑰:
(umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)
1.生成證書申請文件:
openssl req -new -key/etc/pki/tls/private/test.key-days365-outetc/pki/tls/test.csr
2.將證書請求文件傳輸給CA
3.CA簽署證書,並將證書頒發給請求者
openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 365
註意:默認國家,省,公司名稱三項必須和CA一致
4.驗證證書有效性:
openssl verify -CAfile cacert.pem certs/app.crt
創建CA和證書管理
5.查看證書中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE-noout-text|issuer|subject|serial|dates
openssl ca -status SERIAL 查看指定編號的證書狀態
♣ 4、吊銷證書:
? 在客戶端獲取要吊銷的證書的serial
openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
? 在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致。
? 吊銷證書:
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
? 指定第一個吊銷證書的編號,註意:第一次更新證書吊銷列表前,才需要執行
echo 01 > /etc/pki/CA/crlnumber
? 更新證書吊銷列表
openssl ca -gencrl -out /etc/pki/CA/crl.pem
? 查看crl文件:
openssl crl -in /etc/pki/CA/crl.pem -noout -text
? 安裝mod_ssl工具,參考此工具實現腳本頒發證書:
? 安裝mode_ssl工具:yum install mod_ssl
? 查看工具相關信息:rpm -q --scripts mod_ssl

linux基礎篇-加密和安全(一)