图解密码技术
1:单向散列函数(one way hash function)又称消息摘要函数(message digest function)
-
单向散列函数有一个输入和一个输出, 输入称为是消息( message ), 输出称为散列值(hash value)。
-
保证的不是机密性,而是数据的完整性( intergrity )。
-
可以检测数据是否被篡改。
-
输入的信息无论多长, 结果得到的散列值的值都是固定的 (SHA-1 是20个字节。)
-
无法通过散列值,进行求出消息。
-
单向散列函数值又称消息摘要(message digest)或者指纹(fingerprinti)
-
可以判断出信息是否被篡改, 不能判断出消息是否经过了伪装。
- 单向散列函数的特性
- 抗碰撞性
- 单向性(one-way)
- 单向散列函数的特性
2:消息认证码( message authentication code )
-
确认消息是否来自期望的对象。
-
消息验证码不仅能保证数据的是否被篡改,而且还能保证确认消息是否来自所期待的通信对象。
-
消息验证码是一种能够保证完整性和认证技术的密码技术。
-
消息认证码 - - - 对称**:进行消息认证码的**和认证的**
- 输入包括任意长度的消息和一个发送者与接受者之间共享的**,可以输出固定长度的数据, 这个数据是 MAC 值。
- 输入包括任意长度的消息和一个发送者与接受者之间共享的**,可以输出固定长度的数据, 这个数据是 MAC 值。
-
消息认证码的攻击 - - - 重放攻击
- 解决办法:序号、时间戳、 nonce 随机数。
- 还可以有**推测攻击 - - - 暴力**、生日攻击。
3:数字签名(digital signature)
- 就是将现实世界中签名和盖章引入虚拟计算机世界中的一种密码技术。
- 数字签名是一种能够保证完整性和提供认证和防止否认的一种技术。
- 是由单向散列函数值和公钥密码组成
- 数字签名使用的是 私钥+单向函数散列值进行数字签名
- 用公钥 进行数字签名是认证
- 防止了数据被篡改、伪造、否认、保证了数据的完整性。
- 数字签名不能保证数据信息的机密性。
- 但是要保证公钥的合法性需要使用。 - - - 第三方颁布的证书。
- RSA 可以用做数字签名的算法。
4:伪随机数生成器(Pseudo Randon Number Generator , PRNG )
- 是一种模拟产生随机数的算法。与密码技术有关:承担着**生成的职责。
- 如Web 服务器, 进行SSL/TLS通信时, 会生成一个仅用于临时通信的临时**( 会话** ), 这个**时基于伪随机数生成器生成的。
5: 信息安全中面临的威胁和密码技术的应用。
6:比特序列
-
比特序列是由 0 和 1 组成。
-
将现实世界中的东西映射为比特序列的的操作叫做编码(encoding )
-
编码中会有很多规则,常用的是 ASCII 编码规范。
7:一次性密码本
- 原理:将明文和一串随机的比特序列进行 XOR 运算。
8:暴力**
- 就是按顺序将所有的**都尝试一遍,并判断是不是正确明文的方法。
9:常用的英文单词
- DES ( Data Encryption Standard ) --------- 数据加密标准。(对称加密)能够进行暴力**
- 子** - - - subkey
- 加密 - - - encryption
- 解密 - - - descryption
- 公钥 - - - public key
- 私钥 - - - private key
- 混合密码系统 - - - hybrid cryptosystem
- 盲签名 - - - blind signature
- 完整性 - - - integrity
- 碰撞 - - - collsion
- 认证 - - - authentication
- 公钥基础设施 - - - public key instrastructure
- 组成三要素
- 使用PKI的人
- 颁发证书的人
- 保存证书的数据库
- 组成三要素
- 公钥证书 - - - public key certificate
- 认证机构 - - - certification authority
- 应用程序编程接口 - - - application programming interface
- 会话** - - - session key :每次只能使用一次的**是会话**。
- 随机性 - - - randomness
- SSL - - - secure Socket layer
- TSL - - - - Transport Layer Security
- 超文本传输协议 - - - hypertext Transfer Peotocol
10 : DES 加密算法
- DES 是一种将64的比特明文加密成64比特的密文的对称密码算法,他的**长度是56比特。
- 尽管规格上**长度是64比特,由于每隔7比特位会设置一个用于错误监测的 比特,其实质的比特的长度是56比特位。
- DES 是以64比特的明文(比特序列)为一个单位进行加密,这个64比特位称为分组。
- 一般以分组为单位进行处理的密码算法称为分组密码(block cipher)
- 轮结构中使用的是 feistel 网络
11: 3 DES
- 采用的是:加密 + 解密 + 加密 : 原因可以保证向下对 DES 的兼容性。
- 二重 DES : 第一次和第三次使用相同的比特序列,第二次使用的和其他两次不相同
- 三种 DES : 三次加密使用的比特序列不相同。
12 : AES (Adanved Encryption Standard) 使用的算法是:Rijndael 算法
- Rijidael 是由比利时密码学家设计的分组密码算法。
- 使用的是 SPN 结构
- 分组长度是 128 比特位, 在 AES 的规格中提供的只有 128, 192, 256比特 三种模式。
13: 加密算法的模式分类
- 密码算法可以分为:分组密码和流密码两种
- 分组密码(block cipher)是每次只能处理特定长度的一块数据的一类密码算法。
- 一个分组的比特数就称为分组长度(block length)
- DES : 64 : 明文和密文的分组长度是64
- AES :的分组长度有 128, 192, 256 三种
- DES, 3DES , AES 这三种加密属于 分组密码加密。
- 流密码(stream cipher) : 对数据流进行连续处理的一类密码算法。
- 流密码一般是以 1比特, 8比特, 32比特为单位进行加密和解密。
- 一次性密码本属于流密码本
- 加密的明文长度大于分组密码的分组长度时
- 这就需要对分组密码算法进行迭代, 以便将很长的明文进行加密。
- 而迭代的的方法就称为分组密码的模式(mode)
14:密码分组的模式有很多模式, 以下是常用的五中模式
-
ECB - - - Electronic CodeBook mode (电子密码本模式)
- ECB 模式下, 最后一个明文的内容小于分组长度时, 需要用一些特定的数据进行填充(padding)
- ECB 模式下, 最后一个明文的内容小于分组长度时, 需要用一些特定的数据进行填充(padding)
-
CBC - - - Cipher Block Chainning mode (密码分组连接模式)
-
用前一次的加密的密文和分组明文进行一次XOR 运算
-
在第一次进行时, 需要用一个初始化向量(initialization vector )充当前一个密文分组。
-
CFB - - - Cipher FeedBock mode (密码反馈模式)
- 与一次性密码本的原理是非常相似的。
- CFB 中使用密码算法生成的比特序列称为**流(key stream )
- 在 CFB 模式中, 密码算法就相当于用来生成**流的伪随机数生成器, 而初始化向量就相当于伪随机数生成器的"种子"。
- 在 CFB 中, 加密可以看成是,明文数据是逐比特流加密,可以看成是使用分组密码来实现的流密码的方式。
-
OFB - - - OutPut FeedBack mode (输出反馈模式)
-
CTR - - - CoutTeR mode (计数器模式)
-
两个概念
- 明文分组:分组密码算法中进行加密的明文。
- 明文分组的长短和分组密码算法的长度是相等的。
- 密文分组:使用分组密码算法对明文进行分组加密之后的密文。
- 明文分组:分组密码算法中进行加密的明文。
15:对称**的配送问题解决
- 对称**的配送问题可以由, 公钥**进行解决。
+
16: 密码学的中的术语的基本组成
- 数字签名:是由单向散列函数和公钥密码组合而成
- 证书:由公钥和数字签名组合而成。
- 消息验证码:由单向散列函数和**组合而成, 也可以通过对称密码来生成。
- 伪随机数生成器:可以使用对称密码、单向散列函数、或者公钥密码来构建。
- 碰撞 : 两个不同的消息产生同一个散列值的情况称为碰撞。
- 难以发现的碰撞的性质称为抗碰撞性(collision resistance)、 单向散列函数值都具备抗碰撞性。
17: 消息认证码和数字签名的对比
+
18:口令
- passpharse由多个 单词组成 的password : 称为口令
19:随机数的应用
+
20:随机数的性质
- 随机性
- 不可预测性 : 强伪随机数
- 不可重现性:真随机数
随机数生成器
- 通过硬件生成的随机序列, 根据传感器收集的热量、声音的变化等事实上无法预测和重现的自然现象信息来生成。这样的硬件设备称为随机数生成器(Random Number Generator) RNG
- 如在linux的系统中, /dev/random 文件是根据硬件设备驱动收集的背景噪声存储真随机数的随机数池。
伪随机数生成器
-
可以生成随机数的软件则称为:伪随机数生成器(Pseudoo Random Number Generator)
-
因为仅靠软件无法生成真随机数。
-
伪随机数种子:
- 是用来对位随机数生成器的内部状态进行初始化。
- 伪随机数种子是一串随机的比特序列。
-
伪随机数生成器
-
1:线性同余法(linear congruential method): 是一种伪随机数生成器算法。
-
应用伪随机数生成器的库函数(library function)
- C 语言中的库函数、Java java.util.random
- 都是采用的线性同余法。
-
2:使用单向散列函函数可以生成不可预测的强伪随机数列。
- 这种单向散列函数的单向性是支持伪随机数生成器不可预测性的基础。
-
3:密码法
- 使用密码来编写能够生成强伪随机数的伪随机数生成器
- 既可以使用对称加密AES, 也可以使用公钥密码 RSA
- 在这种伪随机数的生成器中, 密码的机密性是支持伪随机数生成器不可预测的基础。
- 使用密码来编写能够生成强伪随机数的伪随机数生成器
-
4: ANSI X9.17 伪随机数生成器
- 是利用 3DES 作为密码算法。
-
-
随机数池(random pool )
- 是一个文件用来积累随机数序列。
- 如在linux的系统中, /dev/random 文件是根据硬件设备驱动收集的背景噪声存储真随机数的随机数池。
伪随机数生成器
本章的主要内容
+