墨菲定律 墨菲定律:一種心理學效應,是由愛德華·墨菲(Edward A. Murphy)提出的, 原話:如果有兩種或兩種以上的方式去做某件事情,而其中一種選擇方式將導 致災難,則必定有人會做出這種選擇 主要內容: 任何事都沒有錶面看起來那麼簡單 所有的事都會比你預計的時間長 會出錯的事總會出錯 如果 ...
墨菲定律 墨菲定律:一種心理學效應,是由愛德華·墨菲(Edward A. Murphy)提出的, 原話:如果有兩種或兩種以上的方式去做某件事情,而其中一種選擇方式將導 致災難,則必定有人會做出這種選擇 主要內容: 任何事都沒有錶面看起來那麼簡單 所有的事都會比你預計的時間長 會出錯的事總會出錯 如果你擔心某種情況發生,那麼它就更有可能發生 安全機制 信息安全防護的目標 保密性 Confidentiality 完整性 Integrity:數據確定完好,不能被篡改 可用性 Usability:read5(高可用性)系統的總體運行時間占全部時間的百分比,百分比越 高,可用性越高,百分比按年計算,%99.9 當機10小時 可控制性Controlability 不可否認性 Non-repudiation 安全防護環節 物理安全:各種設備/主機、機房環境 系統安全:主機或設備的操作系統 應用安全:各種網路服務、應用程式 (文件共用) 網路安全:對網路訪問的控制、防火牆規則(iptables -vnL iptables -F) 數據安全:信息的備份與恢復、加密解密 管理安全:各種保障性的規範、流程、方法 安全攻擊: STRIDE 1 Spoofing 假冒 (釣魚網站,可以通過看功能變數名稱辨別) 2 Tampering 篡改 (發郵件給tom mail -s test tom .或者ctrl+d保存退出郵件,,) 3 Repudiation 否認 4 Information Disclosure 信息泄漏 Denial of Service 拒絕服務DDOS攻擊 ping -f(盡對方cpu所能去ping對方)-s 34428 5 ddos"分散式攻擊",網路黑客發送大量的訪問請求,耗盡資源,網路對方無法進行服務 6 Elevation of Privilege 提升許可權(把普通用戶的許可權設置為管理員許可權) centos5上:1:useradd wang 2:su - wang 安全設計基本原則 1 使用成熟的安全系統 : 2 以小人之心度輸入數據 :用戶輸入的數據有可能是錯誤的數據,繞過密碼的檢查 select *(*表示所有欄位) from user (查詢user表中有沒有用戶賬號) SQL(註入攻擊)where username=‘toot’ and(shall中的&&) password=‘ ’ or ‘1’ = ‘1’ username=root password=magedu (只要一個為真全為真) password= ‘ or(shall中的或) ‘ 1’ = ‘ 1 ’ (構造了一個奇怪的口令繞過密碼檢查) 3 外部系統是不安全的,防火牆:非軍事化區(DMZ) 軍事化區:嚴禁外部訪問 防水牆:防止企業內部安全的攻擊,拒接用戶隨意的訪問企業內部 4 最小授權, 5 減少外部介面 6 預設使用安全模式:考慮使用SElinux 7 安全不是似是而非 8 從STRIDE(攻擊方式)思考 9 在入口處檢查:如地鐵的入口檢查 10 從管理上保護好你的系統 安全演算法 3A(認證,授權,審計) 常用安全技術 認證 :驗證身份方法:用戶名,口令等 授權 :用戶賬號不一樣授權不一樣 審計 : 記錄和安全相關的操作 安全通信 不安全的傳統協議 telnet、FTP、POP3等等;不安全密碼 http、smtp、NFS等等;不安全信息 Ldap、NIS、rsh等等;不安全驗證 密碼演算法和協議: 對稱加密 公鑰加密 單向加密 認證協議 對稱加密演算法 對稱加密:加密和解密使用同一個密鑰 key1=key2 eg:A (data) 明文 key1 (data) 密文 --------(傳輸) ------ key2( key1 (data)) B DES:Data Encryption Standard(數據加密標準),56bits(56位) 補充:ascii碼:把所有的數字或字母,符號等編寫為ascii碼,轉化為二進位使得電腦識別 3DES: DES加密3次 AES:Advanced(高級) (128, 192, 256bits)主流的加密 Blowfish,Twofish (商業演算法) IDEA,RC6,CAST5 特性: 1、加密、解密使用同一個密鑰,效率高,適合加密大量的數據 2、將原始數據分割成固定大小的塊,逐個進行加密 缺陷: 1、密鑰過多 2、密鑰分發 3、數據來源無法確認:(可能會收到假冒的加密數據) 非對稱加密演算法 非對稱加密演算法 key1 ! = key2 安全通行,數據來源確認 public key (公鑰,公開,到處發放) A pa sa secret key (私鑰,私有的) B pb sb eg 1A用 {pb加密(data)}------(傳輸) ----- B用sb解密(data) eg 2 Alice 發送 BOb 基於一對公鑰/密鑰對, 用密鑰對中的一個加密,另一個解密 • 接收者BOb 生成公鑰/密鑰對:P和S 公開公鑰P,保密密鑰S • 發送者 Alice 使用接收者的公鑰來加密消息M 將P(M)發送給接收者 • 接收者BOb 使用密鑰S來解密:M=S(P(M)) Alice :Pa公鑰,Sa私鑰 BOb :Pb公鑰,Sb私鑰 加密(Pb)------解密(Sb) Alice 發送 BOb ,,BOb只能解密,其他解不了 加密(Sa)------解密(Pa) Alice 發送 多用戶 ,,判斷出發出數據這是誰 公鑰加密:密鑰是成對出現 拿到公鑰是推算不出私鑰的,公鑰可以通過私鑰推出 公鑰:公開給所有人;public key 私鑰:自己留存,必須保證其私密性;secret key 特點:用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然 功能: 數字簽名:主要在於讓接收方確認發送方身份 對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰後發送給對方 數據加密:適合加密較小數據 缺點: 密鑰長,加密解密效率低下 演算法: RSA(加密,數字簽名) DES 加密1G數據 加密完2G 4m 8m DSA(數字簽名) DES 加密1G數據 加密完1G 1m 64小時 ELGamal eg:,1 確定數據安全的傳輸對方,確定數據傳輸的來源,用非對稱加密演算法實現 Pb {Sa(data}) 用sa簽名,再用pb加密-----用sb解密後,再用pa解密 eg: 2 確定數據安全的傳輸對方,確定數據傳輸的來源,用組合加密演算法實現 key(data+Sa(data))+pb(key) 解釋: 1 A用 key(data)對稱秘鑰加密+pb(key)再用B的公鑰加密key,B用私鑰解密key,得到數據 1 再用A的公鑰解密數據,在和解密Key的數據進行比對,確認數據的來源 實現數字簽名:(只要用私鑰加密就是數字簽名) • 發送者 生成公鑰/密鑰對:P和S 公開公鑰P,保密密鑰S 使用密鑰S來加密消息M 發送給接收者S(M) • 接收者 使用發送者的公鑰來解密M=P(S(M)) 結合簽名和加密 分離簽名 單向散列(hash運算)數據不一樣,hash值不同,實現數據的完整性檢驗 將任意數據縮小成固定大小的“指紋” • 任意長度輸入 • 固定長度輸出 • 若修改數據,指紋也會改變(“不會產生衝突”) • 無法從指紋中重新生成數據(“單向”) 功能: 數據完整性檢驗 常見算式 https://mirrors.aliyun.com md5: 128bits、sha1: 160bits、sha224sum,sha256、sha384、sha512 進行下麵的數據比較得到數據完整性的校驗 eg: md5sum /etc/fstab /etc/passwd > md5.log"將多個文件保存到一個文件中" md5sum --check md5sum -C md5.log :保存文件的hash值確認數據有沒有改變 md5.log 將現有的文件和已經存好的文件進行比對,出現ok數據就沒有被改過 常用工具 • md5sum | sha1sum [ --check ] file • openssl、gpg • rpm -V eg:實現對稱,非對稱,hash,進行加密:如下:1身份驗證,2數據安全 key(data+Sa{hash(data)})+Pb(key) 1 :A用對稱加密演算法,進行簽名並做hash運算,再用B的公鑰加密key 2: B用自己的公鑰解開key得到: (data+Sa{hash(data)}) 3:用A的公鑰解密得到hash(data) 再用原數據data做hash運算兩者進行比較,確定數據 的來源,如果兩者數據一樣。,那就確認數據包的來源是A 密鑰交換 密鑰交換:IKE( Internet Key Exchange ) 公鑰加密: DH (Deffie-Hellman):生成會話密鑰,由惠特菲爾德·迪菲(Bailey Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)在1976年發表,參 看如下:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange DH: A: g,p 協商生成公開的整數g, 大素數p B: g,p A:生成隱私數據 :a (a<p ),計算得出 g^a%p,發送給B B:生成隱私數據 :b,計算得出 g^b%p,發送給A A:計算得出 [(g^b%p)^x] %p = g^ab%p,生成為密鑰 B:計算得出 [(g^a%p)^y] %p = g^ab%p,生成為密鑰 應用程式:RPM 文件完整性的兩種實施方式 被安裝的文件 • MD5單向散列 • rpm --verify package_name (or -V) rpm -V檢驗數據包的每個文件,每次用rpm安裝的包,每個數據包的文件的hash值或者初始值存在資料庫中,過段時間,用-V檢查資料庫中得的每個文件的hash值,比對當前文件的hash值,如果不一樣,就會報提示: 發行的軟體包文件 • GPG公鑰簽名 • rpm --import(導入公鑰) /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat* • rpm --checksig pakage_file_name (or -K) rpm -k 檢驗數據包的每個文件 使用gpg實現對稱加密 對稱加密file文件 cp /etc/fstab /app/f1/ gpg -c file ls file.gpg 在另一臺主機上解密file gpg -o file -d file.gpg 實驗: 1:[root@centos7 ~]# cd /data 2:[root@centos7 /data]# cp /etc/fstab . 3:[root@centos7 /data]# gpg -c fstab 加密數據 輸入口令 4:[root@centos7 /data]# ll total 8 -rw-r--r--. 1 root root 541 Jul 9 21:23 fstab -rw-r--r--. 1 root root 311 Jul 9 21:25 fstab.gpg 5:[root@centos7 /data]# scp fstab.gpg 192.168.1.8: 發送加密的數據到另一主機 6:[root@centos6 ~]# file fstab.gpg 產看文件類型,格式 fstab.gpg: data 7:[root@centos6 ~]# gpg -d fstab.gpg 解密 8:[root@centos6 ~]# gpg -o fstab fstab.gpg (-0相當於重定向,生成文件) 使用gpg工具實現公鑰加密 在hostB主機上用公鑰加密,在hostA主機上解密 在hostA主機上生成公鑰/私鑰對 gpg --gen-key 在hostA主機上查看公鑰 cd .gnupg/ 查看生成的公鑰 gpg --list-keys 在hostA主機上導出公鑰到wang.pubkey gpg -a --export -o wang.pubkey 從hostA主機上複製公鑰文件到需加密的B主機上 scp wang.pubkey hostB: 如:scp wang.pubkey 172.18.56.56:/app/f1 在需加密數據的hostB主機上生成公鑰/私鑰對 gpg --list-keys gpg --gen-key 在hostB主機上導入公鑰 gpg --import wang.pubkey gpg --list-keys 用從hostA主機導入的公鑰,加密hostB主機的文件file,生成file.gpg gpg -e -r wangxiaochun file -e表示加密 -r:用誰的公鑰加密 file file.gpg 使用gpg工具實現公鑰加密 複製加密文件到hostA主機 scp fstab.gpg hostA: 在hostA主機解密文件 gpg -d file.gpg gpg -o file(解密的新的文件) -d file.gpg 刪除公鑰和私鑰 gpg --delete-keys wangxiaochun 刪除公鑰 gpg --delete-secret-keys wangxiaochun 刪除私鑰 實驗1 :[root@centos6 ~]# gpg --gen-key 在centos6上生成秘鑰對 Please select what kind of key you want: (那種演算法加密,預設RSA) What keysize do you want? (2048) 1024 (用多少位加密,預設1024) Key is valid for? (0) (有限期,預設十天) Real name: wangjin (起一個用戶的名字) Email address: (郵箱) Comment: (描述) Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o(0確定) 2:輸入秘鑰:(擔心私鑰被竊取,地私鑰用對稱秘鑰加密)空口令 3:[root@centos6 ~]# cd ~/.gnupg 4:[root@centos6 ~/.gnupg]# gpg --list -keys (查看生成的公鑰) 5: [root@centos6 ~/.gnupg]# gpg -a --export -o wang.pubkey (-a用ascii碼的文本方式導出 -o指定文件名 wang.pubkey 是自己起的文件名) 6:[root@centos6 ~/.gnupg]#scp wang.pubkey 192.168.56.56: (傳到centos7) 7:時間同步 centos6 ntpdate 172.18.0.1 vim /etc/ntp.conf server 172.18.0.1 iburst chkconfig ntpd on service ntpd start centos7 vim /etc/chrony.conf systemctl start chronyd systemctl is-enabled chronyd systemctl enable chronyd 8:[root@centos7 /data]#cp /root/wang.pubkey . 9:[root@centos7 /data]# gpg -e -r wangjin fstab -e表示加密 -r:用誰的公鑰加密 10:[root@centos7 /data]#scp fstab.gpg 192.168.1.8: 11:[root@centos6 ~]#gpg -o -d fstab.gpg 解密生成文件 CA和證書 :系統中內置根證書,免費申請證書的網站https://freessl.org Base64:A-Z a-z 0-9 + / 共64位 PKI(公共的秘鑰體系 公鑰,私鑰,證書 實現): Public Key Infrastructure 簽證機構:CA(Certificate Authority) 證書頒發機構,證明通訊雙方是合法連接的 註冊機構:RA 證書吊銷列表:CRL 證書存取庫: X.509:定義了證書的結構以及認證協議標準 版本號 序列號 簽名演算法 頒發者 有效期限 主體名稱 主體公鑰 CRL分發點 擴展信息 發行者簽名 證書獲取 證書類型: 證書授權機構的證書 (CA) 伺服器 (淘寶或天貓等,給電腦用) 用戶證書 (用戶用) 獲取證書兩種方法: • 使用證書授權機構 生成簽名請求(csr) 將csr發送給CA 從CA處接收簽名 • 自簽名的證書 (根CA) 自已簽發自己的公鑰 安全協議 https 底層是依賴LLS協議 1 SSL(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 功能:機密性,認證,完整性,重放保護 2 兩階段協議,分為握手階段和應用階段 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 協議的文本數據進行加密處理後,成為二進位形式傳輸 文字描述:client(客戶端) server(伺服器端) ca 1:https://server (客戶端發請求到伺服器端) 2:server-----client (伺服器端傳自己的證書到客戶端用CA的私鑰簽名伺服器的公鑰,) Sca(Pserver)+CA+server+expir (證書簽名,包括CA的證書,有效期之類的) 3:client (客戶端信任CA,所有提前裝系統的時候拿到CA的公鑰) Pca( Sca(Pserver))(用CA的公鑰進行解密)--------Pserver(得到伺服器的公鑰) 4:client 客戶端生成一個隨機數 random 12345 5:Pserver(12345)用獲取的伺服器的公鑰把12345進行加密-----------server 6:Server(Pserver(12345))(伺服器用自己的私鑰解密獲取12345) 7:client 12345(data)《-----》 伺服器端和客戶端共同獲得12345,以此傳輸數據 OpenSSL OpenSSL:開源項目 三個組件: openssl: 多用途的命令行工具,包openssl libcrypto: 加密演算法庫,包openssl-libs libssl:加密模塊應用庫,實現了ssl及tls,包nss openssl命令: 兩種運行模式:交互模式和批處理模式 openssl version:程式版本號 標準命令、消息摘要命令、加密命令 標準命令: enc, ca, req, ... 1:對稱加密: 工具:openssl enc, gpg 演算法:3des, aes, blowfish, twofish 2:enc命令: 幫助:man enc 加密:openssl enc -e -des3 -a -salt -in testfile-out testfile.cipher (-e加密 -des3=3DES 對稱秘鑰的加密演算法; -a=bese64編碼 -salt加鹽,鹽就是隨機數 解密:openssl enc -d -des3 -a -salt –in testfile.cipher-out testfile eg:[root@centos7 ~/data]# openssl enc -e -des3 -a -salt -in fstab -out fstab.des3 [root@centos7 ~/data]# openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab.des2 openssl ? 3:單向加密: 工具:md5sum, sha1sum, sha224sum,sha256sum… openssl dgst 4:dgst命令: 幫助:man dgst openssl dgst -md5 [-hex預設] /PATH/SOMEFILE openssl dgst -md5 testfile md5sum /PATH/TO/SOMEFILE eg:[root@centos7 ~/data]# openssl dgst sha1 fstab sha1: No such file or directory MD5(fstab)= ea10eb7312d3130f651eef33b184e79f [root@centos7 ~/data]# openssl dgst -sha1 fstab SHA1(fstab)= 69f52e22db64aaec6131513ff9fcb41791d80e80 16進位數 [root@centos7 ~/data]# sha1sum fstab 69f52e22db64aaec6131513ff9fcb41791d80e80 fstab 16進位數 5:MAC: Message Authentication Code,單向加密的一種延伸應用,用於實現 網路通信中保證所傳輸數據的完整性機制 CBC-MAC HMAC:使用md5或sha1演算法 6:生成用戶密碼: passwd命令: 幫助:man sslpasswd openssl passwd -1 -sal