针对IT专业从业人员编写的密码书籍,讲述编写专家级的密码所需要掌握的知识和技术,安全并高效地实现密码学算法。新修订的第2版包括100多页的全新内容,同时对原有内容进行了修改和完善,使之涵盖密码学领域的最新技术进展。
图书特色
本书填补了公钥密码学的理论背景与其实现之间的文献空缺,对现代密码学理论进行解释,并提供了实现密码学算法的详细建议。你将会逐步掌握如何构建一个全面的源代码库,其中包括快速可靠的高精度算术函数、产生伪随机数的函数、散列函数、用于公钥密码学的函数,以及高级加密标准(Advanced Encryption Standard,AES)的一个实现。源代码中还加入了大量测试包。
即使你正在使用另一个高精度算术包构建密码学系统,你也能从本书给出的提示和说明中受益。尽管本书从数学的角度进行阐述,但尽力避免不必要的复杂性。本书的目标是透彻地解释复杂的C和C++源代码。该源代码可以从Apress的网站上下载,它包含所有实现现代密码学功能所需的基本构件。
无论你是关注密码学算法及其快速可靠的实现,还是对密码学软件的理论感兴趣,本书都适合你。对密码学或任何其他有关大整数算术的数论问题感兴趣的学生,也会发现本书的价值。
作者简介
迈克尔·威尔森巴赫(Michael Welschenbach) 任职于德国波恩的SRC安全研发和咨询公司。他是科隆大学数学硕士,长期从事纯密码和应用密码研究。当前,他最常采用C和C++语言来编写密码。
第一部分 算术与数论:C实现 1
第1章 绪论 2
第2章 数的格式:C中大数的表示 7
第3章 接口语义 10
第4章 基本运算 12
4.1 加法和减法 12
4.2 乘法 19
4.2.1 小学乘法方法 20
4.2.2 更快的平方运算 24
4.2.3 Karatsuba能否做得更好 27
4.3 带余除法 30
第5章 模算术:剩余类计算 40
第6章 百川归海:模幂运算 48
6.1 第一种方法 48
6.2 M进制取幂 52
6.3 加法链及窗口 61
6.4 Montgomery约简和取幂 64
6.5 取幂运算的密码学应用 72
第7章 位运算与逻辑函数 77
7.1 移位运算 77
7.2 有或无:位关系 81
7.3 对单个二进制数字的直接访问 85
7.4 比较运算符 87
第8章 输入、输出、赋值和转换 91
第9章 动态寄存器 98
第10章 基本数论函数 104
10.1 最大公约数 104
10.2 剩余类环中的乘法逆 109
10.3 根与对数 114
10.4 剩余类环中的平方根 120
10.4.1 Jacobi符号 120
10.4.2 模pk的平方根 125
10.4.3 模n的平方根 128
10.4.4 基于二次剩余的密码学 133
10.5 素性检验 135
第11章 Rijndael:数据加密标准的后继者 151
11.1 多项式运算 152
11.2 Rijndael算法 155
11.3 计算轮密钥 157
11.4 S盒 158
11.5 行移位变换 160
11.6 列混合变换 160
11.7 轮密钥加 161
11.8 一个完整的加密过程 161
11.9 解密 164
11.10 性能 166
11.11 运行模式 166
第12章 大随机数 167
12.1 一个简单的随机数生成器 169
12.2 密码学的随机数生成器 171
12.2.1 初始值的生成 172
12.2.2 BBS随机数生成器 175
12.2.3 AES生成器 178
12.2.4 RMDSHA-1生成器 181
12.3 质量测试 183
12.3.1 卡方检验 183
12.3.2 单位检验 184
12.3.3 扑克检验 184
12.3.4 游程检验 184
12.3.5 长游程检验 185
12.3.6 自相关检验 185
12.3.7 FLINT/CLINT随机数生成器的质量 185
12.4 更复杂的函数 186
第13章 测试LINT的策略 194
13.1 静态分析 195
13.2 运行时测试 196
第二部分 算术:C++实现与LINT类 201
第14章 用C++精简生活 202
14.1 非公共事务:LINT中数的表示 205
14.2 构造函数 206
14.3 重载运算符 208
第15章 LINT公共接口:成员函数和友元函数 213
15.1 算术 213
15.2 数论 219
15.3 LINT对象的I/O流 222
15.3.1 LINT对象的格式化输出 223
15.3.2 操纵器 228
15.3.3 LINT对象的文件I/O 230
第16章 错误处理 233
16.1 杜绝慌乱 233
16.2 用户定义的错误处理 234
16.3 LINT异常 235
第17章 一个应用实例:RSA密码体制 239
17.1 非对称密码体制 239
17.2 RSA算法 240
17.3 RSA数字签名 250
17.4 C++的RSA类 255
第18章 自己动手测试LINT 263
第19章 更进一步的扩展方法 265
第三部分 附录 267
附录A C函数目录 268
附录B C++函数目录 275
附录C 宏 286
附录D 计算时间 290
附录E 符号 292
附录F 运算和数论软件包 293
参考文献 295
评论0