封面
版权信息
内容简介
前言
源码下载与技术支持
第1章 密码学概述
1.1 玛丽女王的密码
1.2 密码学简史
1.3 密码学的基本概念
1.3.1 基本概念
1.3.2 密码学要解决的5大问题
1.3.3 密码学中的五元组
1.3.4 加解密算法的分类
第2章 搭建C和C++密码开发环境
2.1 密码编程的两个重要的国际库
2.2 C/C++密码库OpenSSL
2.2.1 OpenSSL源代码模块结构
2.2.2 OpenSSL加密库调用方式
2.2.3 OpenSSL支持的对称加密算法
2.2.4 OpenSSL支持的非对称加密算法
2.2.5 OpenSSL支持的信息摘要算法
2.2.6 OpenSSL密钥和证书管理
2.2.7 面向对象与OpenSSL
2.2.8 BIO接口
2.2.9 EVP接口
2.2.10 关于版本和操作系统
2.2.11 在Windows下编译OpenSSL 1.1.1
2.2.12 在Windows下编译OpenSSL 1.0.2m
2.2.13 在Linux下编译安装OpenSSL 1.0.2
2.2.14 测试使用openssl命令
2.3 纯C++密码开发Crypto++库
2.3.1 Crypto++的编译
2.3.2 使用Cypto++进行AES加解密
2.4 国产密码开发库GmSSL
2.4.1 GmSSL的特点
2.4.2 GmSSL的一些历史
2.4.3 什么是国密算法
2.4.4 GmSSL的下载
2.4.5 在Windows下编译安装GmSSL
2.4.6 在Linux下编译安装GmSSL
2.4.7 默认编译安装GmSSL
2.4.8 在老版本的Linux下编译安装GmSSL
第3章 对称密码算法
3.1 基本概念
3.2 对称加解密算法的分类
3.3 流加密算法
3.3.1 基本概念
3.3.2 流密码和分组密码的比较
3.3.3 RC4算法
3.4 分组加密算法
3.4.1 工作模式
3.4.2 短块加密
3.4.3 DES和3DES算法
3.4.4 SM4算法
3.5 利用OpenSSL进行对称加解密
3.5.1 基本概念
3.5.2 对称加解密相关函数
第4章 杂凑函数和HMAC
4.1 杂凑函数概述
4.1.1 什么是杂凑函数
4.1.2 密码学和杂凑函数
4.1.3 杂凑函数的发展
4.1.4 杂凑函数的设计
4.1.5 杂凑函数的分类
4.1.6 杂凑函数的碰撞
4.2 SM3杂凑算法
4.2.1 常量和函数
4.2.2 填充
4.2.3 迭代压缩
4.2.4 杂凑值
4.2.5 一段式SM3算法的实现
4.2.6 三段式SM3杂凑的实现
4.2.7 OpenSSL实现SM3算法
4.3 HMAC
4.3.1 什么是HMAC
4.3.2 产生背景
4.3.3 设计目标
4.3.4 算法描述
4.3.5 独立自主实现HMAC-SM3
4.4 SHA系列杂凑算法
4.4.1 SHA算法概述
4.4.2 SHA的发展史
4.4.3 SHA系列算法的核心思想和特点
4.4.4 单向性
4.4.5 主要用途
4.4.6 SHA256算法原理解析
4.4.7 SHA384和SHA512算法
4.5 更通用的基于OpenSSL的哈希运算
4.5.1 获取摘要算法函数EVP_get_digestbyname
4.5.2 创建结构体并初始化函数EVP_MD_CTX_create
4.5.3 销毁摘要上下文结构体EVP_MD_CTX_destroy
4.5.4 摘要初始化函数EVP_DigestInit_ex
4.5.5 摘要更新函数EVP_DigestUpdate
4.5.6 摘要结束函数EVP_Digest_Final_ex
4.5.7 单包摘要计算函数EVP_Digest
第5章 密码学中常见的编码格式
5.1 Base64编码
5.1.1 Base64编码的由来
5.1.2 Base64的索引表
5.1.3 Base64的转化原理
5.1.4 使用OpenSSL的base64命令
5.1.5 编程实现Base64编解码
5.2 PEM文件
5.2.1 什么是PEM文件
5.2.2 生成一个PEM文件
5.3 ASN.1和BER、DER
5.3.1 ASN.1的历史
5.3.2 ASN.1的基本概念
5.3.3 ASN.1和ASN.1编码规则在OSI中的应用
5.3.4 电子商务中ASN.1和DER编码的应用
5.3.5 ASN的优点
5.3.6 ASN.1的文法描述
5.3.7 编码规则
5.3.8 ASN.1实例
第6章 非对称算法RSA的加解密
6.1 非对称密码体制概述
6.2 RSA概述
6.3 RSA的数学基础
6.3.1 素数(质数)
6.3.2 素性检测
6.3.3 倍数
6.3.4 约数
6.3.5 互质数
6.3.6 质因数
6.3.7 强素数
6.3.8 因子
6.3.9 模运算
6.3.10 模运算的操作与性质
6.3.11 单向函数
6.3.12 费马定理和欧拉定理
6.3.13 幂
6.3.14 模幂运算
6.3.15 同余符号“≡”
6.3.16 欧拉函数
6.3.17 最大公约数
6.3.18 欧几里得算法
6.3.19 扩展欧几里得算法
6.4 RSA算法描述
6.5 RSA算法实例
6.5.1 查找法计算私钥d
6.5.2 简便法计算私钥d
6.5.3 扩展欧几里得算法计算私钥d
6.5.4 加密字母
6.5.5 分组加密字符串
6.6 熟悉PKCS#1
6.6.1 PKCS#1填充
6.6.2 PKCS#1中的RSA私钥语法
6.7 在OpenSSL命令中使用RSA
6.7.1 生成RSA公私钥
6.7.2 提取私钥各参数
6.7.3 RSA公钥加密一个文件
6.7.4 RSA私钥解密一个文件
6.8 基于OpenSSL库的RSA编程
6.8.1 OpenSSL的RSA实现
6.8.2 主要数据结构
6.8.3 主要函数
6.9 随机大素数的生成
6.10 RSA算法的攻击及分析
6.10.1 因子分解攻击
6.10.2 选择密文攻击
6.10.3 公共模数攻击
6.10.4 小指数攻击
第7章 数字签名技术
7.1 概述
7.2 什么是数字签名技术
7.2.1 签名
7.2.2 数字签名的基本概念
7.2.3 数字签名的原理
7.2.4 数字签名的一般性定义
7.2.5 数字签名的分类
7.2.6 数字签名的安全性
7.2.7 数字签名的特征与应用
7.3 RSA公钥算法在数字签名中的应用
7.4 使用OpenSSL命令进行签名和验签
7.5 基于OpenSSL的签名验签编程
7.5.1 直接使用RSA函数进行签名验签
7.5.2 使用EVP系列函数进行签名验签
第8章 椭圆曲线密码体制
8.1 概述
8.1.1 信息安全技术
8.1.2 密码体制
8.1.3 椭圆曲线密码体制
8.1.4 为什么使用椭圆曲线密码体制
8.2 背景基础知识
8.2.1 无穷远点
8.2.2 射影平面坐标系
8.2.3 域
8.2.4 数域
8.2.5 有限域
8.2.6 素数域
8.2.7 逆元
8.3 椭圆曲线的定义
8.4 密码学中的椭圆曲线
8.5 ECC算法体系
8.5.1 有限域的模运算
8.5.2 椭圆曲线上的点加和倍点运算
8.5.3 标量乘运算
8.5.4 数据加解密算法
第9章 CSP和CryptoAPI
9.1 什么是CSP
9.2 CryptoAPI简介
9.3 CSP服务体系
9.4 CSP的组成
9.5 CryptoAPI体系结构
9.6 CryptoAPI调用底层CSP服务方式
9.7 CrpytoAPI的基本功能
9.8 搭建CryptoAPI开发环境
9.9 基本加密函数
9.9.1 服务提供者函数
9.9.2 密钥的产生和交换函数
9.9.3 编码/解码函数
9.9.4 数据加密/解密函数
9.9.5 哈希和数字签名函数
第10章 身份认证和PKI理论基础
10.1 身份认证概述
10.1.1 网络安全与身份认证
10.1.2 网络环境下身份认证所面临的威胁
10.1.3 网络身份认证体系的发展现状
10.2 身份认证技术基础
10.2.1 用户名/密码认证
10.2.2 智能卡认证
10.2.3 生物特征认证
10.2.4 动态口令
10.2.5 USB Key认证
10.2.6 基于冲击响应的认证模式
10.2.7 基于数字证书PKI的认证模式
10.3 PKI概述
10.3.1 PKI的国内外应用状态
10.3.2 PKI的应用前景
10.3.3 PKI存在的问题及发展趋势
10.4 基于X.509证书的PKI认证体系
10.4.1 数字证书
10.4.2 数字信封
10.4.3 PKI体系结构
10.4.4 认证机构
10.4.5 基于X.509证书的身份认证
第11章 实战PKI
11.1 只有密码算法是不够的
11.2 OpenSSL实现CA的搭建
11.2.1 准备实验环境
11.2.2 熟悉CA环境
11.2.3 创建所需要的文件
11.2.4 CA自签名证书(构造根CA)
11.2.5 根CA为子CA颁发证书
11.2.6 普通用户向子CA申请证书
11.3 基于OpenSSL的证书编程
11.3.1 把DER编码转换为内部结构体函数d2i_X509
11.3.2 获得证书版本函数X509_get_version
11.3.3 获得证书序列号函数X509_get_serialNumber
11.3.4 获得证书颁发者信息函数X509_get_issuer_name
11.3.5 获得证书拥有者信息函数X509_get_subject_name
11.3.6 获得证书有效期的起始日期函数X509_get_notBefore
11.3.7 获得证书有效期的终止日期函数X509_get_notAfter
11.3.8 获得证书公钥函数X509_get_pubkey
11.3.9 创建证书存储区上下文环境函数X509_STORE_CTX
11.3.10 释放证书存储区上下文环境函数X509_STORE_CTX_free
11.3.11 初始化证书存储区上下文环境函数X509_STORE_CTX_init
11.3.12 验证证书函数X509_verify_cert
11.3.13 创建证书存储区函数X509_STORE_new
11.3.14 释放证书存储区函数X509_STORE_free
11.3.15 向证书存储区添加证书函数X509_STORE_add_cert
11.3.16 向证书存储区添加证书吊销列表函数X509_STORE_add_crl
11.3.17 释放X509结构体函数X509_free
11.4 证书编程实战
第12章 SSL-TLS编程
12.1 SSL协议规范
12.1.1 什么是SSL协议
12.1.2 SSL协议的优点
12.1.3 SSL协议的发展
12.1.4 SSL v3/TLS提供的服务
12.1.5 SSL协议层次结构模型
12.1.6 SSL记录层协议
12.1.7 SSL握手协议层
12.2 OpenSSL中的SSL编程
12.3 SSL函数
12.3.1 初始化SSL算法库函数SSL library_init
12.3.2 初始化SSL上下文环境变量函数SSL_CTX_new
12.3.3 释放SSL上下文环境变量函数SSL_CTX_free
12.3.4 文件形式设置SSL证书函数SSL_CTX _use_certificate_file
12.3.5 结构体方式设置SSL证书函数SSL_CTX_use_certificate
12.3.6 文件形式设置SSL私钥函数SSL_CTX_use_PrivateKey_file
12.3.7 结构体方式设置SSL私钥函数SSL_CTX_use_PrivateKey
12.3.8 检查SSL私钥和证书是否匹配函数SSL_CTX_check_private_key
12.3.9 创建SSL结构函数SSL_new
12.3.10 释放SSL套接字结构体函数SSL_free
12.3.11 设置读写套接字函数SSL_set_fd
12.3.12 设置只读套接字函数SSL_set_rfd
12.3.13 设置只写套接字函数SSL_set_wfd
12.3.14 启动TLS/SSL握手函数SSL_connect
12.3.15 接受SSL连接函数SSL_accept
12.3.16 获取对方的X509证书函数SSL_get_peer_certificate
12.3.17 向TLS/SSL连接写数据函数SSL_write
12.3.18 从TLS/SSL连接中读取数据函数SSL_Read
12.4 准备SSL通信所需的证书
12.4.1 准备实验环境
12.4.2 熟悉CA环境
12.4.3 创建所需要的文件
12.4.4 创建根CA的证书
12.4.5 生成服务端的证书请求文件
12.4.6 签发出服务端证书
12.4.7 生成客户端的证书请求文件
12.4.8 签发客户端证书
12.5 实战SSL网络编程
第13章 SM2算法的数学基础
13.1 素域Fp
13.1.1 素域Fp的定义
13.1.2 Fp上椭圆曲线的定义
13.1.3 Fp上椭圆曲线的阶
13.2 二元扩域□
13.2.1 二元扩域□的定义
13.2.2 □上椭圆曲线的定义
13.2.3 □上椭圆曲线的阶
13.3 椭圆曲线多倍点运算
13.3.1 定义
13.3.2 椭圆曲线多倍点运算的实现
13.3.3 椭圆曲线多倍点运算复杂度估计
13.4 求解椭圆曲线离散对数问题的方法
13.4.1 椭圆曲线离散对数求解方法
13.4.2 安全椭圆曲线满足的条件
13.5 椭圆曲线上点的压缩
13.5.1 定义
13.5.2 Fp上椭圆曲线点的压缩与解压缩方法
13.5.3 □上椭圆曲线点的压缩与解压缩方法
13.6 有限域和模运算
13.6.1 有限域中的指数运算
13.6.2 有限域中的逆运算
13.6.3 Lucas序列的生成
13.6.4 模素数平方根的求解
13.6.5 迹函数和半迹函数
13.6.6 □上二次方程的求解
13.6.7 整数模素数阶的检查
13.6.8 整数模素数阶的计算
13.6.9 模素数的阶为给定值的整数的构造
13.6.10 概率素性检测
13.6.11 近似素性检测
13.7 椭圆曲线算法
13.7.1 椭圆曲线阶的计算
13.7.2 椭圆曲线上点的寻找
13.8 曲线示例
13.8.1 Fp上的椭圆曲线
13.8.2 □上的椭圆曲线
13.9 椭圆曲线方程参数的拟随机生成
13.9.1 Fp上椭圆曲线方程参数的拟随机生成
13.9.2 □上椭圆曲线方程参数的拟随机生成
13.10 椭圆曲线方程参数的验证
13.10.1 Fp上椭圆曲线方程参数的验证
13.10.2 □上椭圆曲线方程参数的验证
第14章 SM2算法的实现
14.1 为何要推出SM2算法
14.2 SM2算法采用的椭圆曲线方程
14.3 SM2算法的用途
14.4 椭圆曲线密码体制的不足
14.5 椭圆曲线的研究热点
14.6 SM2算法中的有限域
14.6.1 素域Fq
14.6.2 二元扩域□
14.7 有限域上的椭圆曲线
14.7.1 Fp上的椭圆曲线
14.7.2 □上的椭圆曲线
14.8 椭圆曲线系统参数及其验证
14.8.1 一般要求
14.8.2 Fp上椭圆曲线系统参数及其验证
14.8.3 □上椭圆曲线系统参数及其验证
14.9 密钥对的生成
14.10 公钥的验证
14.10.1 Fp上椭圆曲线公钥的验证
14.10.2 □上椭圆曲线公钥的验证
14.11 MIRACL库入门
14.11.1 获取MIRACL
14.11.2 生成静态库并测试
14.12 SM2加解密算法
14.12.1 算法参数
14.12.2 辅助函数
14.12.3 加密算法及流程
14.12.4 解密算法及流程
14.12.5 椭圆曲线消息加解密示例
14.12.6 用代码实现SM2加解密算法
14.13 SM2数字签名
14.13.1 算法参数
14.13.2 辅助函数
14.13.3 数字签名的生成算法及流程
14.13.4 数字签名的验证算法及流程
14.13.5 数字签名与验证示例
14.13.6 用代码实现SM2签名验签算法
更新时间:2023-08-25 10:37:46