天天看點

加密解密算法

Linux Service and Security

資料的加密和解密

OpenSSL(SSL/TLS)

OpenSSH(ssh)   dropbear

BIND(dns)

Web Server:

httpd(Apache Software Foundation,ASF:apache軟體基金會)

nginx(Engine X)——Tengine

——openresty

Web Archive:

LAMP:Linux + Apache + MariaDB(MySQL) + php

LNMP:Linux + nginx + MariaDB(MySQL) + php

LAMT:Linux + Apache + MariaDB(MySQL) + Tomcat(Weblogic,Websphare)

LNMT:Linux + nginx + MariaDB(MySQL) + Tomcat

FileServer:

FTP

Samba

NFS

Mail Server:

Postfix

dovecot

DHCP,PXE,Cobbler

防火牆:

Linux 2.6 -:iptables/netfilter

Linux 3.0 +:nftables

SELinux:

sudo,awk,pam,nsswitch

一、資料加密和解密

程序間通信:

同一主機内的程序間通信:

signal

shm

semaphore

message queue,MQ,RabbitMQ

不同主機之間的程序間通信:

Socket-pair,套接字對兒;

三種類型的Socket:

流套接字(Socket_Stream):基于TCP協定通信的套接字;

資料報套接字(Socket_Dgram):基于UDP協定通信的套接字;

裸套接字,原始套接字(Socket_Raw):基于底層協定通信的套接字

套接字Socket:IP:PORT

程序的位址辨別;

一個套接字就是指某個特定主機上的特定應用程式;

大多數情況下,網絡通信都是從用戶端到伺服器的通信;對于伺服器來說,必須要有套接字的監聽機制,即程序的監聽模式;而通常來講,把具有這種監聽模式的程序,稱為守護程序,或者叫服務程序;

服務程序所監聽的套接字資源,是在其啟動之前向核心申請注冊得到的;而且,套接字資源是所有的服務程序獨占的資源,具有排他性;

端口号:

0:預設沒有被使用;

1~1023:Well-Known,衆所周知的端口,固定的端口;

22, 23, 20, 21, 25, 67, 68, 69, 80, 110, 139, 143, 443, 445,...

1024~49151:注冊端口

MySQL:3306

Memcached:11211

Tomcat:8091

49152~65535:動态端口,為用戶端程序提供的随機選擇端口;

安全實作的目标:

機密性:confidentiality,保證資訊不洩漏;

完整性:integrity,保證資訊不被篡改;

可用性:availability,保證資訊内在價值;

威脅安全的行為:

威脅機密性的攻擊行為:

竊聽

嗅探

掃描

通信量分析

威脅完整性的攻擊行為:

更改

僞裝

重放

否認

威脅可用性的攻擊行為:

拒絕服務(DoS)

安全解決方案:

技術:加密和解密;

傳統的加密方法:

替代加密算法;

置換加密算法;

現代的加密方法:

塊加密算法;

服務:安全服務;

身份認證;

通路控制機制;

加密方案:

加密算法和密鑰:

加密算法:

對稱加密算法

公鑰加密算法

單向加密算法

密鑰交換算法

對稱加密算法:

加密和解密使用同一密鑰;

特性:

1.每對通信主機都需要保有一個相同密鑰,用于加密和解密;

2.将原始資料分割成固定大的塊,逐個加密;

3.加密和解密的速度比較快;

缺陷:

1.加密解密所需要保有的密鑰數量過多;

2.密鑰分發過于困難;

主流加密算法:

DES:Data Encryption Standard,資料加密标準;

56bit密鑰,64bit塊,

NSA:

3DES:triple DES,

AES:Advanced Encryption Standard,進階加密标準;

AES128bit,AES192bit,AES256bit

Blowfish

Twofish

IDEA

RC4,RC6

公鑰加密算法:

密鑰分為私鑰和由私鑰抽取生成的公鑰組成;

私鑰:512bit,1024bit,2048bit,4096bit,8192bit,16384bit;

特點:

1.使用密鑰對進行加密和解密:使用私鑰加密的資料,必須從中抽取出的公鑰解密;使用公鑰加密,必須使用與之相對的私鑰才能解密;

私鑰:通過特定的攻擊建立生成,由使用者自己留存,務必保證其私密性;secret key或private key;

公鑰:從私鑰中提取生成,公鑰可以公開給所有人使用;public key;

2.密鑰長度都比較長,加密之後的資料的安全等級較高;

加密資料的時候,消耗的系統資源和時間都較多;很少用來加密大批量資料;

用途:

數字簽名:主要用于讓接收方确認發送方的身份;使用發送方的私鑰加密資料,到了接收方之後,使用發送方的公鑰解密資料;

密鑰交換:發送資料的一方使用接收方的公鑰加密對稱密鑰,将加密後的對稱密鑰發給對方;

資料加密:通常用于加密小資料;

常用的公鑰加密算法:

RSA:加密,數字簽名;

DSA:Digital Signature Algorithm,數字簽名算法;隻能實作數字簽名的功能;有時候該算法被稱為DSS,Digital Signature Standard;

ELgamal:

單向加密算法:

隻能進行加密不能解密;從已知資料中提取密碼指紋;

1.定長輸出;

2.雪崩效應;

功能:

保證資料的完整性;

常用的算法:

md5:Message Digest Version 5,資訊摘要算法的第5版;

128bit定長輸出;

sha系列:

sha-1:Secure Hash Algorithm,安全雜湊演算法;160bit定長輸出;

sha224:

sha256:

sha384:

sha512:

密鑰交換算法:IKE(Internet Key Exchange)

公鑰加密;

DH算法:Deffie-Hellman

A:p, g

B:p, g

A:x

B:y

A:p^x%g   ---->  B:(p^x%g)^y == p^xy%g

B:p^y%g   ---->  A:(p^y%g)^x == p^yx%g

加密算法的聯合應用:

1.通信雙方互相交換證書,并到信任的CA進行證書驗證;

2.發送方使用某種對稱加密算法對資料進行加密;對加密後的資料使用單向加密計算其特征值;發送方再用自己的私鑰加密此特征值,以證明資料來源的可靠;發送方使用接收方的證書加密對稱密鑰;

3.接收方在收到資料之後,先使用自己的私鑰解密對稱密鑰;然後使用發送方的公鑰解密特征值,再利用相同的單向加密算法,重新結算加密資料的特征值;比較兩個特征值;如果特征值一緻,則表明資料完整;再用解密出來的對稱密鑰解密出原始資料;

國際标準化組織(ISO)定義了證書的結構和認證标準:X.509協定标準:

證書裡面主要包括:

擁有者的名稱;

擁有者所送出的公鑰;

有效期;

證書的版本号;

證書的序列号;

簽發算法ID;

簽發CA的名稱;

主體名稱;

發證者的唯一辨別;

發證者的數字簽名;

擴充資訊;

PKI:Public Key Infrastructure,公鑰基礎設施;

證書的簽證機構:CA

注冊機構:RA

證書吊銷清單:CRL,Certification Revoke List;

證書存取庫:CAB,Certification Access Base;

CA如何發揮其作用的:

1.通信雙方交換證書;

2.雙方協商加密算法;

3.雙方驗證證書的真僞;

4.用CA的公鑰解密證書中CA的簽名,能解密說明證書來源可靠;

5.用通用的加密算法加密證書,取得特征值;與解密出來的特征值比較,如果相同,說明證書完整性可靠;

6.檢查證書的有效期是否在合法時間範圍,如果過期則證書不被認可;

7.檢查證書的主體名稱和此次通信的目标是否能夠對應;

SSL:Secure Socket Layer,安全的套接字層;

1994年,Netscape(網景)公司最先聲明并實施;

SSL V1.0

SSL V2.0

SSL V3.0

TLS:Transport Layer Security,傳輸層安全;

IETF:Internet Engineering Task Force,網際網路工程項目小組;

1999年提出;

TLS V1.0

2006年,TLS V1.1

2008年,TLS V1.2草案,将橢圓曲線加密算法引入TLS;

分層設計:

1.最底層:基礎算法的原語的實作;AES,md5,sha……

2.向上一層:各種算法的基本實作;

3.再向上一層:各種算法組合實作的半成品;

4.最高層,用各種元件拼裝而成的各種成品密碼學協定軟體;

SSL/TLS的handshake(握手)的四個階段:

1.用戶端向伺服器索要證書并驗證證書;

Client Hello發送的資訊内容:

支援的協定的版本,如:TLS V1.2;

用戶端生成一個随機數,稍後用于生成會話密鑰;

支援的加密算法,如:AES,DES,RSA等;

支援的壓縮算法;

2.雙方協商生成會話密鑰;

Server Hello發送的資訊内容:

确認使用的加密協定的版本号,如:TLS V1.2;

伺服器生成一個随機數,稍後用于生成會話密鑰;

确認加密算法及壓縮算法;

3.雙方采用已經生成的會話密鑰進行安全加密的通信;

用戶端驗證伺服器證書,在确認無誤後,取出其公鑰;

驗證伺服器證書需要驗證下述内容:

驗證發證機構(CA);

驗證證書的完整性;

驗證證書的持有者資訊;

驗證證書的有效期;

驗證證書的吊銷清單;

用戶端發送資訊給伺服器端:

一個随機數,用于伺服器上的公鑰加密;

編碼格式變更通知,表示随後的資訊都将用雙方已經協商好的加密算法和密鑰進行加密發送;

用戶端握手結束;

4.雙方互相通告握手結束的資訊;

伺服器收到用戶端發送來的此次握手階段的第三個随機數Pre-Master_key;計算生成本次會話所用到的會話密鑰,向用戶端發送相關資訊:

編碼變更通知,表示随後的資訊都将用雙方已經協商好的加密算法和密鑰進行加密發送;

伺服器端握手結束;

繼續閱讀