在一次網路通訊或者是程序通訊中,如果傳輸資料採用明文的方式,那麼很容易被第三方"竊聽"到,安全性難以保障。
而所謂加密是讓資料從明文變成密文,傳輸過程中是密文,傳送過去之後對方接收到的也是密文。——可以理解為密文就是亂碼,看不出內在的任何意義,通常也都是逐位對應的。
在接收方接收到密文之後只有把它還原為原來的樣子才可以理解對方說的具體是什麼,此過程就叫做解密。
所謂系統的安全要實現的目標應該包括:機密性-confidentiality,完整性-integrity 和可用性-**ailability;在通訊中威脅到上述三者的攻擊行為分別有:
1.威脅機密性的攻擊行為:竊聽、嗅探、掃瞄、通訊量分析
2.威脅完整性的攻擊行為:更改、偽裝、重放、否認
3.威脅可用性的攻擊行為: 拒絕服務(dos)
針對各種威脅安全性攻擊行為,我們分別從技術層面和服務層面出發,有不同的解決方案。
技術:資料的加密和解密;服務:安全服務;
今天來初探linux世界裡的加密和解密是怎麼一回事;
加密需要兩個東西,演算法+金鑰;
加密的演算法分為四類:
對稱加密演算法-通俗的說就是用什麼金鑰加密就用同乙個金鑰進行解密;
其優勢所在就是加密速度較快;但劣勢也非常明顯:
對稱加密無法保證完整性。被截獲了,隨破解不出來裡面的密文是什麼,但是,截獲者插入一些字元篡改內容,再傳送給接收者;接收者在接收到被篡改的密文以後,解密出來,發現內容似乎沒有什麼意義,此時,怎樣確定此密文就是自己信任的對方傳送過來的呢?所以完整性是無法得到保證的。
這種演算法的主流演算法有:des,aes,3des等等;
公鑰加密演算法-採用公鑰加密,私鑰解密;
公鑰加密也叫做非對稱加密,加密解密採用同一組的公鑰和私鑰。
先來解釋一下什麼是公鑰私鑰:
私鑰(seceret key|private key):是通過特定的工具建立生成;由使用者自己留存。務必保證其私密性;
公鑰(public key):從私鑰中提取生成,可以公開給所有人使用;
這種方式加密的資料安全等級高,代價就是金鑰很長,從512位、768位、1024位、2048位、4096位、8192位不等;由此也對系統的效能提出了更高的要求,例如此種加密技術的rsa的發展似乎遇到了瓶頸。因此,很少用公鑰加密演算法來加密大批量的資料;
單項加密演算法 - 提取資料特徵碼,只能由明文計算出密文,也就是只可加密不能解密;
因此此種演算法的功能就是保證資料的完整性,防止被篡改;
常見的演算法:md5、sha1(安全hash演算法)、sha2、sha256、sha512、sha3(目前最新的)
金鑰加密演算法-ike
所謂ike:
1、ipsec使用ike來完成對等體之間的認證和金鑰的生成以及交換
2、協商和維護安全關聯(sa)引數
3、sa是乙個集合,包含了加密演算法,認證方式等等
4、通過認證,防止偽裝攻擊
5、自動產生金鑰,並自動更新金鑰
6、動態,安全的交換金鑰
在實際應用裡,通訊雙方資料加密進行以下步驟:
1.通訊雙方互相交換證書,並到信任的ca進行證書驗證;
2.傳送方使用某種對稱加密演算法對資料進行加密;對加密後的資料使用單向加密,計算其特徵值;傳送方再用自己的私鑰加密此特徵值,以證明資料**的可靠;傳送方使用接收方的證書加密對稱金鑰;
3.接收方在收到資料後,先使用自己的私鑰解密對此金鑰;然後使用傳送方的公鑰特徵值,再利用相同的單向加密演算法;
不使用ssl/tls的http通訊,就是不加密的通訊。所有資訊明文傳播,帶來了三大風險。
(1)竊聽風險(e**esdropping):第三方可以獲知通訊內容。
(2)篡改風險(tampering):第三方可以修改通訊內容。
(3)冒充風險(pretending):第三方可以冒充他人身份參與通訊。
ssl/tls協議是為了解決這三大風險而設計的,希望達到:
(1)所有資訊都是加密傳播,第三方無法竊聽。
(2)具有校驗機制,一旦被篡改,通訊雙方會立刻發現。
(3)配備身份證書,防止身份被冒充。
ssl/tls協議的基本思路是採用公鑰加密法,也就是說,客戶端先向伺服器端索要公鑰,然後用公鑰加密資訊,伺服器收到密文後,用自己的私鑰解密。
它將將公鑰放在數字證書中。只要證書是可信的,公鑰就是可信的。這樣保證了公鑰不會被篡改;
數字證書裡包含的內容:
擁有者的名稱
擁有者所提交的公鑰
有效期證書的版本號
證書的序列號
簽發演算法id
簽發ca的名稱
主體名稱
發證者唯一標識
發證者的數字簽名
擴充套件資訊
因此,ssl/tls協議的基本過程是這樣的:
(1) 客戶端向伺服器端索要並驗證公鑰。
(2) 雙方協商生成"對話金鑰"。
(3) 雙方採用"對話金鑰"進行加密通訊。
前兩步也叫握手階段 - handshake
ssl/tsl的handshake的四個階段:1.客戶端向伺服器索要證書並驗證;
client_hello傳送的資訊內容:
支援的協議版本,如:tls v1.2...
客戶端生成的隨機數,可能在之後充當加密的金鑰;
支援的加密演算法,如aes,sha...
協商各自支援的壓縮演算法。非必
2.雙方協商生成會話金鑰;dh演算法交換金鑰
server_hello的內容:
確認使用的加密協議的版本號。
伺服器生成乙個隨機數,稍後用於生成會話金鑰
確認加密演算法及壓縮演算法;
3.雙方採用生成的會話金鑰進行安全加密的通訊;
客戶端驗證伺服器證書,在確認無誤後,取出其公鑰;
驗證伺服器證書需要驗證下述內容:
驗證發證機構ca;
驗證證書的完整性;
驗證證書的持有者資訊;
驗證證書的有效期
驗證證書的吊銷列表;
客戶端傳送資訊給伺服器:
1.乙個隨機數,用於伺服器上的公鑰加密
2.編碼格式變更的通知,表示隨後的資訊都將用雙方已經協商好的加密演算法和金鑰進行加密傳送;
客戶端握手結束;
4.雙方互相通告握手結束的資訊;
伺服器會收到客戶端傳送來的此次握手階段的第三個隨機數 pre-master_key
計算本次會話所用到的會話金鑰,向客戶端傳送相關資訊;
編碼變更通知,表示隨後的資訊都將用雙方已經協商好的加密演算法和金鑰進行加密傳送;
伺服器端握手結束;
資料加密與解密
資料加密與解密 md5 sha1 不是加密演算法 計算機資料加密演算法 對稱加密演算法 分對稱加密演算法 對稱加密 傳送方和接收方金鑰相同 對稱加密的安全性 1 加密演算法的安全性 2 金鑰的管理 對稱加密的優點 1 演算法公開 2 計算量小 3 加密的速度快 4 加密效率高 對稱加密的缺點 1 金...
DES資料加密 解密
des資料加密 目標值 金鑰 加密值 public static string encrypt string targetvalue,string key public static string decrypt string targetvalue,string key 定義des加密物件 var...
資料報加密解密
private static byte keys 金鑰 private static string key caijinhao 密匙 region des加密字串 des加密字串 待加密的字串 加密金鑰,要求為8位 加密成功返回加密後的字串,失敗返回源字串 public static string ...