信息安全——密碼學(下)

接着上文繼續介紹,這篇主要來介紹消息摘要、非對稱加密、數字簽名、 keytool工具的使用等知識,文章最後會補充一些專有名詞的介紹。

一、消息摘要

消息摘要定義:

消息摘要(Message Digest)又稱爲數字摘要(Digital Digest)。消息摘要由一個單向Hash加密函數對消息進行作用而產生。爲了保證文件或者值的安全,使用消息摘要生成的值是不可以篡改的。

指把任意長的輸入消息數據轉化成固定長度的輸出數據的一種密碼算法,又稱爲散列函數、哈希函數和雜湊函數、單向函數等。

消息摘要特點

無論輸入的消息有多長,計算出來的消息摘要的長度總是固定的。例如應用MD5算法摘要的消息有128個比特位,用SHA-1算法摘要的消息最終有160比特位的輸出。

只要輸入的消息不同,對其進行摘要以後產生的摘要消息也必不相同,但相同的輸入必會產生相同的輸出。消息摘要是單向、不可逆的

常見摘要算法:MD5、SHA1、SHA256、SHA512、SM3

MD5算法 : 摘要結果16個字節, 轉16進制後32個字節
SHA1算法 : 摘要結果20個字節, 轉16進制後40個字節
SHA256算法 : 摘要結果32個字節, 轉16進制後64個字節
SHA512算法 : 摘要結果64個字節, 轉16進制後128個字節

說明:摘要算法所產生的固定長度的輸出數據稱作摘要值、散列值或哈希值。==摘要算法沒有密鑰。

二、非對稱加密

在介紹非對稱加密之前,先來回憶一下對稱加密。

1、對稱算法:

定義:指加密密鑰和解密密鑰相同的密碼算法。

分類
流密碼算法:又稱序列密碼算法,每次加密或解密一位或一字節的明文或密文。
分組密碼算法:將明文(密文)分成固定長度的數據塊(比特塊或字節塊),用同一密鑰和算法對每一明文(密文)塊加密(解密)後得到等長的密文(明文)塊,然後將密文(明文)塊按照順序組合起來最終得到密文(明文)。

常見密碼算法

流密碼算法:RC4
分組密碼算法:DES、IDEA、RC2、AES、SM4

2、非對稱算法:

定義:指加密密鑰和解密密鑰不相同的密碼算法,從一個密鑰很難推導出另一個密鑰,又稱爲公開密鑰算法或公鑰算法。

分類:公鑰和私鑰

常見非對稱算法包括:RSA、DH、DSA、ECDSA、ECC、SM2等

非對稱加密特點:

① 非對稱加密算法又稱現代加密算法
②與對稱加密算法不同,非對稱加密算法需要兩個密鑰:公開密鑰(publickey) 和私有密(privatekey)
③公開密鑰和私有密鑰是一對
④如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密
⑤如果用私有密鑰對數據進行加密,只有用對應的公開密鑰才能解密
⑥因爲加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法
⑦加密和解密使用不同的密鑰
⑧處理數據的速度較慢, 因爲安全級別高

非對稱加密示例

首先生成密鑰對, 公鑰爲(5,14), 私鑰爲(11,14) ,A具有公鑰,B具有私鑰,現在A希望將原文2發送給B, A使用公鑰加密數據。2的5次方mod 14 = 4 , 將密文4發送給B,B使用私鑰解密數據, 4的11次方mod14 = 2, 得到原文2。

說明:上面的例子說明這個密鑰由B創建,因爲私鑰只有一個人知道,那就是創建密鑰的那個人。

三、數字簽名

一套數字簽名通常定義兩種互補的運算,一個用於簽名,另一個用於驗證。數字簽名是非對稱密鑰加密技術與數字摘要技術的應用。

私鑰用於簽名,因爲私鑰只有一個人知道,也具有防抵賴性(有效性);公鑰是每個人都可以知道,可以用於驗證信息是不是由私鑰持有者發出的。(完整性)

下面來簡單理解一下數字簽名:相信我們都寫過信,在寫信的時候落款處總是要留下自己的名字,用來表示寫信的人是誰,我們籤的這個字就是生活中的簽名。

而數字簽名呢?其實也是同樣的道理,它的含義是:在網絡中傳輸數據時,給數據添加一個數字簽名,表示是誰發的數據,而且還能證明數據沒有被篡改。(必須用私鑰生成數字簽名!)

數字簽名的主要作用就是保證了數據的有效性(驗證是誰發的)和完整性(證明信息沒有被篡改)。下面我們就來好好地看一下它的底層實現原理是什麼樣子的。

數字簽名基本原理

A 的公鑰公開,私鑰保密 ,A 和 B 都使用同樣的摘要算法 HASH。

  1. A 給 B 發送一段數據data,首先 A 使用 HASH 算法生成 data 的數字摘要 digestA,然後利用A的私鑰對數字摘要 digestA 進行加密生成 digestEncodeA ,然後將 data 和 digestEncodeA 一起發送給B。
  2. B 收到 A 發過來的 data 和 digestEncodeA 以後,首先使用 HASH 算法生成 data 的數字摘要 digestB ,然後用 A 的公鑰對 digestEncodeA 進行解密得到數字摘要 digestDecodeB,然後如果 digestB = digestDecodeB ,那麼標明 data 是由 A 發送過來的 ,否則不是。

數字簽名是非對稱加密算法與數字摘要技術的應用,數字摘要驗證了原文是否被篡改、公鑰私鑰保證了數字摘要的安全性,兩者配合使用安全性高,速度快。

數字簽名(電子簽名)總結:

  1. 使用私鑰對電子文檔進行加密操作後的結果稱作數字簽名。

  2. 數字簽名目前只能採用非對稱密碼算法實現。

  3. 數字簽名的技術流程描述如下:

    i.信息發送者使用摘要算法對信息生成信息摘要;
    ii.信息發送者使用自己的私鑰對信息摘要進行簽名(加密);
    iii.信息發送者把信息本身和已簽名的信息摘要一起發送出去;
    iv.信息接收者使用相同的摘要算法對接收的信息本身生成新的信息摘要;
    v.信息接收者使用信息發送者的公鑰對已簽名的信息摘要進行驗籤(解密),
    	獲得信息發送者的信息摘要;
    vi.信息接收者比較這兩個信息摘要是否相同,如果相同則確認信息發送者的身份和信息沒
    	有被修改過;否則,則表示被修改過;
    

四、數字證書

上面提到,當我們對簽名進行驗證時,需要用到公鑰。如果公鑰是僞造的,那我們無法驗證數字簽名了,也就根本不可能從數字簽名確定對方的合法性了。這時候證書就閃亮登場了。我們可能都有考各種證書的經歷,比如說普通話證書,四六級證書等等,但是歸根結底,到任何場合我們都能拿出我們的證書來證明自己確實已經考過了普通話,考過了四六級。這裏的證書也是同樣的道理。

如果不理解證書的作用,我們可以舉一個例子,比如說我們的畢業證書,任何公司都會承認。爲什麼會承認?因爲那是國家發得,大家都信任國家。也就是說只要是國家的認證機構,我們都信任它是合法的。

那麼這個證書是如何生成的呢?我們再來看一張圖:
在這裏插入圖片描述
數字證書定義:

  1. 通俗的講,數字證書可想象成一個“網絡版的身份證”。數字證書裏包含姓名、性別等身份信息,更重要的是也包含一個公鑰。每個用戶都擁有一個數字證書和一個私鑰,該私鑰與數字證書中的公鑰配對,數字證書可以公開,但私鑰必須保密。對於個人私鑰,目前均採用USBKey方式,俗稱爲U盾。
  2. 是一種特殊的文件格式,包含用戶身份信息、用戶公鑰信息和CA中心的數字簽名。用戶身份信息包括姓名或名稱、單位、城市、國家等。
  3. X.509標準規定了數字證書的具體格式;
  4. 由於數字證書中包含CA私鑰的數字簽名,使用CA公鑰對數字證書中CA私鑰的數字簽名進行解密處理後,就可立即判斷該數字證書是否被篡改,因此數字證書具有防僞性;
  5. 由於數字證書中不包含祕密信息,因此數字證書可公開發布;

下面來對頒發數字證書的CA做一下介紹,什麼是CA呢?

  1. 專門負責頒發數字證書的系統稱爲CA系統,負責管理並運營CA系統的機構稱作爲CA中心。

  2. 爲證書權威,是Certificate Authority的縮寫,也稱作CA中心或證書認證中心,是一種特殊的密鑰管理中心,擁有自己的公鑰和私鑰,負責給用戶簽發數字證書。即使用CA中心私鑰對用戶身份信息和公鑰信息進行加密處理(簽名)後形成數字證書。

  3. CA中心爲每個用戶簽發包含用戶公鑰的數字證書,而用戶私鑰只有用戶自己保管,CA中心及每個用戶都不知道其他用戶的私鑰。

  4. CA中心擁有自己的公鑰和私鑰,使用其私鑰給用戶簽發數字證書,也包含CA中心自己。具體簽發過程如下:

    i.將用戶身份信息和用戶公鑰信息,按照特定格式組成數據D;
    ii.選擇摘要算法對數據D進行計算得到摘要H;
    iii.使用CA私鑰對摘要H進行加密得到數字簽名S;(獲得數字簽名)
    iv.將用戶身份信息、用戶公鑰信息和數字簽名S,按照特定格式就可組成數字證書。
    

我們可以拿着我們的信息向數字證書頒發機構CA去申請數字證書。

五、數字信封

  1. 數字信封並不需要分發和管理對稱密鑰,而是隨機產生對稱密鑰,採用對稱密碼算法對大批量數據進行加密,並採用非對稱密碼算法對該對稱密鑰進行加密;解密時,先用非對稱密碼算法解密後獲得對稱密鑰,然後使用對稱密碼算法解密後獲得數據明文。

  2. 數字信封機制的具體流程如下:

    i.消息發送方需要預先獲得消息接收方的公鑰;
    ii.消息發送方隨機產生對稱密鑰,並用該密鑰和對稱算法對消息進行加密;
    iii.消息發送方用消息接收方的公鑰和非對稱算法對上述對稱密鑰進行加密;
    iv.消息發送方將消息密文和對稱密鑰密文一起發送給消息接收方;
    v.消息接收方收到消息密文和對稱密鑰密文;
    vi.消息接收方使用自己的私鑰和非對稱算法對對稱密鑰密文進行解密後獲得對稱密鑰明文;
    vii.消息接收方使用上述對稱密鑰和對稱算法對消息密文解密後獲得消息明文;
    

六、keytool工具使用

keytool工具路徑:C:\Program Files\Java\jre1.8.0_91\bin
在這裏插入圖片描述
常用命令:
生成keypair

keytool -genkeypair
keytool -genkeypair -alias lisi(後面部分是爲證書指定別名,否則採用默認的名稱爲mykey)

看看keystore中有哪些項目:

keytool -list或keytool -list -v
keytool -exportcert -alias lisi -file lisi.cer

生成可打印的證書:

keytool -exportcert -alias lisi -file lisi.cer –rfc

顯示數字證書文件中的證書信息:

keytool -printcert -file lisi.cer

直接雙擊lisi.cer,用window系統的內置程序打開lisi.cer

生成私鑰公鑰

採用 RSA 算法生成公鑰和私鑰,創建一個文件夾,在該文件夾下執行如下命令行:

keytool -genkeypair -alias scorpios -keyalg RSA -keypass scorpios 
		-keystore scorpios.jks -storepass scorpios 

Keytool 是一個java提供的證書管理工具

-alias:密鑰的別名 
-keyalg:使用的hash算法 
-keypass:密鑰的訪問密碼 
-keystore:密鑰庫文件名,xc.keystore保存了生成的證書 
-storepass:密鑰庫的訪問密碼 

查詢證書信息

keytool -list -keystore scorpios.jks

刪除別名

keytool -delete -alias guigu -keystore scorpios.jsk

導出公鑰

openssl是一個加解密工具包,這裏使用openssl來導出公鑰信息。

安裝 openssl:http://slproweb.com/products/Win32OpenSSL.html

安裝資料目錄下的Win64OpenSSL-1_1_0g.exe

配置openssl的path環境變量,如下圖:
在這裏插入圖片描述
本教程配置在C:\OpenSSL-Win64\bin

cmd進入scorpios.jks文件所在目錄執行如下命令(如下命令在windows下執行,會把-變成中文方式,請將它改成英文的-):

keytool -list -rfc --keystore scorpios.jks | openssl x509 -inform pem -pubkey

下面段內容是公鑰

-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvFsEiaLvij9C1Mz+oyAm
t47whAaRkRu/8kePM+X8760UGU0RMwGti6Z9y3LQ0RvK6I0brXmbGB/RsN38PVnh
cP8ZfxGUH26kX0RK+tlrxcrG+HkPYOH4XPAL8Q1lu1n9x3tLcIPxq8ZZtuIyKYEm
oLKyMsvTviG5flTpDprT25unWgE4md1kthRWXOnfWHATVY7Y/r4obiOL1mS5bEa/
iNKotQNnvIAKtjBM4RlIDWMa6dmz+lHtLtqDD2LF1qwoiSIHI75LQZ/CNYaHCfZS
xtOydpNKq8eb1/PGiLNolD4La2zf0/1dlcr5mkesV570NxRmU1tFm8Zd3MZlZmyv
9QIDAQAB
-----END PUBLIC KEY-----

將上邊的公鑰拷貝到文本public.key文件中,合併爲一行,可以將它放到需要實現授權認證的工程中。

七、專有名詞及補充說明

1、當從CA獲得數字證書後,使用CA中心的公鑰對數字證書中私鑰的簽名進行解密處理後,就可驗證該證書是否被篡改,從而確認公鑰與用戶身份的映射關係。只要保證CA中心私鑰的安全性,就能保證數字證書很難被篡改,從而保證了公鑰與用戶映射關係很難被篡改。

2、用戶在驗證數字證書是否被篡改時,必須首先獲得CA中心的公鑰。爲方便用戶識別CA中心的公鑰,CA中心也爲自己簽發數字證書,該證書包含CA中心公鑰、CA中心身份信息和CA中心私鑰的簽名。

3、數字證書的應用:基於數字證書可實現四種基本安全功能:身份認證、保密性、完整性和抗抵賴性

4、PKI

所有與數字證書相關的各種概念和技術,統稱爲PKI(Public Key Infrastructure)
PKI的主要功能是綁定證書持有者的身份和相關的密鑰對
PKI的本質:是把非對稱密鑰管理標準化

5、LDAP

(1)、CA中心存儲着所有用戶的數字證書,爲方便用戶快速獲得交易對方的數字證書,避免CA中心稱爲瓶頸,PKI又引入了LDAP技術,通過LDAP方式對外提供證書查詢或下載服務。

(2)、LDAP爲輕量目錄訪問協議,是Light-weight Directory Access Protocol縮寫;

6、CRL

(1)、當用戶私鑰泄露後,CA中心有責任將該用戶的證書標記爲失效,爲方便用戶獲得證書狀態,PKI引入了CRL和OCSP技術;
(2)、CRL爲證書作廢列表,是Certificate Remocation List的縮寫,也稱爲證書黑名單,是一種特殊的文件格式,包含:所有失效證書清單、下次CRL生成時間和CA中心私鑰的簽名;
(3)、CA中心定期生成CRL,並將下次生成時間寫入CRL中,方便用戶按時定期下載CRL;

7、OCSP

(1)、爲了解決CRL滯後的缺陷,避免給高實時性或高風險交易造成重大損失,PKI引入了OCSP,對用戶提供實時的證書狀態查詢服務;
(2)、OCSP爲在線證書狀態協議,是Online Certificate Status Protocol的縮寫;
(3)、當用戶需要實時查詢對方證書是否有效時,可通過OCSP協議實時訪問CA中心獲得對方證書的當前狀態;

8、其他PKI標準

(1)、除與CA直接相關的上述標準外,PKI還包括其他很多標準,如密碼相關標準、證書應用標準、證書存儲標準、證書訪問標準、CA運營標準等

i.密碼相關標準包括:ASN.1、DER、HMAC、DES、AES、RSA、ECC等
ii.證書應用標準包括:SSL/TLS、SET、WAP、IPSec、TSP、PMI等
iii.證書存儲標準包括:PKCS系列標準、ISO 7816系列標準等
iv.證書訪問標準包括:PKCS 11、CryptoAPI、JCE、PC/SC等
v.CA運營標準包括:CP、CPS等

9、根據數字證書格式及密鑰管理方式的不同,PKI也包括多種模式:

(1)、X.509模式:該模式的PKI也稱作PKIX(稱爲數字證書格式的標準)
(2)、PGP模式:基於公鑰算法的加密
(3)、IBE/CPK模式
(4)、EMV模式

10、KMC

(1)、爲解決私鑰的備份與恢復問題,PKI引入了KMC,用於對私鑰的全生命週期進行管理。
(2)、KMC是Key Management Center的縮寫
(3)、產生公私鑰的兩種方式:

i.用戶的公私鑰對可由KMC產生,提交CA簽發數字證書後,將私鑰和數字證書同時安全移交給用戶,
	而KMC將私鑰留作備份,可按需要給用戶恢復;
ii.用戶的公私鑰也可以由自己產生(使用軟件或密碼設備),在向CA中心申請數字證書時
	,可將私鑰安全提交KMC留作備份;

11、簽名證書和加密證書

(1)、爲防止用戶身份被冒用,應保證用戶私鑰的唯一性,不允許備份恢復。爲防止公鑰加密後的數據無法解密,應提供用戶私鑰的備份恢復機制。爲解決這兩種矛盾的應用需求,PKI引入雙證書機制:簽名證書和加密證書;
(2)、簽名證書及私鑰只用於簽名驗籤,不能用於加密解密,該公私鑰對必須由用戶自己產生,KMC不備份簽名私鑰;
(3)、加密證書及私鑰只用於加密解密,不能用於簽名驗籤,該公私鑰對必須有KMC產生,且KMC對加密私鑰進行備份;

12、CA證書

(1)、也叫做CA中心的數字證書
(2)、用戶在驗證數字證書是否被篡改時,必須首先獲得CA中心的公鑰。爲方便用戶識別CA中心的公鑰,CA中心也爲自己簽發數字證書。該證書包含CA中心公鑰、CA中心身份信息、CA中心私鑰的簽名

13、數字證書的分類

(1)、根據證書持有者分類:

i.根據證書持有者是否爲CA,可將證書分爲2類:CA證書和用戶證書。
	CA證書可以給用戶或其他CA簽發證書,用戶證書不允許給其他用戶或CA簽發證書。
	X.509格式中通過擴展項BasicConstraints來區分這2類證書。
	當其中的cA項爲TRUE時表示CA證書,爲FALSE時表示用戶證書。
ii.按照證書持有者類型進行分類:根據證書持有者類型,
	通常將證書分爲:個人證書、單位證書、系統證書。

(2)、根據密鑰對分類:

i.根據密鑰對產生方式進行分類:根據密鑰對的產生方式,可將證書分爲2類:簽名證書和加密證書。
	1.簽名證書及密鑰(密鑰對)只用於簽名驗籤,不能用於加密解密。爲保證該密鑰對的唯一性,
		該密鑰對必須由用戶端密碼模塊產生和保存,在證書籤發過程中CA中心並不知道其私鑰,
		只對其公鑰進行操作。
	2.加密證書及密鑰(密鑰對)只用於加密解密,不能用於簽名驗籤。爲實現密鑰恢復或行業監管,
		該密鑰對必須由CA中心產生,並回送給用戶端密碼模塊保存。
		CA中心同時保存該密鑰對,必要時可恢復該密鑰對。
ii.根據證書用途進行分類:通常將證書分爲SSL服務器證書、SSL客戶端證書、代碼簽名證書……等
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章