密码工程1-2章学习笔记

密码工程

第一章 密码学研究范围

  • 密码学是一门科学和一门艺术。

  • 良好的密码学系统许需要科学背景以及在考虑安全问题时将经验和正确的心态结合起来的良方。

  • 密码学第一课:保持批判的精神!不要盲目地相信任何内容,即使是被印成铅字的内容。

1.1 密码学的应用

  • 密码学本身没有价值,必须作为一个系统的一部分,以起到相应的作用。

  • 需要能够提供系统的访问控制功能。

  • 密码学好比一把锁,如果安全系统的其他部分不能对抗攻击,攻击者就会绕过这把锁。

1.2 木桶原理

每个安全系统的安全性都取决于它最脆弱的环节。

  • 为了提高系统的安全性,我们必须提高最脆弱环节的安全性。

    image-20210314144948805

  • 每个环节的强度都取决于攻击者的能力、工具和对系统的访问,最脆弱的环节是由具体情况而定的。

  • 要对实际情况中可能成为最脆弱环节的所有环节进行强化,使整个系统具备纵深防御(defense in depth)的性质。

1.3 对手设定

  • 安全系统和几乎其他所有类型的工程之间的最大区别之一在于对手的设定。
  • 必须考虑所有类型的攻击。
  • 任务是构建一个能够抵抗所有攻击的系统。

1.4 专业偏执狂

  • 我们要像一个恶意的攻击者那样进行思考。
  • 偏执狂模型:每一个参与者都参与欺骗,攻击者有多个攻击目标。

1.41 更广泛的好处

  • 最重要的是发现可能存在的安全问题。

1.4.2 攻击

  • 换位思考,把自己比作攻击者。
  • 在攻击系统时,要保证只专注于系统的技术,而不是在批判其设计者,同时也要注意设计者可能对安全领域建设性批评的风气并不习惯。

1.5 威胁模型

  • 我们需要在特定的威胁模型中评估一个系统的安全性。

  • 在开始一个密码安全项目时,首先要考虑所要保护的资产和抵抗的威胁是什么,威胁分析中的一个错误会导致整个项目毫无意义。

1.6 密码学不是唯一解决方案

  • 正确使用密码学需要经过仔细考虑。

1.7 密码学是非常难的

  • 问题1:木桶原理和对手设定因素结合在一起使得密码学家甚至任何安全工程师的工作都非常困难,即使经验丰富的专家设计的系统几年之后也可能被攻破。
  • 问题2:没有现成方法可以用来测试一个系统是否安全。
  • 公布系统——>专家分析——>发现问题

1.8 密码学是简单的部分

  • 密码组件的边界和需求有良好的定义。
  • 有人知道密码技术可实现。

1.9 通用攻击

  • 有些安全问题是无法解决的。

  • 确认系统不能抵抗哪些通用攻击很重要。

1.10 安全性和其他设计准则

  • 安全性绝不是系统的唯一设计准则,相反,安全性只是众多准则之一。

1.10.1 安全性和性能

  • 任何时候我们都要首选安全性而不是效率。
  • 良好的安全性=防护+检测+响应。
  • 计算机的效率会让给我们忽略系统运行效率,以便无痛地提高安全性。
  • 效率还包含进入市场的速度等,会让开发者选择性地忽略安全性。
  • 安全性第一、安全性至上。

1.10.2 安全性和特性

  • 复杂性是安全性最大的敌人,而且复杂性总是以特性或者选项的形式出现。
  • 尽量为密码原语(primitive)定义简单的接口。

1.10.3 安全性和演变的系统

  • 安全机制的设计者不仅需要表现出专业的偏执并考虑到各种攻击者和攻击目标,也要能够预测到系统将来的使用情况并做好准备。

1.11 更多阅读材料

  • 历史:《The Codebreakers》 -Kahn 、《The Code Book》
  • 算法详细说明:《应用密码学》 -Bruce
  • 百科全书:《Handbook of Applied Cryptography》 -M&O&V
  • 密码学理论:《Foundations of Cryptography》 -Goldreish 、《Introduction of Modern Cryptography》 -Katz&Lindell
  • 计算机安全:《秘密和谎言》 -Bruce
  • 安全工程:《Security Engineering》 -Ross
  • 在线资源:“Crypto-Gram”通讯、Bruce博客

1.12 专业偏执狂练习

  • 学习一门语言的最好方式之一就是沉浸其中。

1.12.1时事练习

1.12.2安全审查练习

1.13 习题

第二章 密码学简介

  • 本章介绍密码学的基本概念以及阅读本书其他部分所需要的背景知识。

2.1 加密

  • 加密是密码学最初的目的。
  • 一个好的加密函数应该提供更多的隐私性,除了消息长度和消息发送数据外不应提供任何信息。
  • Kerckhoff 原则:加密方案的安全性必须仅仅依赖于对密钥Ke的保密,而不依赖于对算法的保密。

2.2 认证

  • 纯粹的认证只是部分解决方案。
  • 认证与消息编号方案结合使用可以解决大部分问题。

2.3 公钥加密

  • 公钥密码的主要思想:加密信息的密钥不同于解密信息的密钥。

  • 效率非常低,比私钥加密相差好几个数量级。

2.4 数字签名

  • 数字签名具有一定的局限性。
  • 计算机进行数字签名,不能证明本人认可。

2.5 PKI

  • PKI的主要思想是设立一个中心机构,称为证书机构或者CA。
  • 优势:一次注册,随处使用
  • PKI通常设置多层次的 CA,多层CA需要多级证书检验。
  • 存在问题1:不能被所有人信任
  • 存在问题2:出了事谁负责

2.6 攻击

2.6.1 唯密文攻击模型

  • 攻击者得到的只有密文。
  • 是最困难的攻击方式。

2.6.2 已知明文攻击模型

  • 同时知道明文和密文。
  • 比唯密文攻击更强大。

2.6.3 选择明文攻击模型

  • 允许攻击者选择特殊准备的明文,得到相应的密文。
  • 在现实中不切实际
  • 两个变种:离线攻击和在线攻击

2.6.4 选择密文攻击模型

  • 任何合理的加密方案都应该能够抵抗选择密文攻击

2.6.5 区分攻击的目的

  • 所谓区分攻击,就是利用特殊的方法来找出实际的加密方案和理想的加密方案之间的差异。
  • 避免组件缺陷产生问题。

2.6.6 其他类型的攻击

  • 信息泄露攻击/侧信道攻击(利用时间信息和密文长度)

2.7 深入探讨

2.7.1 生日攻击

  • 原理:相同的值(也称为碰撞)出现得比我们预料的要快得多。
  • 如果选择k个元素,那么有k(k-1)/2对元素,每一对元素有1/N的机会是相等的,所以出现碰撞的概率接近k(k-1)/2N,当k约等于根号N时,这个值接近50%。

2.7.2 中间相遇攻击

  • 可以自己选择构造一个密钥表,不用等密钥重复出现。
  • 中间相遇攻击更具灵活性。

2.8 安全等级

  • 任何密码系统都能被攻击成功,问题在于需要多少工作量。
  • 安全等级的概念仅仅是近似的。
  • 由于采取简单而保守的方法代价相对较低,所以我们采用简单的安全等级概念。

2.9 性能

  • 密码系统的性能不是问题,可以通过提升硬件解决,这样会更加简单、便宜和安全。

2.10 复杂性

  • 系统越复杂,越有可能有安全问题。

  • “测试-修复”方法的问题在于,测试只是说明了错误的存在,这些错误仅仅是测试者想发现的,而一个系统不可能对所有可能受到的攻击都进行测试。

  • 将系统模块化。

2.11 习题

posted @ 2021-03-14 20:51  seven昔年  阅读(587)  评论(0编辑  收藏  举报