添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本书详解Windows加解密算法的原理及其实现技术,内容安排首先从各大主流加解密算法的原理入手,然后用C/C++语言自主实现这些算法,最后从C/C++提供的主流加解密框架和函数库入手讲解其使用方法。 本书分为14章,内容包括密码学概述、搭建C和C++密码开发环境、对称密码算法、杂凑函数和HMAC、密码学中常见的编码格式、非对称算法RSA的加解密、数字签名技术、椭圆曲线密码体制ECC、CSP和CryptoAPI、身份认证和PKI理论基础、实战PKI、SSL-TLS编程、SM2算法的数学基础、SM2算法的实现。 本书适合用于C/C++初中级开发人员自学密码开发技术,也适合高等院校和培训机构相关专业的师生教学参考。
第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