加密算法與安全認證


簡述:

重要的數據在互聯網中進行傳輸的時候必須保證數據的安全性,需從四個方面來做:

1.保證數據是從真正的源發送的,而不是其他人(源認證)

2.保證數據在傳輸的過程中沒有被篡改過(數據的完整性)

3.保證數據在傳輸的過程中別人看不懂(數據的私密性)

4.保證數據的不可否認性(不可否認性)

加密算法

1、對稱加密

概念:加密和解密使用同一個秘鑰

算法:DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5等

優點:效率高;將數據分割成固定大小的塊,逐個進行加密

缺點:每一個通信就需要一個秘鑰;秘鑰傳遞不安全;無法確定數據來源

2、非對稱加密

公鑰與私鑰:公鑰是公開給所有人的;私鑰是只有自己知道;通過私鑰可以推算出公鑰,但是通過私鑰無法退出公鑰;使用公鑰加密必須使用私鑰解密,或者使用私鑰加密必須使用公鑰解密;公私鑰必須成對出現

算法:RSA、DSA、ELGamal

優缺點:可以實現數字簽名來驗證數據來源;可以安全的交換對稱秘鑰;可以實現時間加密,但是對應大的數據解密時效率太低,適合加密少量數據

3、單向散列(hash)

特性:

1)雪崩效應:數據不同,摘要一定大不同

2)單向:不可反推數據

3)摘要長度固定大小

算法:md5:128、sha1:160、sha224、sha256、sha384、sha512

功能:用來驗證數據的完整性

4、秘鑰交換算法(DH)

1)A和B協商生成公開的整數a,大素數p

2)A:生成隱私數據 :x(x<p),計算得出 a^x%p,發送給B;B:生成隱私數據 :y(y<p),計算得出 a^y%p,發送給A

3)A:計算得出 [(a^y%p)^x] %p = a^xy%p,生成為密鑰;B:計算得出 [(a^x%p)^y] %p = a^xy%p,生成為密鑰

5、在安全通信過程中:

Alice:

1)原數據通過hash算法得出一個摘要;

2)用Alice的私鑰加密摘要;

3)將加密的摘要和原數據一塊使用對稱秘鑰加密;

4)再用BOB的公鑰將對稱秘鑰加密;

5)密文數據發送————>

Bob:

1)<————接受密文數據;

2)使用Bob的私鑰解密對稱秘鑰;

3)使用對稱秘鑰解密原數據和加密后的摘要;

4)使用Alice的公鑰解密摘要;

5)計算原數據的hash摘要並和解密后的摘要進行比較,從而確定原始數據的完整性。

CA和證書

數字證書認證機構(Certificate Authority,縮寫為CA),也稱為電子商務認證中心、電子商務認證授權機構,是負責發放和管理數字證書的權威機構,並作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。

PKI:公開密鑰基礎建設,包括簽證機構(CA)、注冊機構(RA)、證書吊銷列表(CRL)以及證書存取庫。

X.509:定義了證書的結構以及認證協議標准,包括版本號、序列號、簽名算法、頒發者、有效期限、主體名稱、主體公鑰、CRL分發點、擴展信息、發行者簽名等信息

CA證書頒發機構分根CA和子CA,根ca的證書為自簽證書,然后再為子CA頒發證書;用戶只要信任了根CA的證書則就是信任了子CA頒發的證書。

相關配置文件:/etc/pki/tls/openssl.cnf

####################################################################
[ ca ]
default_ca      = CA_default            #默認CA,在一台服務器可以搭建多個CA
[ CA_default ]                #默認CA的配置
dir             = /etc/pki/CA           #工作目錄
certs           = $dir/certs            #存放證書
crl_dir         = $dir/crl              #存放證書吊銷列表
database        = $dir/index.txt        #數據庫索引文件,需要手動創建
new_certs_dir   = $dir/newcerts         #新證書的路徑
certificate     = $dir/cacert.pem       #CA的證書文件
serial          = $dir/serial           #下一個要頒發的證書序列號,16進制
crlnumber       = $dir/crlnumber        #下一個要吊銷的證書序列號
crl             = $dir/crl.pem          #證書吊銷列表
private_key     = $dir/private/cakey.pem#CA的私鑰文件
RANDFILE        = $dir/private/.rand    #生成私鑰需要用到的隨機數文件
default_days = 365 #默認頒發證書的有效期 default_crl_days= 30 #30天發布一次證書吊銷列表 default_md = sha256 # preserve = no # policy = policy_match      #策略匹配,定義客戶端和服務端申請證書時的信息匹配策略 [ policy_match ] countryName = match      #必須匹配 stateOrProvinceName = match organizationName = match organizationalUnitName = optional   #不要求必須匹配 commonName = supplied    #必須提供 emailAddress = optional

示例:搭建一個私有CA

服務端搭建:

1、生成CA的私鑰

# (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

2、生成自簽證書

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's hostname) []:ca.test.com 
Email Address []:
  • -new: 生成新證書簽署請求
  • -x509: 專用於CA生成自簽證書
  • -key: 生成請求時用到的私鑰文件
  • -days n:證書的有效期限,單位是day,默認是365天
  • -out /PATH/TO/SOMECERTFILE: 證書的保存路徑

3、創建必要的文件

# touch /etc/pki/CA/index.txt
# echo 01 >/etc/pki/CA/serial
# openssl x509 -in /etc/pki/CA/cacert.pem -noout -text [-subject | -issuer | -dates]  查看證書信息

客戶端生成注冊申請請求:

1、生成私鑰

# (umask 077; openssl genrsa -out app.key 1024)

2、生成簽署請求

# openssl req -new -key app.key -out app.csr
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's hostname) []:app.test.com
Email Address []:
A challenge password []:
An optional company name []:

3、將簽署請求發送給CA

# scp app.csr 192.168.0.7:/etc/pki/CA/

服務器端簽署:

1、簽署頒發

# openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 100

2、將簽署后的證書發回客戶端

# scp /etc/pki/CA/certs/app.crt 192.168.0.6:/root

CA吊銷證書的管理

復制代碼
生成吊銷列表
[root@centos7 CA]# echo 01 >/etc/pki/CA/crlnumber
[root@centos7 CA]# openssl ca -gencrl -out crl.pem

查看吊銷列表
[root@centos7 CA]# openssl crl -in crl.pem -noout -text

查看證書狀態
[root@centos7 CA]# cat index.txt
V(正常證書)       180826054533Z           01      unknown /C=CN/ST=BJ/O=test/OU=it/CN=www.test.com
[root@centos7 CA]# openssl ca -status 01
Using configuration from /etc/pki/tls/openssl.cnf
01=Valid (V)(正常證書)

吊銷證書
[root@centos7 CA]# openssl ca -revoke newcerts/01.pem 
[root@centos7 CA]# cat index.txt
R  (已被吊銷)     180826054533Z   180518060712Z   01      unknown
/C=CN/ST=BJ/O=test/OU=it/CN=www.test.com

管理工具

gpg:GunPG

  • -c file:加密文件
  • -o file -d file.gpg:解密文件
  • --gen-key:生成非對稱秘鑰
  • --list-keys:查看已有公鑰
  • -e -r keyname file:使用指定公鑰加密文件
  • --import filename.pubkey:導入公鑰
  • -a --export -o filename.pubkey:導出公鑰
  • --delete-secret-keys keyname:刪除私鑰
  • --delete-keys keyname:刪除公鑰
# rngd -r /dev/urandom  #提供隨機數來生成秘鑰

openssl:

多用途的工具集

OpenSSL 是一個開源項目,其組成主要包括一下三個組件:
openssl:多用途的命令行工具
libcrypto:加密算法庫
libssl:加密模塊應用庫,實現了ssl及tls

openssl可以實現:秘鑰證書管理、對稱加密和非對稱加密 

對稱加密需要使用的標准命令為 enc ,用法如下:
常用選項有:
-in filename:指定要加密的文件存放路徑
-out filename:指定加密后的文件存放路徑
-salt:自動插入一個隨機數作為文件內容加密,默認選項
-e:可以指明一種加密算法,若不指的話將使用默認加密算法
-d:解密,解密時也可以指定算法,若不指定則使用默認算法,但一定要與加密時的算法一致
-a/-base64:使用-base64位編碼格式

生成隨機數需要用到的標准命令為 rand 

常用選項有:
-out file:將生成的隨機數保存至指定文件中
-base64:使用base64 編碼格式
-hex:使用16進制編碼格式

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM