古詩詞大全網 - 個性簽名 - PKI知識點整理

PKI知識點整理

分類:

摘要算法使用密碼學hash函數,用於驗證數據完整性(沒有修改、插入、刪除、或重放)。找到兩個不同數據具有相同hash值的難度高。

輸入數據的長度首先被填充為某固定長度分組的整數倍,填充的內容包括原始數據的位長度信息。安全性要求如下兩種情況在計算上不可行(即沒有攻擊方法比窮舉攻擊更有效):

Hash算法壹般是指Hash表的摘要算法,將不同的鍵值分散到不同的數組位置,允許少量的沖突碰撞。安全Hash算法(SHA)是使用最廣泛的Hash函數

摘要函數——MD2/MD4/MD5數字簽名

又稱密碼校驗和,利用密鑰 K 和可變長度的數據 M 生成固定長度的短數據塊 MAC ,並將數據塊附加在數據M之後:

$$

MAC = C(K, M)

$$

若對於數據的保密性要求不高(例如廣播),可直接將消息 M MAC 壹起發給接受者,接收者收到後使用相同的密鑰 K 和MAC函數 C 對消息 M 計算得出 MAC2 ,再對比兩者是否相等。(這裏設定通信雙方***享相同的密鑰 K

若對於數據的保密性要求嚴格,可選擇將消息 M MAC 加密再發送:

$$

ENC = E(K_2, M||C(K_1,M))

$$

接收者收到數據後首先解密。

HMAC將Hash函數視為黑盒,將現有Hash函數作為壹個模塊,預先封裝,在需要時直接使用。

OFB與CFB都采用將分組加密轉換成流加密的方式

如圖,用自己的話來描述就是缺多少bit,就在每個bit裏填多少。該方式是8分組結構,只適合DES/3DES。

密鑰運算包含兩種操作(私鑰操作、公鑰操作),簽名驗簽正是基於這兩種操作:

$$

C=P^d mod n

$$

$$

P=C^d mod n

$$

使用簽名的前提是使用公鑰加密的密文只有私鑰才能解開,使用私鑰加密的密文只有公鑰才能解開,確保了身份認證抗抵賴性。

過程:

至於填充模式,定義在PKCS#1: 00||BT||PS||00||D

使用RSA公鑰運算,過程如下:

用途:用於非對稱傳輸信息,比如Bob有壹個信息想傳給Alice,需使用Alice的公鑰加密信息,傳給Alice,Alice得到加密信息後使用自己的私鑰即可解開讀取信息。他人即使截獲加密信息也無法解開,利用了大數分解難題。

使用RSA私鑰運算,過程如下:

以上可以看出,私鑰解密和簽名的運算過程壹致!

定義RSA公私鑰數據表達形式,及加密,解密,簽名,驗簽,填充過程,定義了數字簽名如何計算,包括簽名數據和簽名本身的格式。

RSA公鑰的ASN.1結構,可以表述為:名為RSAPublicKey的這個結構呢,就可以用來表述壹個RSA公鑰了。它有兩個INTEGER型變量:modulus和publicExponent。

以下是對PKCS#1 OID的類型表示的定義

hashAlgorithm 支持的散列函數:

基於口令的加密規範Password-Based Cryptography Specification

目的:保護私鑰文件的安全性

通過將原始口令+salt派生出新口令進行加密

PKSC5Padding(用於制定算法DES)對稱加密填充方式,填充塊固定為8個字節,填充值為待填充的長度,與PKCS7Padding類似。

加密消息的語法標準Cryptographic Message Syntax Version 1.5

結構:

pkcs7 各種類型數據結構的 DER 編解碼通過宏在 crypto/pkcs7/pk7_asn1.c 中實現

數字信封流程:(A:發送方;B:接收方;SK:私鑰;PK:公鑰)

常用的用途有:

PKCS#7結構分析之簽名

PKCS#7結構分析之數字信封

構造數字信封要能夠達到以下功能:

因此該結構應該包含:

私鑰封裝格式Private_Key Information Syntax Specification Version 1.2

定義了私鑰信息語法和加密私鑰語法。

私鑰類型任意,對稱算法可設置

證書請求格式(主題,公鑰,私鑰簽名)

RA註冊流程:註冊信息->審核通過->生成密鑰->生成PKCS10請求->將信息和P10請求的公鑰合並成CMP請求->發送到CA

介質接口格式:

對應於Windows的CSP,國密接口的SKF

帶私鑰的個人證書格式,包含私鑰、證書、證書鏈、CRL...

X.509證書與509黑名單規範

X.509數字證書主體如下:

壹個真實的X509數字證書包含:

以上結構表示壹個完整的數字證書,主要項如下:

DER 編解碼接口由宏在 crypto/asn1/x_x509.c 中實現,包括各自的new、free、i2d 和 d2i 函數:

Abstract Syntax Notation One,抽象語法標識,是與平臺、語言無關的數據結構定義語法

BER、CER、DER、XER,可以編碼成XML格式,不僅僅是常用的二進制流。

二進制流的TLV方式表達數據結構,如下:

證書撤銷列表(Certificate Revocation List,簡稱 CRL),是壹種包含撤銷的證書列表的簽名數據結構。基本的 CRL 信息有:被撤銷證書序列號、撤銷時間、撤銷原因、簽名者以及 CRL 簽名等信息。

被撤銷證書的信息:X509_REVOKED

crl信息主體:

完整crl數據結構:

輕量目錄訪問協議(Lightweight Directory Access Protocol),運行於TCP/IP之上。

目錄的信息按照樹型結構組織,數據結構:

在線證書狀態協議(Online Certificate Status Protocol)

數據格式:

OCSP響應端檢測:

雙證書即雙密鑰(簽名密鑰對,加密密鑰對)

(附:我曾今將整理的文件使用壹款加密軟件加密,選擇加密密碼的時候由於自己記不住長密碼,又不想將長密碼以任何形式記錄下來,於是決定使用自認為固定的文件作為密鑰,然後當再次使用文件解密的時候,被告知不是該文件。才想起,這個當時在我看來是固定的文件,由於版本需要被我修改了!整理的三個月的文件就這樣脫胎換骨成了0110...)

主要操作包括產生私鑰(key),構造證書請求(req),簽發用戶證書,自簽發根證書。

對稱算法和摘要算法全局初始化: OpenSSL_add_all_algorithms();

釋放句柄: EVP_MD_CTX_cleanup(&ctx);

公司加密郵件為標準SMIME格式,導出後得到.eml文件

使用 PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont) 將bio讀取到的SMIME格式保存在PKCS7格式內,然後通過PKCS7_dncrypt接口解密

錯誤處理應該盡可能多的包含各種信息,包括:

ERR_get_error獲取第壹個錯誤號

ERR_error_string根據錯誤碼獲取具體的錯誤信息,包括出錯的庫、出錯的函數以及出錯原因

ERR_print_errors_fp將錯誤打印到FILE中