Windows C/C++加密解密實戰

Windows C/C++加密解密實戰

《Windows C/C++加密解密實戰》是清華大學出版社出版的圖書。

基本介紹

  • 中文名:Windows C/C++加密解密實戰
  • 作者:朱晨冰、李建英
  • 類別:編程開發
  • 出版社:清華大學出版社
  • 出版時間:2021年6月1日
  • 定價:129 元
  • ISBN:9787302578215
內容簡介,作者簡介,目錄,

內容簡介

本書詳解Windows加解密算法的原理及其實現技術,內容安排首先從各大主流加解密算法的原理入手,然後用C/C++語言自主實現坑戶這些算法,最後從C/C++提供的主流加解密框架和函式館入手講解其使用方法。 本書分為14章,內容包括密碼學概述、搭建C和C++密碼開發環境、對稱密碼算法、雜湊函式和HMAC、密碼學中常見的編碼格式、非對稱算法RSA的加解密、數字簽名技術、橢圓曲線密碼體制ECC、CSP和CryptoAPI、身份認證和PKI理論基礎、實戰PKI、SSL-TLS編程、SM2算法的數學基礎、SM2算法的實現。 本書適合用於C/C++國中級開發人員自學密幾雄狼碼開發技術,也適合高等院校和培訓機構相關專業的師生教學參考。

作者簡介

朱晨冰,朱文偉的筆名,名校計算機專業統招碩士,20年C\C++、Java開發經驗。主導開發過密碼、圖形、人工智慧等產品。精通Linux、Windows系統開發及資料庫開發技術。著有圖書《Windows C/C++加密解密實戰》《密碼學原理與Java實現》《Linux C與C++ 一線開發實踐》《Visual C++2017從入門到精通》。

目錄

第1章 密碼學概述 1
1.1 瑪麗女王的密碼 1
1.2 密碼學簡史 5
1.3 密碼學的基本概念 7
1.3.1 基本概念 7
1.3.2 密碼學要解決的5大問題 7
1.3.3 密碼學中的五元組 8
1.3.4 加解密算法的分類 8
第2章 搭建C和C++密碼開發環境 9
2.1 密碼編程的兩個重要的國際庫 9
2.2 C/C++密碼庫OpenSSL 9
2.2.1 OpenSSL原始碼模組結構 10
2.2.2 OpenSSL加密庫調用方式 10
2.2.3 OpenSSL支持的對稱加密算法 11
2.2.4 OpenSSL支持的非對稱加密算法店舟員 11
2.2.5 OpenSSL支持的信息摘要算法 12
2.2.6 OpenSSL密鑰和證書管理 12
2.2.7 面向對象與OpenSSL 12
2.2.8 BIO接口 14
2.2.9 EVP接口 15
2.2.10 關於版本和作業系統 16
2.2.11 在Windows下編譯OpenSSL 1.1.1 16
2.2.12 在Windows下編譯OpenSSL 1.0.2m 30
2.2.13 在Linux下編譯安裝OpenSSL 1.0.2 38
2.2.14 測試使用openssl命令 47
2.3 純C++密碼開發Crypto++庫 49
2.3.1 Crypto++的編譯 50
2.3.2 使用Cypto++進行AES加解密 50
2.4 國產達旋擔墓密碼開發庫GmSSL 52
2.4.1 GmSSL的特點 52
2.4.2 GmSSL的一些歷史 52
2.4.3 什麼是國密算法 53
2.4.4 GmSSL的下載 53
2.4.5 在辯贈符堡Windows下編譯安裝GmSSL 54
2.4.6 在Linux下編譯安裝GmSSL 57
2.4.7 默認編譯安裝GmSSL 61
2.4.8 在老版本的Linux下編譯安裝GmSSL 64
第3章 對稱密碼算法 68
3.1 基本概念 68
3.2 對稱加解密算法的分類 69
3.3 流加密算法 69
3.3.1 基本概念 69
3.3.2 流密碼和分組密碼的比較 70
3.3.3 RC4算法 71
3.4 分組加密算法 81
3.4.1 工作模式 81
3.4.2 短塊加密 85
3.4.3 DES和3DES算法 86
3.4.4 SM4算法 104
3.5 利用OpenSSL進行對稱加解密 120
3.5.1 基本概念 120
3.5.2 對稱加解密相關函式 121
第4章 雜湊函式和HMAC 131
4.1 雜湊函式概述 131
4.1.1 什麼是雜湊函式 131
4.1.2 密碼學和雜湊函式 131
4.1.3 雜湊函式的發駝頸囑展 132
4.1.4 雜湊挨判符函式的設計 132
4.1.5 雜湊函式的分類 133
4.1.6 雜湊函式的碰撞 133
4.2 SM3雜湊算法 134
4.2.1 常量和函式 134
4.2.2 填充 135
4.2.3 疊代壓縮 135
4.2.4 雜湊值 136
4.2.5 一段式SM3算法的實現 137
4.2.6 三段式SM3雜湊的實現 141
4.2.7 OpenSSL實現SM3算法 151
4.3 HMAC 155
4.3.1 什麼是HMAC 155
4.3.2 產生背景 155
4.3.3 設計目標 156
4.3.4 算法描述 156
4.3.5 獨立自主實現HMAC-SM3 157
4.4 SHA系列雜湊算法 160
4.4.1 SHA算法概述 160
4.4.2 SHA的發展史 161
4.4.3 SHA系列算法的核心思想和特點 161
4.4.4 單向性 161
4.4.5 主要用途 161
4.4.6 SHA256算法原理解析 161
4.4.7 SHA384和SHA512算法 177
4.5 更通用的基於OpenSSL的哈希運算 204
4.5.1 獲取摘要算法函式EVP_get_digestbyname 205
4.5.2 創建結構體並初始化函式EVP_MD_CTX_create 205
4.5.3 銷毀摘要上下文結構體EVP_MD_CTX_destroy 206
4.5.4 摘要初始化函式EVP_DigestInit_ex 206
4.5.5 摘要更新函式EVP_DigestUpdate 206
4.5.6 摘要結束函式EVP_Digest_Final_ex 207
4.5.7 單包摘要計算函式EVP_Digest 207
第5章 密碼學中常見的編碼格式 210
5.1 Base64編碼 210
5.1.1 Base64編碼的由來 210
5.1.2 Base64的索引表 210
5.1.3 Base64的轉化原理 211
5.1.4 使用OpenSSL的base64命令 213
5.1.5 編程實現Base64編解碼 214
5.2 PEM檔案 217
5.2.1 什麼是PEM檔案 217
5.2.2 生成一個PEM檔案 219
5.3 ASN.1和BER、DER 220
5.3.1 ASN.1的歷史 220
5.3.2 ASN.1的基本概念 221
5.3.3 ASN.1和ASN.1編碼規則在OSI中的套用 222
5.3.4 電子商務中ASN.1和DER編碼的套用 223
5.3.5 ASN的優點 223
5.3.6 ASN.1的文法描述 224
5.3.7 編碼規則 225
5.3.8 ASN.1實例 232
第6章 非對稱算法RSA的加解密 236
6.1 非對稱密碼體制概述 236
6.2 RSA概述 237
6.3 RSA的數學基礎 238
6.3.1 素數(質數) 238
6.3.2 素性檢測 239
6.3.3 倍數 239
6.3.4 約數 239
6.3.5 互質數 239
6.3.6 質因數 240
6.3.7 強素數 240
6.3.8 因子 240
6.3.9 模運算 240
6.3.10 模運算的操作與性質 241
6.3.11 單向函式 241
6.3.12 費馬定理和歐拉定理 243
6.3.13 冪 243
6.3.14 模冪運算 243
6.3.15 同餘符號“≡” 243
6.3.16 歐拉函式 244
6.3.17 最大公約數 244
6.3.18 歐幾里得算法 244
6.3.19 擴展歐幾里得算法 246
6.4 RSA算法描述 254
6.5 RSA算法實例 256
6.5.1 查找法計算私鑰d 256
6.5.2 簡便法計算私鑰d 259
6.5.3 擴展歐幾里得算法計算私鑰d 260
6.5.4 加密字母 261
6.5.5 分組加密字元串 262
6.6 熟悉PKCS#1 266
6.6.1 PKCS#1填充 267
6.6.2 PKCS#1中的 RSA私鑰語法 271
6.7 在OpenSSL命令中使用RSA 272
6.7.1 生成RSA公私鑰 272
6.7.2 提取私鑰各參數 273
6.7.3 RSA公鑰加密一個檔案 275
6.7.4 RSA私鑰解密一個檔案 276
6.8 基於OpenSSL庫的RSA編程 276
6.8.1 OpenSSL的RSA實現 277
6.8.2 主要數據結構 277
6.8.3 主要函式 278
6.9 隨機大素數的生成 287
6.10 RSA算法的攻擊及分析 287
6.10.1 因子分解攻擊 287
6.10.2 選擇密文攻擊 287
6.10.3 公共模數攻擊 288
6.10.4 小指數攻擊 288
第7章 數字簽名技術 289
7.1 概述 289
7.2 什麼是數字簽名技術 291
7.2.1 簽名 291
7.2.2 數字簽名的基本概念 291
7.2.3 數字簽名的原理 292
7.2.4 數字簽名的一般性定義 292
7.2.5 數字簽名的分類 293
7.2.6 數字簽名的安全性 294
7.2.7 數字簽名的特徵與套用 295
7.3 RSA公鑰算法在數字簽名中的套用 295
7.4 使用OpenSSL命令進行簽名和驗簽 296
7.5 基於OpenSSL的簽名驗簽編程 298
7.5.1 直接使用RSA函式進行簽名驗簽 298
7.5.2 使用EVP系列函式進行簽名驗簽 304
第8章 橢圓曲線密碼體制 310
8.1 概述 310
8.1.1 信息安全技術 310
8.1.2 密碼體制 311
8.1.3 橢圓曲線密碼體制 311
8.1.4 為什麼使用橢圓曲線密碼體制 313
8.2 背景基礎知識 313
8.2.1 無窮遠點 314
8.2.2 射影平面坐標系 314
8.2.3 域 316
8.2.4 數域 316
8.2.5 有限域 316
8.2.6 素數域 316
8.2.7 逆元 317
8.3 橢圓曲線的定義 318
8.4 密碼學中的橢圓曲線 321
8.5 ECC算法體系 326
8.5.1 有限域的模運算 327
8.5.2 橢圓曲線上的點加和倍點運算 328
8.5.3 標量乘運算 333
8.5.4 數據加解密算法 336
第9章 CSP和CryptoAPI 350
9.1 什麼是CSP 350
9.2 CryptoAPI簡介 350
9.3 CSP服務體系 351
9.4 CSP的組成 353
9.5 CryptoAPI體系結構 353
9.6 CryptoAPI調用底層CSP服務方式 354
9.7 CrpytoAPI的基本功能 355
9.8 搭建CryptoAPI開發環境 356
9.9 基本加密函式 357
9.9.1 服務提供者函式 358
9.9.2 密鑰的產生和交換函式 363
9.9.3 編碼/解碼函式 364
9.9.4 數據加密/解密函式 364
9.9.5 哈希和數字簽名函式 364
第10章 身份認證和PKI理論基礎 369
10.1 身份認證概述 369
10.1.1 網路安全與身份認證 369
10.1.2 網路環境下身份認證所面臨的威脅 370
10.1.3 網路身份認證體系的發展現狀 371
10.2 身份認證技術基礎 373
10.2.1 用戶名/密碼認證 373
10.2.2 智慧卡認證 374
10.2.3 生物特徵認證 374
10.2.4 動態口令 374
10.2.5 USB Key認證 375
10.2.6 基於衝擊回響的認證模式 375
10.2.7 基於數字證書PKI的認證模式 375
10.3 PKI概述 376
10.3.1 PKI的國內外套用狀態 376
10.3.2 PKI的套用前景 377
10.3.3 PKI存在的問題及發展趨勢 378
10.4 基於X.509證書的PKI認證體系 380
10.4.1 數字證書 380
10.4.2 數字信封 383
10.4.3 PKI體系結構 384
10.4.4 認證機構 387
10.4.5 基於X.509證書的身份認證 388
第11章 實戰PKI 391
11.1 只有密碼算法是不夠的 391
11.2 OpenSSL實現CA的搭建 393
11.2.1 準備實驗環境 393
11.2.2 熟悉CA環境 394
11.2.3 創建所需要的檔案 396
11.2.4 CA 自簽名證書(構造根CA) 396
11.2.5 根CA為子CA頒發證書 398
11.2.6 普通用戶向子CA申請證書 401
11.3 基於OpenSSL的證書編程 403
11.3.1 把DER編碼轉換為內部結構體函式d2i_X509 404
11.3.2 獲得證書版本函式X509_get_version 405
11.3.3 獲得證書序列號函式X509_get_serialNumber 405
11.3.4 獲得證書頒發者信息函式X509_get_issuer_name 405
11.3.5 獲得證書擁有者信息函式X509_get_subject_name 406
11.3.6 獲得證書有效期的起始日期函式X509_get_notBefore 406
11.3.7 獲得證書有效期的終止日期函式X509_get_notAfter 406
11.3.8 獲得證書公鑰函式X509_get_pubkey 406
11.3.9 創建證書存儲區上下文環境函式X509_STORE_CTX 407
11.3.10 釋放證書存儲區上下文環境函式X509_STORE_CTX_free 407
11.3.11 初始化證書存儲區上下文環境函式X509_STORE_CTX_init 407
11.3.12 驗證證書函式X509_verify_cert 407
11.3.13 創建證書存儲區函式X509_STORE_new 407
11.3.14 釋放證書存儲區函式X509_STORE_free 408
11.3.15 向證書存儲區添加證書函式X509_STORE_add_cert 408
11.3.16 向證書存儲區添加證書吊銷列表函式X509_STORE_add_crl 409
11.3.17 釋放X509結構體函式X509_free 409
11.4 證書編程實戰 409
第12章 SSL-TLS編程 417
12.1 SSL協定規範 417
12.1.1 什麼是SSL協定 417
12.1.2 SSL協定的優點 417
12.1.3 SSL協定的發展 417
12.1.4 SSL v3/TLS提供的服務 418
12.1.5 SSL協定層次結構模型 419
12.1.6 SSL記錄層協定 419
12.1.7 SSL握手協定層 421
12.2 OpenSSL中的SSL編程 424
12.3 SSL函式 425
12.3.1 初始化SSL算法庫函式 SSL library_init 425
12.3.2 初始化SSL上下文環境變數函式 SSL_CTX_new 425
12.3.3 釋放SSL上下文環境變數函式SSL_CTX_free 426
12.3.4 檔案形式設定SSL證書函式SSL_CTX _use_certificate_file 426
12.3.5 結構體方式設定SSL證書函式SSL_CTX_use_certificate 426
12.3.6 檔案形式設定SSL私鑰函式SSL_CTX_use_PrivateKey_file 426
12.3.7 結構體方式設定SSL私鑰函式SSL_CTX_use_PrivateKey 427
12.3.8 檢查SSL私鑰和證書是否匹配函式SSL_CTX_check_private_key 427
12.3.9 創建SSL結構函式SSL_new 427
12.3.10 釋放SSL套接字結構體函式SSL_free 427
12.3.11 設定讀寫套接字函式SSL_set_fd 427
12.3.12 設定唯讀套接字函式SSL_set_rfd 428
12.3.13 設定只寫套接字函式SSL_set_wfd 428
12.3.14 啟動TLS/SSL握手函式SSL_connect 428
12.3.15 接受SSL連線函式SSL_accept 428
12.3.16 獲取對方的X509證書函式SSL_get_peer_certificate 428
12.3.17 向TLS/SSL連線寫數據函式SSL_write 429
12.3.18 從TLS/SSL連線中讀取數據函式SSL_Read 429
12.4 準備SSL通信所需的證書 429
12.4.1 準備實驗環境 429
12.4.2 熟悉CA環境 430
12.4.3 創建所需要的檔案 430
12.4.4 創建根CA的證書 430
12.4.5 生成服務端的證書請求檔案 432
12.4.6 簽發出服務端證書 432
12.4.7 生成客戶端的證書請求檔案 433
12.4.8 簽發客戶端證書 434
12.5 實戰SSL網路編程 435
第13章 SM2算法的數學基礎 444
13.1 素域Fp 444
13.1.1 素域Fp的定義 444
13.1.2 Fp上橢圓曲線的定義 445
13.1.3 Fp上橢圓曲線的階 447
13.2 二元擴域 447
13.2.1 二元擴域 的定義 447
13.2.2 上橢圓曲線的定義 451
13.2.3 上橢圓曲線的階 453
13.3 橢圓曲線多倍點運算 453
13.3.1 定義 453
13.3.2 橢圓曲線多倍點運算的實現 454
13.3.3 橢圓曲線多倍點運算複雜度估計 455
13.4 求解橢圓曲線離散對數問題的方法 456
13.4.1 橢圓曲線離散對數求解方法 456
13.4.2 安全橢圓曲線滿足的條件 457
13.5 橢圓曲線上點的壓縮 458
13.5.1 定義 458
13.5.2 Fp上橢圓曲線點的壓縮與解壓縮方法 458
13.5.3 上橢圓曲線點的壓縮與解壓縮方法 458
13.6 有限域和模運算 459
13.6.1 有限域中的指數運算 459
13.6.2 有限域中的逆運算 459
13.6.3 Lucas序列的生成 460
13.6.4 模素數平方根的求解 460
13.6.5 跡函式和半跡函式 461
13.6.6 上二次方程的求解 461
13.6.7 整數模素數階的檢查 462
13.6.8 整數模素數階的計算 462
13.6.9 模素數的階為給定值的整數的構造 463
13.6.10 機率素性檢測 463
13.6.11 近似素性檢測 464
13.7 橢圓曲線算法 464
13.7.1 橢圓曲線階的計算 464
13.7.2 橢圓曲線上點的尋找 464
13.8 曲線示例 465
13.8.1 Fp上的橢圓曲線 465
13.8.2 上的橢圓曲線 466
13.9 橢圓曲線方程參數的擬隨機生成 467
13.9.1 Fp上橢圓曲線方程參數的擬隨機生成 467
13.9.2 上橢圓曲線方程參數的擬隨機生成 468
13.10 橢圓曲線方程參數的驗證 468
13.10.1 Fp上橢圓曲線方程參數的驗證 468
13.10.2 上橢圓曲線方程參數的驗證 469
第14章 SM2算法的實現 470
14.1 為何要推出SM2算法 470
14.2 SM2算法採用的橢圓曲線方程 471
14.3 SM2算法的用途 471
14.4 橢圓曲線密碼體制的不足 471
14.5 橢圓曲線的研究熱點 472
14.6 SM2算法中的有限域 473
14.6.1 素域Fq 473
14.6.2 二元擴域 473
14.7 有限域上的橢圓曲線 473
14.7.1 Fp上的橢圓曲線 474
14.7.2 上的橢圓曲線 474
14.8 橢圓曲線系統參數及其驗證 474
14.8.1 一般要求 474
14.8.2 Fp上橢圓曲線系統參數及其驗證 474
14.8.3 上橢圓曲線系統參數及其驗證 475
14.9 密鑰對的生成 476
14.10 公鑰的驗證 477
14.10.1 Fp上橢圓曲線公鑰的驗證 477
14.10.2 上橢圓曲線公鑰的驗證 477
14.11 MIRACL庫入門 477
14.11.1 獲取MIRACL 478
14.11.2 生成靜態庫並測試 478
14.12 SM2加解密算法 481
14.12.1 算法參數 481
14.12.2 輔助函式 481
14.12.3 加密算法及流程 482
14.12.4 解密算法及流程 483
14.12.5 橢圓曲線訊息加解密示例 484
14.12.6 用代碼實現SM2加解密算法 489
14.13 SM2數字簽名 508
14.13.1 算法參數 508
14.13.2 輔助函式 509
14.13.3 數字簽名的生成算法及流程 509
14.13.4 數字簽名的驗證算法及流程 510
14.13.5 數字簽名與驗證示例 511
14.13.6 用代碼實現SM2簽名驗簽算法 517
2.3.1 Crypto++的編譯 50
2.3.2 使用Cypto++進行AES加解密 50
2.4 國產密碼開發庫GmSSL 52
2.4.1 GmSSL的特點 52
2.4.2 GmSSL的一些歷史 52
2.4.3 什麼是國密算法 53
2.4.4 GmSSL的下載 53
2.4.5 在Windows下編譯安裝GmSSL 54
2.4.6 在Linux下編譯安裝GmSSL 57
2.4.7 默認編譯安裝GmSSL 61
2.4.8 在老版本的Linux下編譯安裝GmSSL 64
第3章 對稱密碼算法 68
3.1 基本概念 68
3.2 對稱加解密算法的分類 69
3.3 流加密算法 69
3.3.1 基本概念 69
3.3.2 流密碼和分組密碼的比較 70
3.3.3 RC4算法 71
3.4 分組加密算法 81
3.4.1 工作模式 81
3.4.2 短塊加密 85
3.4.3 DES和3DES算法 86
3.4.4 SM4算法 104
3.5 利用OpenSSL進行對稱加解密 120
3.5.1 基本概念 120
3.5.2 對稱加解密相關函式 121
第4章 雜湊函式和HMAC 131
4.1 雜湊函式概述 131
4.1.1 什麼是雜湊函式 131
4.1.2 密碼學和雜湊函式 131
4.1.3 雜湊函式的發展 132
4.1.4 雜湊函式的設計 132
4.1.5 雜湊函式的分類 133
4.1.6 雜湊函式的碰撞 133
4.2 SM3雜湊算法 134
4.2.1 常量和函式 134
4.2.2 填充 135
4.2.3 疊代壓縮 135
4.2.4 雜湊值 136
4.2.5 一段式SM3算法的實現 137
4.2.6 三段式SM3雜湊的實現 141
4.2.7 OpenSSL實現SM3算法 151
4.3 HMAC 155
4.3.1 什麼是HMAC 155
4.3.2 產生背景 155
4.3.3 設計目標 156
4.3.4 算法描述 156
4.3.5 獨立自主實現HMAC-SM3 157
4.4 SHA系列雜湊算法 160
4.4.1 SHA算法概述 160
4.4.2 SHA的發展史 161
4.4.3 SHA系列算法的核心思想和特點 161
4.4.4 單向性 161
4.4.5 主要用途 161
4.4.6 SHA256算法原理解析 161
4.4.7 SHA384和SHA512算法 177
4.5 更通用的基於OpenSSL的哈希運算 204
4.5.1 獲取摘要算法函式EVP_get_digestbyname 205
4.5.2 創建結構體並初始化函式EVP_MD_CTX_create 205
4.5.3 銷毀摘要上下文結構體EVP_MD_CTX_destroy 206
4.5.4 摘要初始化函式EVP_DigestInit_ex 206
4.5.5 摘要更新函式EVP_DigestUpdate 206
4.5.6 摘要結束函式EVP_Digest_Final_ex 207
4.5.7 單包摘要計算函式EVP_Digest 207
第5章 密碼學中常見的編碼格式 210
5.1 Base64編碼 210
5.1.1 Base64編碼的由來 210
5.1.2 Base64的索引表 210
5.1.3 Base64的轉化原理 211
5.1.4 使用OpenSSL的base64命令 213
5.1.5 編程實現Base64編解碼 214
5.2 PEM檔案 217
5.2.1 什麼是PEM檔案 217
5.2.2 生成一個PEM檔案 219
5.3 ASN.1和BER、DER 220
5.3.1 ASN.1的歷史 220
5.3.2 ASN.1的基本概念 221
5.3.3 ASN.1和ASN.1編碼規則在OSI中的套用 222
5.3.4 電子商務中ASN.1和DER編碼的套用 223
5.3.5 ASN的優點 223
5.3.6 ASN.1的文法描述 224
5.3.7 編碼規則 225
5.3.8 ASN.1實例 232
第6章 非對稱算法RSA的加解密 236
6.1 非對稱密碼體制概述 236
6.2 RSA概述 237
6.3 RSA的數學基礎 238
6.3.1 素數(質數) 238
6.3.2 素性檢測 239
6.3.3 倍數 239
6.3.4 約數 239
6.3.5 互質數 239
6.3.6 質因數 240
6.3.7 強素數 240
6.3.8 因子 240
6.3.9 模運算 240
6.3.10 模運算的操作與性質 241
6.3.11 單向函式 241
6.3.12 費馬定理和歐拉定理 243
6.3.13 冪 243
6.3.14 模冪運算 243
6.3.15 同餘符號“≡” 243
6.3.16 歐拉函式 244
6.3.17 最大公約數 244
6.3.18 歐幾里得算法 244
6.3.19 擴展歐幾里得算法 246
6.4 RSA算法描述 254
6.5 RSA算法實例 256
6.5.1 查找法計算私鑰d 256
6.5.2 簡便法計算私鑰d 259
6.5.3 擴展歐幾里得算法計算私鑰d 260
6.5.4 加密字母 261
6.5.5 分組加密字元串 262
6.6 熟悉PKCS#1 266
6.6.1 PKCS#1填充 267
6.6.2 PKCS#1中的 RSA私鑰語法 271
6.7 在OpenSSL命令中使用RSA 272
6.7.1 生成RSA公私鑰 272
6.7.2 提取私鑰各參數 273
6.7.3 RSA公鑰加密一個檔案 275
6.7.4 RSA私鑰解密一個檔案 276
6.8 基於OpenSSL庫的RSA編程 276
6.8.1 OpenSSL的RSA實現 277
6.8.2 主要數據結構 277
6.8.3 主要函式 278
6.9 隨機大素數的生成 287
6.10 RSA算法的攻擊及分析 287
6.10.1 因子分解攻擊 287
6.10.2 選擇密文攻擊 287
6.10.3 公共模數攻擊 288
6.10.4 小指數攻擊 288
第7章 數字簽名技術 289
7.1 概述 289
7.2 什麼是數字簽名技術 291
7.2.1 簽名 291
7.2.2 數字簽名的基本概念 291
7.2.3 數字簽名的原理 292
7.2.4 數字簽名的一般性定義 292
7.2.5 數字簽名的分類 293
7.2.6 數字簽名的安全性 294
7.2.7 數字簽名的特徵與套用 295
7.3 RSA公鑰算法在數字簽名中的套用 295
7.4 使用OpenSSL命令進行簽名和驗簽 296
7.5 基於OpenSSL的簽名驗簽編程 298
7.5.1 直接使用RSA函式進行簽名驗簽 298
7.5.2 使用EVP系列函式進行簽名驗簽 304
第8章 橢圓曲線密碼體制 310
8.1 概述 310
8.1.1 信息安全技術 310
8.1.2 密碼體制 311
8.1.3 橢圓曲線密碼體制 311
8.1.4 為什麼使用橢圓曲線密碼體制 313
8.2 背景基礎知識 313
8.2.1 無窮遠點 314
8.2.2 射影平面坐標系 314
8.2.3 域 316
8.2.4 數域 316
8.2.5 有限域 316
8.2.6 素數域 316
8.2.7 逆元 317
8.3 橢圓曲線的定義 318
8.4 密碼學中的橢圓曲線 321
8.5 ECC算法體系 326
8.5.1 有限域的模運算 327
8.5.2 橢圓曲線上的點加和倍點運算 328
8.5.3 標量乘運算 333
8.5.4 數據加解密算法 336
第9章 CSP和CryptoAPI 350
9.1 什麼是CSP 350
9.2 CryptoAPI簡介 350
9.3 CSP服務體系 351
9.4 CSP的組成 353
9.5 CryptoAPI體系結構 353
9.6 CryptoAPI調用底層CSP服務方式 354
9.7 CrpytoAPI的基本功能 355
9.8 搭建CryptoAPI開發環境 356
9.9 基本加密函式 357
9.9.1 服務提供者函式 358
9.9.2 密鑰的產生和交換函式 363
9.9.3 編碼/解碼函式 364
9.9.4 數據加密/解密函式 364
9.9.5 哈希和數字簽名函式 364
第10章 身份認證和PKI理論基礎 369
10.1 身份認證概述 369
10.1.1 網路安全與身份認證 369
10.1.2 網路環境下身份認證所面臨的威脅 370
10.1.3 網路身份認證體系的發展現狀 371
10.2 身份認證技術基礎 373
10.2.1 用戶名/密碼認證 373
10.2.2 智慧卡認證 374
10.2.3 生物特徵認證 374
10.2.4 動態口令 374
10.2.5 USB Key認證 375
10.2.6 基於衝擊回響的認證模式 375
10.2.7 基於數字證書PKI的認證模式 375
10.3 PKI概述 376
10.3.1 PKI的國內外套用狀態 376
10.3.2 PKI的套用前景 377
10.3.3 PKI存在的問題及發展趨勢 378
10.4 基於X.509證書的PKI認證體系 380
10.4.1 數字證書 380
10.4.2 數字信封 383
10.4.3 PKI體系結構 384
10.4.4 認證機構 387
10.4.5 基於X.509證書的身份認證 388
第11章 實戰PKI 391
11.1 只有密碼算法是不夠的 391
11.2 OpenSSL實現CA的搭建 393
11.2.1 準備實驗環境 393
11.2.2 熟悉CA環境 394
11.2.3 創建所需要的檔案 396
11.2.4 CA 自簽名證書(構造根CA) 396
11.2.5 根CA為子CA頒發證書 398
11.2.6 普通用戶向子CA申請證書 401
11.3 基於OpenSSL的證書編程 403
11.3.1 把DER編碼轉換為內部結構體函式d2i_X509 404
11.3.2 獲得證書版本函式X509_get_version 405
11.3.3 獲得證書序列號函式X509_get_serialNumber 405
11.3.4 獲得證書頒發者信息函式X509_get_issuer_name 405
11.3.5 獲得證書擁有者信息函式X509_get_subject_name 406
11.3.6 獲得證書有效期的起始日期函式X509_get_notBefore 406
11.3.7 獲得證書有效期的終止日期函式X509_get_notAfter 406
11.3.8 獲得證書公鑰函式X509_get_pubkey 406
11.3.9 創建證書存儲區上下文環境函式X509_STORE_CTX 407
11.3.10 釋放證書存儲區上下文環境函式X509_STORE_CTX_free 407
11.3.11 初始化證書存儲區上下文環境函式X509_STORE_CTX_init 407
11.3.12 驗證證書函式X509_verify_cert 407
11.3.13 創建證書存儲區函式X509_STORE_new 407
11.3.14 釋放證書存儲區函式X509_STORE_free 408
11.3.15 向證書存儲區添加證書函式X509_STORE_add_cert 408
11.3.16 向證書存儲區添加證書吊銷列表函式X509_STORE_add_crl 409
11.3.17 釋放X509結構體函式X509_free 409
11.4 證書編程實戰 409
第12章 SSL-TLS編程 417
12.1 SSL協定規範 417
12.1.1 什麼是SSL協定 417
12.1.2 SSL協定的優點 417
12.1.3 SSL協定的發展 417
12.1.4 SSL v3/TLS提供的服務 418
12.1.5 SSL協定層次結構模型 419
12.1.6 SSL記錄層協定 419
12.1.7 SSL握手協定層 421
12.2 OpenSSL中的SSL編程 424
12.3 SSL函式 425
12.3.1 初始化SSL算法庫函式 SSL library_init 425
12.3.2 初始化SSL上下文環境變數函式 SSL_CTX_new 425
12.3.3 釋放SSL上下文環境變數函式SSL_CTX_free 426
12.3.4 檔案形式設定SSL證書函式SSL_CTX _use_certificate_file 426
12.3.5 結構體方式設定SSL證書函式SSL_CTX_use_certificate 426
12.3.6 檔案形式設定SSL私鑰函式SSL_CTX_use_PrivateKey_file 426
12.3.7 結構體方式設定SSL私鑰函式SSL_CTX_use_PrivateKey 427
12.3.8 檢查SSL私鑰和證書是否匹配函式SSL_CTX_check_private_key 427
12.3.9 創建SSL結構函式SSL_new 427
12.3.10 釋放SSL套接字結構體函式SSL_free 427
12.3.11 設定讀寫套接字函式SSL_set_fd 427
12.3.12 設定唯讀套接字函式SSL_set_rfd 428
12.3.13 設定只寫套接字函式SSL_set_wfd 428
12.3.14 啟動TLS/SSL握手函式SSL_connect 428
12.3.15 接受SSL連線函式SSL_accept 428
12.3.16 獲取對方的X509證書函式SSL_get_peer_certificate 428
12.3.17 向TLS/SSL連線寫數據函式SSL_write 429
12.3.18 從TLS/SSL連線中讀取數據函式SSL_Read 429
12.4 準備SSL通信所需的證書 429
12.4.1 準備實驗環境 429
12.4.2 熟悉CA環境 430
12.4.3 創建所需要的檔案 430
12.4.4 創建根CA的證書 430
12.4.5 生成服務端的證書請求檔案 432
12.4.6 簽發出服務端證書 432
12.4.7 生成客戶端的證書請求檔案 433
12.4.8 簽發客戶端證書 434
12.5 實戰SSL網路編程 435
第13章 SM2算法的數學基礎 444
13.1 素域Fp 444
13.1.1 素域Fp的定義 444
13.1.2 Fp上橢圓曲線的定義 445
13.1.3 Fp上橢圓曲線的階 447
13.2 二元擴域 447
13.2.1 二元擴域 的定義 447
13.2.2 上橢圓曲線的定義 451
13.2.3 上橢圓曲線的階 453
13.3 橢圓曲線多倍點運算 453
13.3.1 定義 453
13.3.2 橢圓曲線多倍點運算的實現 454
13.3.3 橢圓曲線多倍點運算複雜度估計 455
13.4 求解橢圓曲線離散對數問題的方法 456
13.4.1 橢圓曲線離散對數求解方法 456
13.4.2 安全橢圓曲線滿足的條件 457
13.5 橢圓曲線上點的壓縮 458
13.5.1 定義 458
13.5.2 Fp上橢圓曲線點的壓縮與解壓縮方法 458
13.5.3 上橢圓曲線點的壓縮與解壓縮方法 458
13.6 有限域和模運算 459
13.6.1 有限域中的指數運算 459
13.6.2 有限域中的逆運算 459
13.6.3 Lucas序列的生成 460
13.6.4 模素數平方根的求解 460
13.6.5 跡函式和半跡函式 461
13.6.6 上二次方程的求解 461
13.6.7 整數模素數階的檢查 462
13.6.8 整數模素數階的計算 462
13.6.9 模素數的階為給定值的整數的構造 463
13.6.10 機率素性檢測 463
13.6.11 近似素性檢測 464
13.7 橢圓曲線算法 464
13.7.1 橢圓曲線階的計算 464
13.7.2 橢圓曲線上點的尋找 464
13.8 曲線示例 465
13.8.1 Fp上的橢圓曲線 465
13.8.2 上的橢圓曲線 466
13.9 橢圓曲線方程參數的擬隨機生成 467
13.9.1 Fp上橢圓曲線方程參數的擬隨機生成 467
13.9.2 上橢圓曲線方程參數的擬隨機生成 468
13.10 橢圓曲線方程參數的驗證 468
13.10.1 Fp上橢圓曲線方程參數的驗證 468
13.10.2 上橢圓曲線方程參數的驗證 469
第14章 SM2算法的實現 470
14.1 為何要推出SM2算法 470
14.2 SM2算法採用的橢圓曲線方程 471
14.3 SM2算法的用途 471
14.4 橢圓曲線密碼體制的不足 471
14.5 橢圓曲線的研究熱點 472
14.6 SM2算法中的有限域 473
14.6.1 素域Fq 473
14.6.2 二元擴域 473
14.7 有限域上的橢圓曲線 473
14.7.1 Fp上的橢圓曲線 474
14.7.2 上的橢圓曲線 474
14.8 橢圓曲線系統參數及其驗證 474
14.8.1 一般要求 474
14.8.2 Fp上橢圓曲線系統參數及其驗證 474
14.8.3 上橢圓曲線系統參數及其驗證 475
14.9 密鑰對的生成 476
14.10 公鑰的驗證 477
14.10.1 Fp上橢圓曲線公鑰的驗證 477
14.10.2 上橢圓曲線公鑰的驗證 477
14.11 MIRACL庫入門 477
14.11.1 獲取MIRACL 478
14.11.2 生成靜態庫並測試 478
14.12 SM2加解密算法 481
14.12.1 算法參數 481
14.12.2 輔助函式 481
14.12.3 加密算法及流程 482
14.12.4 解密算法及流程 483
14.12.5 橢圓曲線訊息加解密示例 484
14.12.6 用代碼實現SM2加解密算法 489
14.13 SM2數字簽名 508
14.13.1 算法參數 508
14.13.2 輔助函式 509
14.13.3 數字簽名的生成算法及流程 509
14.13.4 數字簽名的驗證算法及流程 510
14.13.5 數字簽名與驗證示例 511
14.13.6 用代碼實現SM2簽名驗簽算法 517

相關詞條

熱門詞條

聯絡我們