学习笔记1
第一、二章学习笔记
第一章、密码学的研究范围
密码学涵盖了认证、数字签名以及更多基本的安全功能。
密码学涉及领域及其宽广,包括计算机安全、高等数学、经济学、量子物理学、民法和刑法、统计学、芯片设计、软件优化、政治、用户界面设计等。
密码学是一门科学和一门艺术。
良好的密码学系统许需要科学背景以及在考虑安全问题时将经验和正确的心态结合起来的良方。
密码学重要性
密码学本身没有价值,必须作为一个系统的一部分,以起到相应的作用。虽然密码学只是整个安全系统中的一小部分,确实非常关键的一部分。
密码学需要能够提供系统的访问控制功能。即使系统存在其他脆弱性,让密码系统良好的运作也是很重要的,不同的脆弱性对不同的攻击者有不同的用处。
木桶原理
每个安全系统的安全性都取决于它最脆弱的环节。
为了提高系统的安全性,我们必须提高最脆弱环节的安全性。
每个环节的强度都取决于攻击者的能力、工具和对系统的访问,最脆弱的环节是由具体情况而定的。
要对实际情况中可能成为最脆弱环节的所有环节进行强化,使整个系统具备纵深防御(defense in depth)的性质。
对手设定
安全系统和几乎其他所有类型的工程之间的最大区别之一在于对手的设定。
必须考虑所有类型的攻击。
任务是构建一个能够抵抗所有攻击的系统。
专业偏执狂
我们要像一个恶意的攻击者那样进行思考。
偏执狂模型:每一个参与者都参与欺骗,攻击者有多个攻击目标。
威胁模型
我们需要在特定的威胁模型中评估一个系统的安全性。
在开始一个密码安全项目时,首先要考虑所要保护的资产和抵抗的威胁是什么,威胁分析中的一个错误会导致整个项目毫无意义。
密码学不是唯一解决方案
正确使用密码学需要经过仔细考虑。
密码学是非常难的
问题1:木桶原理和对手设定因素结合在一起使得密码学家甚至任何安全工程师的工作都非常困难,即使经验丰富的专家设计的系统几年之后也可能被攻破。
问题2:没有现成方法可以用来测试一个系统是否安全。
公布系统——>专家分析——>发现问题
密码学是简单的部分
密码组件的边界和需求有良好的定义。
有人知道密码技术可实现。
通用攻击
有些安全问题是无法解决的。
确认系统不能抵抗哪些通用攻击很重要。
安全性和其他设计准则
安全性绝不是系统的唯一设计准则,相反,安全性只是众多准则之一。
第二章、密码学简介
本章介绍密码学的基本概念以及阅读本书其他部分所需要的背景知识。
2.1 加密
加密是密码学最初的目的。
一个好的加密函数应该提供更多的隐私性,除了消息长度和消息发送数据外不应提供任何信息。
在密码学方面首次提到 Alice 和 Bob 是在Rivest、Shamir和Adleman 1978 年的文章“获得数字签名和公钥密码系统的方法”中。他们写道,“对于我们的场景,我们假设 A 和 B(也称为 Alice 和 Bob)是公钥密码系统的两个用户”。
Kerckhoff 原则:加密方案的安全性必须仅仅依赖于对密钥Ke的保密,而不依赖于对算法的保密。
2.2 认证
纯粹的认证只是部分解决方案。
认证与消息编号方案结合使用可以解决大部分问题。
2.3 公钥加密
公钥密码的主要思想:加密信息的密钥不同于解密信息的密钥。
效率较低,比私钥加密相差好几个数量级。
2.4 数字签名
数字签名具有一定的局限性。
计算机进行数字签名,不能证明本人认可。
2.5 PKI
PKI的主要思想是设立一个中心机构,称为证书机构或者CA。
公钥密码使密钥管理变得简单,但是 Alice 仍要获得 Bob 的公钥,她如何才能相信那是Bob 的公钥,而不是其他人的公钥呢?也许 Eve 创建了一个密钥对,并且冒充 Bob 公开密钥。一般的解决办法是利用 PKI,或者称为公钥基础设施(public key infrastructure)。PKI的主要思想是设立一个中心机构,称为证书机构或者 CA。每个用户都把他的公钥报给CA并向 CA证明自己,然后CA 使用数字签名签署用户的公钥,签署的消息或证书声明:“我,CA,已经验证公钥 Pbb 属于 Bob。”证书通常包括有效期及其他有用信息。
利用证书,Alice 更容易找到 Bob 的公钥。我们假定 Alice 拥有 CA的公并且已经验证是正确的公钥,现在 Alice 可以从数据库中检索 Bob 的公,Bob 也可以通过电子邮件将公钥发送给 Alice,然后Alice 利用已得到的 CA公钥验证 Bob 公的证书,该证书保证她使用正确的公钥与 Bob 进行通信。Bob 可同样地获得 Alice 的公钥,并且确信他在与正确的人进行通信。
在 PKI中,每一个参与方只需要让 CA 给他的公钥颁发证书,并知道 CA 的公钥以验证其他参与方的证书。这样的工作量远比与每一个通信方交换密钥小得多,这正是 PKI的巨大优势:一次注册,随处使用。
由于实际原因,PKI通常设置多层次的 CA。其中有一个最高层的 CA,称为根,它为低层CA 的公钥颁发证书,而低层 CA 则给用户的公颁发证书。这个系统以同样的方式工作,但是现在Alice需要检验两个证书以验证 Bob 的公钥。PKI并不是最终的解决方案,其中还有很多问题。首先,CA 必须被每一个人信任。在有些情况下,这是容易做到的。一个公司的人力资源部门知道所有的员工,可以担任 CA的角色。但是世界上没有一个实体能够被所有人信任,仅凭一个PKI来管理整个世界的想法显然是不可行的。
第二个是责任问题。如果 CA 颁发了一个错误的证书,或者 CA 的私钥被窃取了,那么该怎么办呢? Alice 将信任一个错误的证书,并且因此可能损失很多钱,那么该由谁来负责?CA 愿意以某种保险的形式来提供支持吗?这就需要 Alice 和 CA 之间建立非常全面的商业关系。
目前有很多公司都试图成为世界性的 CA,VeriSign 大概是其中最有名的一个。然而对于未能履行职责的情况,VeriSign 明确地限制了自己的赔偿责任,大多数情况下赔偿不超过100美元,这可能比我们利用 VeriSign 签署的证书安全地购买书籍所支付的金额都少。不过这并不是一个问题,因为使用信用卡支付对消费者来说是安全的。然而在购买下一辆汽车时,我们就不会相信只有 100 美元保证金的 VeriSign 证书了。
总之PKI优势在于一次注册,随处使用。但也存在存在不能被所有人信任,出了事谁负责的问题。
2.6 攻击
唯密文攻击模型:攻击者得到的只有密文,是最困难的攻击方式。
已知明文攻击模型:同时知道明文和密文,比唯密文攻击更强大。
选择明文攻击模型:允许攻击者选择特殊准备的明文,得到相应的密文。
选择密文攻击模型:任何合理的加密方案都应该能够抵抗选择密文攻击
安全等级
任何密码系统都能被攻击成功,问题在于需要多少工作量。
只要有足够的努力,任何密码系统都能被成功地攻击,真正的问题在于需要多少工作量去攻破一个系统。要确定一个攻击的工作量,一种简单的方法是把它与穷举搜索进行比较所谓穷举搜索攻击,就是对某一目标(例如密钥)尝试所有的可能值。如果一个攻击需要2235个步骤,那么它就相当于对一个235位的值进行穷举搜索。
我们经常讨论一个攻击者需要采取一定数量的步骤,但是还没有具体说明什么是一个步骤,这在一定程度上是偷懒,但也是为了简化分析。在攻击加密函数时,对给定的密钥,单独进行一个给定消息的加密计算就是一个步骤。但有时一个步骤也可能仅仅是在一个表中查找某些东西,它是可变的。不过在所有情况下,一个步骤能够被计算机在很短的时间内完成,有时可能需要一个时钟周期,有时可能需要 100 万个时钟周期,但是对于这种密码攻击所需要的工作量,100 万的数量级并不是十分重要。基于步骤分析的易用性远比其内在的不确定性更重要,我们总可以进行更详细的分析来确定一个步骤相当于多少工作量,但是为了进行快速估计,我们总是假定一个单独的步骤需要一个时钟周期。目前设计的任何系统实际上都需要至少 128 位的安全等级,也就是说,任何攻击都至少需要 2128个步骤。当前设计的每个成功的新系统都应该能够运转 30年,并且在最后一次使用之后,应该为数据提供至少 20 年的保密性,所以我们的目标是保证未来 50 年的安全性这是一个相当高的等级,已经有一些工作根据摩尔定律进行了推断并用于密码学。128位的安全等级是足够的,我们也可认为 100位或者110位就足够,但是密码原语使用的参数大多为2的幂,于是我们这里使用 128位。
安全等级的概念仅仅是近似的。我们只是度量了攻击者必须做的工作量,而忽略了诸如内存、系统交互等因素。但是仅仅度量攻击者的工作量就已经十分困难了,而将这个模型复杂化会使安全性分析更加困难,而且忽略关键因素的可能性会大大增加。由于采取简单而保守的方法代价相对较低,所以我们采用简单的安全等级概念。然而,安全等级是对手访问权限的函数:对手只能进行已知明文攻击还是可以进行选择明文攻击?对手可以掌握多少个加密消息?
由于采取简单而保守的方法代价相对较低,所以我们采用简单的安全等级概念。
性能
密码系统的性能不是问题,可以通过提升硬件解决,这样会更加简单、便宜和安全。
复杂性
系统越复杂,越有可能有安全问题。
“测试-修复”方法的问题在于,测试只是说明了错误的存在,这些错误仅仅是测试者想发现的,而一个系统不可能对所有可能受到的攻击都进行测试,将系统模块化。