![]() ![]() |
应用密码学:协议、算法与C源程序(原书第2版)
《计算机科学丛书·应用密码学:协议、算法与C源程序(原书第2版)》共分四个部分,定义了密码学的多个术语,介绍了密码学的发展及背景,描述了密码学从简单到复杂的各种协议,详细讨论了密码技术。并在此基础上列举了如DES、IDEA、RSA、DSA等十多个算法以及多个应用实例,并提供了算法的源代码清单。
《计算机科学丛书·应用密码学:协议、算法与C源程序(原书第2版)》内容广博权威,具有极大的实用价值,是致力于密码学研究的专业及非专业人员一本难得的好书。
世界上有两种密码:一种是防止小孩偷看你的文件;另一种是防止当局阅读你的文件。本书写的是后一种情况。
如果把一封信锁在保险柜中,把保险柜藏在纽约的某个地方,然后告诉你去看这封信,这并不是安全,而是隐藏。相反,如果把一封信锁在保险柜中,然后把保险柜及其设计规范和许多同样的保险柜给你,以便你和世界上最好的开保险柜的专家能够研究锁的装置,而你还是无法打开保险柜去读这封信,这才是安全的概念。 许多年来,密码学是军队专有的领域。NSA和苏联、英国、法国、以色列以及其他国家的安全机构已将大量的财力投入到加密自己的通信,同时又千方百计地破译别人的通信的残酷游戏中。面对这些政府,个人既无专业知识又无足够财力保护自己的秘密。 在过去的20年里,公开的密码学研究爆炸性地增长。从第二次世界大战以来,当普通公民还在长期使用经典密码时,计算机密码学已成为世界军事专有的领域。今天,最新的计算机密码学已应用到军事机构外,现在就连非专业人员都可以利用密码技术去阻止最强大的敌人,包括军方的安全机构。 普通百姓真的需要这种保密性吗?是的,他们可能正在策划一次政治运动,讨论税收或正干一件非法的事情;也可能正设计一件新产品,讨论一种市场策略,或计划接管竞争对手的生意;或者可能生活在一个不尊重个人隐私权的国家,也可能做一些他们自己认为并非违法实际却是非法的事情。不管理由是什么,他的数据和通信都是私人的、秘密的,与他人无关。 本书正好在混乱的年代出版。1994年,克林顿当局核准了托管加密标准(包括Clipper芯片和Fortezza卡),并将数字电话法案签署成为法律。这两个行政令企图确保政府实施电子监控的能力。 一些危险的Orwellian假设在作祟:政府有权侦听私人通信,个人对政府保守秘密是错误的。如果可能,法律总有能力强制实施法院授权的监控,但是,这是公民第一次被迫采取“积极措施”,以使他们自己能被监控。这两个行政令并不是政府在某个模糊范围内的简单倡议,而是一种先发制人的单方面尝试,旨在侵占以前属于公民的权力。 Clipper和数字电话不保护隐私,它强迫个人无条件地相信政府将尊重他们的隐私。非法窃听小马丁·路德·金电话的执法机构,同样也能容易地窃听用Clipper保护的电话。最近,地方警察机关在不少管区都有因非法窃听而被控有罪或被提出民事诉讼的事件,这些地方包括马里兰、康涅狄格、佛蒙特、佐治亚、密苏里和内华达。为了随时方便警察局的工作而配置这种技术是很糟糕的想法。 这给我们的教训是采用法律手段并不能充分保护我们自己,还需要用数学来保护自己。加密太重要了,不能让给政府独享。 本书为你提供了一些可用来保护自己隐私的工具。提供密码产品可能被宣布为非法,但提供有关的信息绝不会犯法。 怎样阅读本书 我写本书的目的是为了在真实地介绍密码学的同时给出全面的参考文献。我尽量在不损失正确性的情况下保持本书的可读性,我不想使本书成为一本数学书。虽然我无意给出任何错误信息,但匆忙中理论难免有失严谨。对形式方法感兴趣的人,可以参考大量的学术文献。 第1章介绍密码学,定义许多术语,简要讨论计算机出现前密码学的情况。 第一部分(第2~6章)描述密码学的各种协议:人们能用密码学做什么。协议范围从简单(一人向另一人发送加密消息)到复杂(在电话上抛掷硬币)再到深奥(秘密的和匿名的数字货币交易)。这些协议中有些一目了然,有些却十分奇异。密码学能够解决大多数人绝没有认识到的许多问题。 第二部分(第7~10章)讨论密码技术。对密码学的大多数基本应用来说,这一部分的4章都很重要。第7章和第8章讨论密钥:密钥应选多长才能保密,怎样产生、存储密钥,怎样处理密钥等。密钥管理是密码学最困难的部分,经常是保密系统的一个致命弱点。第9章讨论使用密码算法的不同方法。第10章给出与算法有关的细节:怎样选择、实现和使用算法。 第三部分(第11~23章)列出多个算法。第11章提供数学背景,如果你对公开密钥算法感兴趣,那么这一章你一定要了解。如果你只想实现DES(或类似的东西),则可以跳过这一章。第12章讨论DES:DES算法、它的历史、安全性和一些变型。第13~15章讨论其他的分组算法:如果你需要比DES更保密的算法,请阅读IDEA和三重DES算法这节;如果你想知道一系列比DES算法更安全的算法,就请读完整章。第16章和第17章讨论序列密码算法。第18章集中讨论单向散列函数,虽然讨论了多种单向散列函数,但MD5和SHA是最通用的。第19章讨论公开密钥加密算法。第20章讨论公开密钥数字签名算法。第21章讨论公开密钥鉴别算法。第22章讨论公开密钥交换算法。几种重要的公开密钥算法分别是 RSA、DSA、Fiat-Shamir和Diffie-Hellman。第23章讨论更深奥的公开密钥算法和协议,这一章的数学知识非常复杂,请你做好思想准备。 第四部分(第24~25章)转向密码学的真实世界。第24章讨论这些算法和协议的一些实际实现;第25章涉及围绕密码学的一些政治问题。这些章节并不全面。 此外,本书还包括在第三部分讨论的10个算法的源代码清单,由于篇幅的限制,不可能给出所有的源代码,况且密码的源代码不能出口(非常奇怪的是,国务院允许本书的第1版和源代码出口,但不允许含有同样源代码的计算机磁盘出口)。配套的源代码盘中包括的源代码比本书中列出的要多得多,这也许是除军事机构以外最大的密码源代码集。我只能给住在美国和加拿大的公民发送源代码盘,但我希望有一天这种情况会改变。 对本书的一种批评是,它的广博性代替了可读性。这是对的,但我想给可能偶然在学术文献或产品中需要算法的人提供参考。密码学领域正日趋热门,这是第一次把这么多资料收集在一本书中。即使这样,还是有许多东西限于篇幅舍弃了,但尽量保留了那些我认为是重要的、有实用价值的或者有趣的专题。如果我对某一专题讨论不深,我会给出深入讨论这些专题的参考文献。 我在写作过程中已尽力查出和根除书中的错误,但我相信不可能消除所有的错误。第2版肯定比第1版的错误少得多。勘误表可以从我这里得到,并且它定期发往Usenet的新闻组 sci.crypt。如果读者发现错误,请通知我,我将不胜感谢。
BruceSchneier是国际知名的安全技术专家,被《经济学家》(TheEconomist)杂志称为“安全大师”(Securityguru)。他是12本安全方面技术图书的作者,还是数百篇文章、杂文和学术论文的作者。他的有影响力的通讯“Crypto—Gram”和博客“SchneieronSecurity”有超过257J的读者和浏览者。他曾在国会作证,还经常做客电视台和广播电台,并在几个政府委员会供职。他是哈佛大学法学院伯克曼互联网和社会中心的fellow,新美国基金会开放科技中心的programfellow,电子前哨基金会的董事会成员,电子隐私信息中心的咨询委员会成员,以及BT(原英国电信)的安全未来学家。
Applied Cryptography:Protocols,Algorithms,and Source Code in C,Second Edition
出版者的话 译者序 Whitfield Diffie序 前言 第1章 基础知识 1.1 专业术语 1.1.1 发送者和接收者 1.1.2 消息和加密 1.1.3 鉴别、完整性和抗抵赖 1.1.4 算法和密钥 1.1.5 对称算法 1.1.6 公开密钥算法 1.1.7 密码分析 1.1.8 算法的安全性 1.1.9 过去的术语 1.2 隐写术 1.3 代替密码和换位密码 1.3.1 代替密码 1.3.2 换位密码 1.3.3 转轮机 1.3.4 进一步的读物 1.4 简单异或 1.5 一次一密乱码本 1.6 计算机算法 1.7 大数 第一部分 密码协议 第2章 协议结构模块 2.1 协议概述 2.1.1 协议的目的 2.1.2 协议中的角色 2.1.3 仲裁协议 2.1.4 裁决协议 2.1.5 自动执行协议 2.1.6 对协议的攻击 2.2 使用对称密码系统通信 2.3 单向函数 2.4 单向散列函数 2.5 使用公开密钥密码系统通信 2.5.1 混合密码系统 2.5.2 Merkle的难题 2.6 数字签名 2.6.1 使用对称密码系统和仲裁者对文件签名 2.6.2 数字签名树 2.6.3 使用公开密钥密码系统对文件签名 2.6.4 文件签名和时间标记 2.6.5 使用公开密钥密码系统和单向散列函数对文件签名 2.6.6 算法和术语 2.6.7 多重签名 2.6.8 抗抵赖和数字签名 2.6.9 数字签名的应用 2.7 带加密的数字签名 2.7.1 重新发送消息作为收据 2.7.2 阻止重新发送攻击 2.7.3 对公开密钥密码系统的攻击 2.8 随机和伪随机序列的产生 2.8.1 伪随机序列 2.8.2 密码学意义上安全的伪随机序列 2.8.3 真正的随机序列 第3章 基本协议 3.1 密钥交换 3.1.1 对称密码系统的密钥交换 3.1.2 公开密钥密码系统的密钥交换 3.1.3 中间人攻击 3.1.4 连锁协议 3.1.5 使用数字签名的密钥交换 3.1.6 密钥和消息传输 3.1.7 密钥和消息广播 3.2 鉴别 3.2.1 使用单向函数鉴别 3.2.2 字典式攻击和salt 3.2.3 SKEY 3.2.4 使用公开密钥密码系统鉴别 3.2.5 使用联锁协议互相鉴别 3.2.6 SKID 3.2.7 消息鉴别 3.3 鉴别和密钥交换 3.3.1 Wide-Mouth Frog协议 3.3.2 Yahalom协议 3.3.3 Needham-Schroeder协议 3.3.4 Otway-Rees协议 3.3.5 Kerberos协议 3.3.6 Neuman-Stubblebine协议 3.3.7 DASS协议 3.3.8 Denning-Sacco协议 3.3.9 Woo-Lam协议 3.3.10 其他协议 3.3.11 学术上的教训 3.4 鉴别和密钥交换协议的形式化分析 3.5 多密钥公开密钥密码系统 3.6 秘密分割 3.7 秘密共享 3.7.1 有骗子的秘密共享 3.7.2 没有Trent的秘密共享 3.7.3 不暴露共享的秘密共享 3.7.4 可验证的秘密共享 3.7.5 带预防的秘密共享 3.7.6 带除名的秘密共享 3.8 数据库的密码保护 第4章 中级协议 4.1 时间标记服务 4.1.1 仲裁解决方法 4.1.2 改进的仲裁解决方法 4.1.3 链接协议 4.1.4 分布式协议 4.1.5 进一步的工作 4.2 阈下信道 4.2.1 阈下信道的应用 4.2.2 杜绝阈下的签名 4.3 不可抵赖的数字签名 4.4 指定的确认者签名 4.5 代理签名 4.6 团体签名 4.7 失败终止数字签名 4.8 加密数据计算 4.9 位承诺 4.9.1 使用对称密码系统的位承诺 4.9.2 使用单向函数的位承诺 4.9.3 使用伪随机序列发生器的位承诺 4.9.4 模糊点 4.10 公平的硬币抛掷 4.10.1 使用单向函数的抛币协议 4.10.2 使用公开密钥密码系统的抛币协议 4.10.3 抛币入井协议 4.10.4 使用抛币产生密钥 4.11 智力扑克 4.11.1 三方智力扑克 4.11.2 对扑克协议的攻击 4.11.3 匿名密钥分配 4.12 单向累加器 4.13 秘密的全或无泄露 4.14 密钥托管 第5章 高级协议 5.1 零知识证明 5.1.1 基本的零知识协议 5.1.2 图同构 5.1.3 汉密尔顿圈 5.1.4 并行零知识证明 5.1.5 非交互式零知识证明 5.1.6 一般性 5.2 身份的零知识证明 5.2.1 国际象棋特级大师问题 5.2.2 黑手党骗局 5.2.3 恐怖分子骗局 5.2.4 建议的解决方法 5.2.5 多重身份骗局 5.2.6 出租护照 5.2.7 成员资格证明 5.3 盲签名 5.3.1 完全盲签名 5.3.2 盲签名协议 5.3.3 专利 5.4 基于身份的公开密钥密码系统 5.5 不经意传输 5.6 不经意签名 5.7 同时签约 5.7.1 带有仲裁者的签约 5.7.2 无需仲裁者的同时签约:面对面 5.7.3 无需仲裁者的同时签约:非面对面 5.7.4 无需仲裁者的同时签约:使用密码系统 5.8 数字证明邮件 5.9 秘密的同时交换 第6章 深奥的协议 6.1 保密选举 6.1.1 简单投票协议 6.1.2 简单投票协议 6.1.3 使用盲签名投票 6.1.4 带有两个中央机构的投票 6.1.5 带有单个中央机构的投票 6.1.6 改进的带有单个中央机构的投票 6.1.7 无需中央制表机构的投票 6.1.8 其他投票方案 6.2 保密的多方计算 6.2.1 协议 6.2.2 协议 6.2.3 协议 6.2.4 协议 6.2.5 无条件多方安全协议 6.2.6 保密电路计算 6.3 匿名消息广播 6.4 数字现金 6.4.1 协议 6.4.2 协议 6.4.3 协议 6.4.4 协议 6.4.5 数字现金和高明的犯罪 6.4.6 实用化的数字现金 6.4.7 其他数字现金协议 6.4.8 匿名信用卡 第二部分 密码技术 第7章 密钥长度 7.1 对称密钥长度 7.1.1 穷举攻击所需时间和金钱估计 7.1.2 软件破译机 7.1.3 神经网络 7.1.4 病毒 7.1.5 中国式抽彩法 7.1.6 生物工程技术 7.1.7 热力学的局限性 7.2 公开密钥长度 7.2.1 DNA计算法 7.2.2 量子计算法 7.3 对称密钥和公开密钥长度的比较 7.4 对单向散列函数的生日攻击 7.5 密钥应该多长 7.6 小结 第8章 密钥管理 8.1 产生密钥 8.1.1 减少的密钥空间 8.1.2 弱密钥选择 8.1.3 随机密钥 8.1.4 通行短语 8.1.5 X9.17密钥产生 8.1.6 DoD密钥产生 8.2 非线性密钥空间 8.3 传输密钥 8.4 验证密钥 8.4.1 密钥传输中的错误检测 8.4.2 解密过程中的错误检测 8.5 使用密钥 8.6 更新密钥 8.7 存储密钥 8.8 备份密钥 8.9 泄露密钥 8.10 密钥有效期 8.11 销毁密钥 8.12 公开密钥的密钥管理 8.12.1 公开密钥证书 8.12.2 分布式密钥管理 第9章 算法类型和模式 9.1 电子密码本模式 9.2 分组重放 9.3 密码分组链接模式 9.3.1 初始化向量 9.3.2 填充 9.3.3 错误扩散 9.3.4 安全问题 9.4 序列密码算法 9.5 自同步序列密码 9.6 密码反馈模式 9.6.1 初始化向量 9.6.2 错误扩散 9.7 同步序列密码 9.8 输出反馈模式 9.8.1 初始化向量 9.8.2 错误扩散 9.8.3 安全问题 9.8.4 OFB模式中的序列密码 9.9 计数器模式 9.10 其他分组密码模式 9.10.1 分组链接模式 9.10.2 扩散密码分组链接模式 9.10.3 带校验和的密码分组链接 9.10.4 带非线性函数的输出反馈 9.10.5 其他模式 9.11 选择密码模式 9.12 交错 9.13 分组密码与序列密码 第10章 使用算法 10.1 选择算法 10.2 公开密钥密码系统与对称密码系统 10.3 通信信道加密 10.3.1 链链加密 10.3.2 端端加密 10.3.3 两者的结合 10.4 用于存储的加密数据 10.4.1 非关联密钥 10.4.2 驱动器级与文件级加密 10.4.3 提供加密驱动器的随机存取 10.5 硬件加密与软件加密 10.5.1 硬件 10.5.2 软件 10.6 压缩、编码及加密 10.7 检测加密 10.8 密文中隐藏密文 10.9 销毁信息 第三部分 密码算法 第11章 数学背景 11.1 信息论 11.1.1 熵和不确定性 11.1.2 语言信息率 11.1.3 密码系统的安全性 11.1.4 唯一解距离 11.1.5 信息论的运用 11.1.6 混乱和扩散 11.2 复杂性理论 11.2.1 算法的复杂性 11.2.2 问题的复杂性 11.2.3 NP完全问题 11.3 数论 11.3.1 模运算 11.3.2 素数 11.3.3 最大公因子 11.3.4 求模逆元 11.3.5 求系数 11.3.6 费尔马小定理 11.3.7 欧拉φ函数 11.3.8 中国剩余定理 11.3.9 二次剩余 11.3.10 勒让德符号 11.3.11 雅可比符号 11.3.12 Blum整数 11.3.13 生成元 11.3.14 伽罗瓦域中的计算 11.4 因子分解 11.5 素数的产生 11.5.1 Solovag-Strassen 11.5.2 Lehmann 11.5.3 Rabin-Miller 11.5.4 实际考虑 11.5.5 强素数 11.6 有限域上的离散对数 第12章 数据加密标准 12.1 背景 12.1.1 标准的开发 12.1.2 标准的采用 12.1.3 DES设备的鉴定和认证 12.1.4 1987年的标准 12.1.5 1993年的标准 12.2 DES的描述 12.2.1 算法概要 12.2.2 初始置换 12.2.3 密钥置换 12.2.4 扩展置换 12.2.5 S盒代替 12.2.6 P盒置换 12.2.7 末置换 12.2.8 DES解密 12.2.9 DES的工作模式 12.2.10 DES的硬件和软件实现 12.3 DES的安全性 12.3.1 弱密钥 12.3.2 补密钥 12.3.3 代数结构 12.3.4 密钥的长度 12.3.5 迭代的次数 12.3.6 S盒的设计 12.3.7 其他结论 12.4 差分及线性分析 12.4.1 差分密码分析 12.4.2 相关密钥密码分析 12.4.3 线性密码分析 12.4.4 未来的方向 12.5 实际设计准则 12.6 DES的各种变型 12.6.1 多重DES 12.6.2 使用独立子密钥的DES 12.6.3 DESX 12.6.4 CRYPT(3) 12.6.5 GDES 12.6.6 更换S盒的DES 12.6.7 RDES 12.6.8 snDES 12.6.9 使用相关密钥S盒的DES 12.7 DES现今的安全性 第13章 其他分组密码算法 13.1 Lucifer算法 13.2 Madryga算法 13.2.1 Madryga的描述 13.2.2 Madryga的密码分析 13.3 NewDES算法 13.4 FEAL算法 13.4.1 FEAL的描述 13.4.2 FEAL的密码分析 13.4.3 专利 13.5 REDOC算法 13.5.1 REDOC Ⅲ 13.5.2 专利和许可证 13.6 LOKI算法 13.6.1 LOKI 13.6.2 LOKI91的描述 13.6.3 LOKI91的密码分析 13.6.4 专利和许可证 13.7 Khufu和Khafre算法 13.7.1 Khufu 13.7.2 Khafre 13.7.3 专利 13.8 RC2算法 13.9 IDEA算法 13.9.1 IDEA 13.9.2 IDEA的描述 13.9.3 IDEA的速度 13.9.4 IDEA的密码分析 13.9.5 IDEA的操作方式和变型 13.9.6 敬告使用者 13.9.7 专利和许可证 13.10 MMB算法 13.11 CA-1.1算法 13.12 Skipjack算法 第14章 其他分组密码算法(续) 14.1 GOST算法 14.1.1 GOST的描述 14.1.2 GOST的密码分析 14.2 CAST算法 14.3 Blowfish算法 14.3.1 Blowfish的描述 14.3.2 Blowfish的安全性 14.4 SAFER算法 14.4.1 SAFER K-64的描述 14.4.2 SAFER K- 14.4.3 SAFER K-64的安全性 14.5 3-Way算法 14.6 Crab算法 14.7 SXAL8/MBAL算法 14.8 RC5算法 14.9 其他分组密码算法 14.10 分组密码设计理论 14.10.1 Feistel网络 14.10.2 简单关系 14.10.3 群结构 14.10.4 弱密钥 14.10.5 强的抗差分攻击和线性攻击 14.10.6 S盒的设计 14.10.7 设计分组密码 14.11 使用单向散列函数 14.11.1 Karn 14.11.2 Luby-Rackoff 14.11.3 消息摘要密码 14.11.4 基于单向散列函数的密码安全性 14.12 分组密码算法的选择 第15章 组合分组密码 15.1 双重加密 15.2 三重加密 15.2.1 用两个密钥进行三重加密 15.2.2 用三个密钥进行三重加密 15.2.3 用最小密钥进行三重加密 15.2.4 三重加密模式 15.2.5 三重加密的变型 15.3 加倍分组长度 15.4 其他多重加密方案 15.4.1 双重OFB/计数器 15.4.2 ECB+OFB 15.4.3 xDESi 15.4.4 五重加密 15.5 缩短CDMF密钥 15.6 白化 15.7 级联多重加密算法 15.8 组合多重分组算法 第16章 伪随机序列发生器和序列密码 16.1 线性同余发生器 16.2 线性反馈移位寄存器 16.3 序列密码的设计与分析 16.3.1 线性复杂性 16.3.2 相关免疫性 16.3.3 其他攻击 16.4 使用LFSR的序列密码 16.4.1 Geffe发生器 16.4.2 推广的Geffe发生器 16.4.3 Jennings发生器 16.4.4 Beth-Piper停走式发生器 16.4.5 交错停走式发生器 16.4.6 双侧停走式发生器 16.4.7 门限发生器 16.4.8 自采样发生器 16.4.9 多倍速率内积式发生器 16.4.10 求和式发生器 16.4.11 DNRSG 16.4.12 Gollmann级联 16.4.13 收缩式发生器 16.4.14 自收缩式发生器 16.5 A5算法 16.6 Hughes XPD/KPD算法 16.7 Nanoteq算法 16.8 Rambutan算法 16.9 附加式发生器 16.9.1 Fish发生器 16.9.2 Pike发生器 16.9.3 Mush发生器 16.10 Gifford算法 16.11 M算法 16.12 PKZIP算法 第17章 其他序列密码和真随机序列发生器 17.1 RC4算法 17.2 SEAL算法 17.2.1 伪随机函数族 17.2.2 SEAL的描述 17.2.3 SEAL的安全性 17.2.4 专利和许可证 17.3 WAKE算法 17.4 带进位的反馈移位寄存器 17.5 使用FCSR的序列密码 17.5.1 级联发生器 17.5.2 FCSR组合发生器 17.5.3 LFSR/FCSR加法/奇偶级联 17.5.4 交错停走式发生器 17.5.5 收缩式发生器 17.6 非线性反馈移位寄存器 17.7 其他序列密码 17.7.1 Pless发生器 17.7.2 蜂窝式自动发生器 17.7.3 1/p发生器 17.7.4 crypt(1) 17.7.5 其他方案 17.8 序列密码设计的系统理论方法 17.9 序列密码设计的复杂性理论方法 17.9.1 Shamir伪随机数发生器 17.9.2 Blum-Micali发生器 17.9.3 RSA 17.9.4 Blum、Blum和Shub 17.10 序列密码设计的其他方法 17.10.1 Rip van Winkle密码 17.10.2 Diffie随机序列密码 17.10.3 Maurer随机序列密码 17.11 级联多个序列密码 17.12 选择序列密码 17.13 从单个伪随机序列发生器产生多个序列 17.14 真随机序列发生器 17.14.1 RAND表 17.14.2 使用随机噪声 17.14.3 使用计算机时钟 17.14.4 测量键盘反应时间 17.14.5 偏差和相关性 17.14.6 提取随机性 第18章 单向散列函数 18.1 背景 18.1.1 单向散列函数的长度 18.1.2 单向散列函数综述 18.2 Snefru算法 18.3 N-Hash算法 18.4 MD4算法 18.5 MD5算法 18.5.1 MD5的描述 18.5.2 MD5的安全性 18.6 MD2算法 18.7 安全散列算法 18.7.1 SHA的描述 18.7.2 SHA的安全性 18.8 RIPE-MD算法 18.9 HAVAL算法 18.10 其他单向散列函数 18.11 使用对称分组算法的单向散列函数 18.11.1 散列长度等于分组长度的方案 18.11.2 改进的Davies-Meyer 18.11.3 Preneel-Bosselaers-Govaerts-Vandewalle 18.11.4 Quisquater-Girault 18.11.5 LOKI双分组 18.11.6 并行Davies-Meyer 18.11.7 串联和并联Davies-Meyer 18.11.8 MDC-2和MDC- 18.11.9 AR散列函数 18.11.10 GOST散列函数 18.11.11 其他方案 18.12 使用公开密钥算法 18.13 选择单向散列函数 18.14 消息鉴别码 18.14.1 CBC-MAC 18.14.2 消息鉴别算法 18.14.3 双向MAC 18.14.4 Jueneman方法 18.14.5 RIPE-MAC 18.14.6 IBC-Hash 18.14.7 单向散列函数MAC 18.14.8 序列密码MAC 第19章 公开密钥算法 19.1 背景 19.2 背包算法 19.2.1 超递增背包 19.2.2 由私人密钥产生公开密钥 19.2.3 加密 19.2.4 解密 19.2.5 实际的实现方案 19.2.6 背包的安全性 19.2.7 背包变型 19.2.8 专利 19.3 RSA算法 19.3.1 RSA的硬件实现 19.3.2 RSA的速度 19.3.3 软件加速 19.3.4 RSA的安全性 19.3.5 对RSA的选择密文攻击 19.3.6 对RSA的公共模数攻击 19.3.7 对RSA的低加密指数攻击 19.3.8 对RSA的低解密指数攻击 19.3.9 经验 19.3.10 对RSA的加密和签名攻击 19.3.11 标准 19.3.12 专利 19.4 Pohlig-Hellman算法 19.5 Rabin算法 19.6 ElGamal算法 19.6.1 ElGamal签名 19.6.2 ElGamal加密 19.6.3 速度 19.6.4 专利 19.7 McEliece算法 19.8 椭圆曲线密码系统 19.9 LUC算法 19.10 有限自动机公开密钥密码系统 第20章 公开密钥数字签名算法 20.1 数字签名算法 20.1.1 对通告的反应 20.1.2 DSA的描述 20.1.3 快速预计算 20.1.4 DSA的素数产生 20.1.5 使用DSA的ElGamal加密 20.1.6 使用DSA的RSA加密 20.1.7 DSA的安全性 20.1.8 攻击k 20.1.9 公共模数的危险 20.1.10 DSA中的阈下信道 20.1.11 专利 20.2 DSA的变型 20.3 GOST数字签名算法 20.4 离散对数签名方案 20.5 Ong-Schnorr-Shamir签名方案 20.6 ESIGN签名方案 20.6.1 ESIGN的安全性 20.6.2 专利 20.7 细胞自动机 20.8 其他公开密钥算法 第21章 鉴别方案 21.1 Feige-Fiat-Shamir算法 21.1.1 简化的Feige-Fiat-Shamir身份鉴别方案 21.1.2 Feige-Fiat-Shamir身份鉴别方案 21.1.3 例子 21.1.4 加强方案 21.1.5 Fiat-Shamir签名方案 21.1.6 改进的Fiat-Shamir签名方案 21.1.7 其他加强方案 21.1.8 Ohta-Okamoto身份鉴别方案 21.1.9 专利 21.2 Guillou-Quisquater算法 21.2.1 Guillou-Quisquater身份鉴别方案 21.2.2 Guillou-Quisquater数字签名方案 21.2.3 多重签名 21.3 Schnorr算法 21.3.1 鉴别协议 21.3.2 数字签名协议 21.3.3 专利 21.4 将身份鉴别方案转为数字签名方案 第22章 密钥交换算法 22.1 Diffie-Hellman算法 22.1.1 三方或多方Diffie-Hellman 22.1.2 扩展Diffie-Hellman 22.1.3 Hughes 22.1.4 不用交换密钥的密钥交换 22.1.5 专利 22.2 站间协议 22.3 Shamir的三次传递协议 22.4 COMSET协议 22.5 加密密钥交换 22.5.1 基本EKE协议 22.5.2 用RSA实现EKE 22.5.3 用ElGamal实现EKE 22.5.4 用Diffie-Hellman实现EKE 22.5.5 加强的EKE 22.5.6 扩充的EKE 22.5.7 EKE的应用 22.6 加强的密钥协商 22.7 会议密钥分发和秘密广播 22.7.1 会议密钥分发 22.7.2 Tatebayashi-Matsuzaki-Newman 第23章 协议的专用算法 23.1 多重密钥的公开密钥密码系统 23.2 秘密共享算法 23.2.1 LaGrange插值多项式方案 23.2.2 矢量方案 23.2.3 Asmuth-Bloom 23.2.4 Kamin-Greene-Hellman 23.2.5 高级门限方案 23.2.6 有骗子情况下的秘密共享 23.3 阈下信道 23.3.1 Ong-Schnorr-Shamir 23.3.2 ElGamal 23.3.3 ESIGN 23.3.4 DSA 23.3.5 挫败DSA阈下信道 23.3.6 其他方案 23.4 不可抵赖的数字签名 23.5 指定的确认者签名 23.6 用加密数据计算 23.7 公平的硬币抛掷 23.7.1 利用平方根的硬币抛掷 23.7.2 利用模p指数运算的硬币抛掷 23.7.3 利用Blum整数的硬币抛掷 23.8 单向累加器 23.9 秘密的全或无泄露 23.10 公正和故障保险密码系统 23.10.1 公正的Diffie-Hellman 23.10.2 故障保险的Diffie-Hellman 23.11 知识的零知识证明 23.11.1 离散对数的零知识证明 23.11.2 破译RSA能力的零知识证明 23.11.3 n是一个Blum整数的零知识证明 23.12 盲签名 23.13 不经意传输 23.14 保密的多方计算 23.15 概率加密 23.16 量子密码学 第四部分 真实世界 第24章 实现方案实例 24.1 IBM秘密密钥管理协议 24.2 MITRENET 24.3 ISDN 24.3.1 密钥 24.3.2 呼叫 24.4 STU-Ⅲ 24.5 Kerberos 24.5.1 Kerberos模型 24.5.2 Kerberos工作原理 24.5.3 凭证 24.5.4 Kerberos第5版消息 24.5.5 最初票据的获取 24.5.6 服务器票据的获取 24.5.7 服务请求 24.5.8 Kerberos第4版 24.5.9 Kerberos的安全性 24.5.10 许可证 24.6 KryptoKnight 24.7 SESAME 24.8 IBM通用密码体系 24.9 ISO鉴别框架 24.9.1 证书 24.9.2 鉴别协议 24.10 保密性增强邮件 24.10.1 PEM的有关文件 24.10.2 证书 24.10.3 PEM的消息 24.10.4 PEM的安全性 24.10.5 TIS/PEM 24.10.6 RIPEM 24.11 消息安全协议 24.12 Pretty Good Privacy 24.13 智能卡 24.14 公开密钥密码学标准 24.15 通用电子支付系统 24.16 Clipper 24.17 Capstone 24.18 AT&T 3600型电话保密设备 第25章 政治 25.1 国家安全局 25.2 国家计算机安全中心 25.3 国家标准技术所 25.4 RSA数据安全有限公司 25.5 公开密钥合作商 25.6 国际密码研究协会 25.7 RACE完整性基本评估 25.8 对欧洲的有条件访问 25.9 ISO/IEC 25.10 专业人员、公民自由和工业组织 25.10.1 电子秘密信息中心 25.10.2 电子战线基金会 25.10.3 计算机协会 25.10.4 电气和电子工程师学会 25.10.5 软件出版商协会 25.11 sci.crypt 25.12 Cypherpunks 25.13 专利 25.14 美国出口法规 25.15 其他国家的密码进出口 25.16 合法性问题 附录A 源代码 参考文献 Matt Blaze跋
你还可能感兴趣
我要评论
|