Linux學習筆記:Linux服務以及服務的安全
一、數據加密和解密
進程間通信:
同一主機內的進程間通信:
發送信號(signal),
共享內存(shm),
semaphore
message queue, MQ, RabbitMQ
不同主機之間的進程間通信:
Socket-pair,套接字對兒;
三種類型的套接字:
流套接字(Socket_Stream):基於TCP協議通信的套接字;
數據報套接字(Socket_Dgram):基於UDP協議通信的套接字;
裸套接字,原始套接字(Socket_Raw):基於底層協議通信的套接字
套接字Socket:IP:PORT
進程的地址標識;
一個套接字就是指某個特定主機上的特定應用程序;
大多數情況下,網絡通信都是從客戶端到服務器的通信;對於服務器來說,必須要有套接字的監聽機制,即進程的監聽模式,而通常來講,把具有這種監聽模式的進程,稱為守護進程,或者叫服務進程;
服務進程所監聽的套接字資源,是在其啟動之前向內核申請註冊得到的;而且,套接字資源是所有的服務進程獨占的資源,具有排他性;
端口號:
0:默認沒有被使用;
1~1023:眾所周知的端口,固定的端口;
1024~49151: 註冊端口
MySQL:3306
Memcached:11211
Tomcat:8091
49152~65535:動態端口,為客戶端進程提供的隨機選擇端口
安全實現的目標:
完整性:integrity,保證信息不被篡改
可用性:availability,保證信息內在價值
威脅
威脅機密性的攻擊行為:
竊聽
嗅探
掃描
通信量分析
威脅完整性的攻擊行為:
更改
偽裝
重放
否認
威脅可用性的攻擊行為:
拒絕服務 (DoS)
安全解決方案:
技術:加密和解密:
傳統的加密方法:
替代加密算法;
置換加密算法;
現代的加密方法:
塊加密算法:
服務:安全服務:
身份認證;
訪問控制機制;
加密方案:
加密算法和密鑰;
加密算法:
對稱加密算法
公鑰加密算法
單向加密算法
密鑰交換算法
對稱加密算法:
加密和解密使用同一密鑰;
特性:
1.每對通信主機都需要保有一個相同密鑰,用於加密和解密;
2.將原始的數據分割成固定大小的塊逐個加密;
3.加密解密速度較快
缺陷:
1.加密解密所需要保有的密鑰數量過多;
2.密鑰分發過於困難
主流加密算法:
DES:Data Encryption Standard,數據加密標準;采用56bit密鑰分成64bit塊
NSA:美國國家安全局
3DES:
AES:Advanced Encryption Standard,高級加密標準;
AES128bit,AES192bit,AES256bit
當前NSA主流選擇
Blowfish
Twofish
IDEA
RC4,RC6
公鑰加密算法:
采用密鑰對加密
密鑰分為私鑰和由私鑰抽取生成的公鑰組成;
私鑰:512bit,1024bit,2048bit,4096bit,8192bit,16384bit;
特點:
1.使用密鑰對進行加密和解密;使用私鑰加密的數據,必須從中抽取出來的公鑰解密;使用公鑰加密,必須使用與之相對的私鑰才能解密;
私鑰:通過特定的工具創建生成,由使用者自己留存,務必保證其私鑰性;secret key或private key
公鑰:從私鑰中提取生成,公鑰可以公開給所有人使用,public key
2.密鑰長度都比較長,加密之後的數據的安全等級較高;
缺陷:
加密數據的時候,消耗的系統資源和時間都較多,很少用來加密大批量數據;
主要工作目的 用途:
數字簽名;主要用於讓接收方確認發送方的身份;使用發送方的私鑰加密數據,到了接收方之後,使用發送方的公鑰解密數據;
密鑰交換:發送數據方使用接收方的公鑰加密對稱密鑰,然後將加密後的對稱密鑰發給對方;
數據加密:通常用於加密小數據;
常用的公鑰加密算法:
RSA:數據加密,數字簽名;
DSA:數字簽名算法,只能實現數字簽名,有時該算法也被稱為DSS(數字簽名標準)
ELgamal:收費的算法
單向加密算法:
只能進行加密不能解密;從已知數據中提取密碼指紋;
特性:
1.定長輸出:
2.雪崩效應:
功能:
保證數據的完整性;
常用的算法:
md5:信息摘要算法的第五版
128bit定長輸出;
sha系列算法:
sha-1:安全的哈希算法,160bit定長輸出
sha224
sha256
sha384
sha512
密鑰交換算法:IKE
公鑰加密算法來實現;
DH算法:Deffie-Hellman
加密算法的聯合應用:
1.通信雙方互相交換證書,並到信任的CA進行證書認證;
2.發送方使用某種對稱加密算法對數據進行加密;加密後的數據使用單向加密計算其特征值,發送方再用自己的私鑰加密此特征值,以證明數據來源的可靠;發送方使用接收方的證書加密對稱密鑰;
3.接收方在收到數據之後,先使用自己的私鑰解密對稱密鑰,然後使用發送方的公鑰解密特征值,再利用相同的單向加密算法,重新結算加密數據的特征值;比較兩個特征值;如果特征值一致,則表明數據完整;再用解密出來的對稱密鑰解密出原始數據;
證書裏面主要包括:
擁有者名稱;
擁有者所提交的公鑰;
有效期;
證書的版本號;
證書的序列號;
簽發算法ID;
簽發CA的名稱;
主體名稱;
發證者的唯一標識;
發證者的數字簽名;
擴展信息
PKI:公鑰基礎設施;
證書的簽證機構:CA
註冊機構:RA
證書吊銷列表:CRL
證書存取庫:CAB
CA如何發揮其作用的:
1.通信雙方互相交換證書;
2.雙方協商加密算法;
3.雙方驗證證書的真偽
4.用CA的公鑰去解密證書中CA的簽名,能解密說明證書來源可靠;
5.用同樣的加密算法加密證書,取得特征值,與解密出來的特征值比較,如果想同,說明證書完整性可靠;
6.檢查證書的有效期是否在合法時間範圍,如果過期則證書不被認可;
7.檢查證書的主體名稱和此次通信的目標是否能夠對應;
SSL:安全的套接字層
1994年,網景公司最先聲明並實施;
TLS:傳輸層安全協議;
IETF:互聯網工程項目小組 1999年提出
TLS V1.0
2006年,TLS V1.1
2008年,提出TLS V1.2草案,將橢圓曲線加密算法引入TLS;至今未應用
分層設計:
1.最底層:基礎算法的原語的實現;AES,md5,sha...
2.向上一層:各種算法的基本實現;
3.再向上一層:各種算法組合實現的半成品;
4.最高層,用各種組件拼裝而成的各種成品密碼學協議軟件;
SSL/TLS的握手的四個階段:
1.客戶端向服務器索要證書並驗證證書;
Client Hello發送的信息內容
支持的協議的版本,如:TLS V1.2
客戶端生成一個隨機數,稍後用戶生成會話密鑰;
支持的加密算法,如:AES,DES,RSA等
支持的壓縮算法
2.雙方協商生成會話密鑰;
Server Hello發送的信息內容:
確認使用的加密協議的版本號,如:TLS V1.2
服務器生成一個隨機數,稍後用於生成會話密鑰
確認加密算法及壓縮算法;
3.雙方采用已經生成的會話密鑰進行安全加密的通信;
客戶端驗證服務器證書,在確認無誤後,取出其公鑰;
驗證服務器證書需要驗證下述內容:
驗證發證機構(CA);
驗證證書的完整性
驗證證書的持有者信息;
驗證證書有效期
驗證證書的吊銷列表
客戶端發送信息給服務器端:
一個隨機數,用於服務器上的公鑰加密;
編碼格式變更通知,表示隨後的信息都將用雙方已經協商好的加密算法和密鑰進行加密發送;
客戶端握手結束:
4.雙方互相通告握手結束的信息;
服務器收到客戶端發送來的此次握手階段的第三個隨機數;Pre_Master_key;計算生成本次會話所用到的會話密鑰,向客戶端發送相關信息;
編碼變更通知,表示隨後的信息都將用雙方已經協商好的加密算法和密鑰進行加密發送;
服務器端握手結束;
Linux學習筆記:Linux服務以及服務的安全