写点什么

浅谈加密基础设施

用户头像
I
关注
发布于: 刚刚
浅谈加密基础设施

0x00 前言

讲加密基础设施前,会介绍一下密码学基础,不过需要先声明一下的是我仅仅是能理解并应用。所以如果文中笔误,还请读者及时指出。如果只需要关注加密基础设施建设的一些经验,可直接跳至第二节——0x02.

0x01 密码学基础

以下章节中的密码学基础部分的知识主要总结自《图解密码技术》读书笔记,本节图片系原文所载。有个朋友说这个是神书,我觉得大可不必,不过确切是本好书,因为能够帮助数学基础不是很好的读者快速了解密码学基础。

1. 受到的部分威胁和对应的密码技术

2. 基本的密码技术与常识

基本密码技术分为六部分:对称密码(Symmetric Cryptography),非对称密码(Asymmetric Cryptography),单向散列函数,消息认证码,数字签名,伪随机数生成器。




大部分密钥技术中都需要密钥,这里面有个值得参考的观点是————密钥与明文是等价的 (即如果明文价值 100w,那密钥也就值 100w。)


以下是各种不同的密钥:


  1. 对称密码的密钥与公钥密码的密钥

  2. 消息认证码的密钥与数字签名的密钥

  3. 用于确保机密性的密钥与用于认证的密钥

  4. 会话密钥与主密钥

  5. 用于加密内容的密钥与用于加密密钥的密钥

  6. 基于口令的密码(Password Based Encryption)

3. 对称密码

对称密码可以分为两类:序列密码和分组密码。如其名,序列密码单独加密每个位,分组密码加密明文分组。 分组密码(Block Cipher)每次只能处理特定长度的一块(Block),下面主要介绍分组密码。


对称密码的加解密主要依赖是比特的异或计算, 假设明文是 010101,密钥是 111111, 那么异或得到的密文就是 101010, 翻过来密文进行解密时候同密钥进行异或就可以得到 010101


0 XOR 0 = 00 XOR 1 = 11 XOR 0 = 11 XOR 1 = 0
复制代码

3.1 DES 与 3DES

DES 全称是 Data Encryption Standard, 1977 年被 FIPS 采用,基本结构为 Feistel 网络/结构。目前不应被用于现有或新的加密用途。


Feistel 网络中,加密和解密可以用完全相同的结构实现,加密的各个步骤被称为轮,轮数可以任意增加。



DES 就是一种 16 轮循环的 Feistel 网络。 即每次输入输出后左右侧对调,然后使用新的子密钥通过轮函数进行异或。下面是一个三轮的 Feistel 网络。记住 DES 是 16 轮的。



而 3DES 就是将 DES 重复 3 次得到的。



不过可以发现 3DES 加密过程是加密-解密(这一步是为了能够向下兼容)-加密,如果 DES 密钥 1,2,3 相同那么其实 3DES 就和 DES 是一样的。 如果 1,2,3 完全使用不同的密钥就叫 DES-3DES,如果 1,3 相同,2 不同就是 DES-EDE2。


3DES 目前暂时允许使用,但不应用于新用途。

3.2 AES

全称是 Advanced Encryption Standard,由 NIST 选拔作为 FIPS 标准。我最开始的时候以为 AES 是一种,其实 AES 是由一系列算法选拔得到的。1997 年开始募集(15 个算法中 5 个入围),2000 年选定分组密码 Rijndael(by 比利时密码学家 Joan Daemen & Vincent Rijmen)。


Rijndael 也是由多个轮构成,不过用的是 SPN 结构,不再是 Feistel 网络。主要分为 SubBytes(16 字节分组进行处理,获得一张拥有 256 个值的替换表 S-Box), ShiftRows(以 4 字节为单位的行进行某种规则向左平移,每一行平移的字节数不同), MixColumns(对 1 个 4 字节值进行比特运算), AddRoundKey(将 MixColumns 的输出与轮密钥进行异或)。完成从 SubBytes->AddRoundKey 算是 1 轮,Rijndael 结构需要重复 10-14 轮,解密时顺序相反,方向相反即可。AddRoundKey -> InvMixColumns -> InvShiftRows -> InvSubBytes

3.3 填充模式的优劣对比

分组意味着能处理特定长度的,针对任意长度的就要对分组密码进行迭代,迭代的方式成为模式。



OFB 模式与 CTR 模式的对比



CFB 模式与 OFB 模式的对比


4. 非对称密码

又称为公钥密码(Public-Key Cryptography), 主要是依托于人类目前尚无法快速求解离散对数的原理。


4.1 RSA

4.1.1 RSA 的加密和解密


4.1.2 签名与验签


一般有两种形式,一种是直接对消息签名,另一种是对消息的散列值进行签名。


4.2 ECC

全称为 Elliptic Curve Cryptography 椭圆曲线密码。


主要包含三个方面:

  • 基于椭圆曲线的公钥密码

  • 基于椭圆曲线的数字签名

  • 基于椭圆曲线的密钥交换

4.2.1 DH 交换

4.3 应用与攻击方式:

应用:

  • 公钥证书

  • SSL/TLS


攻击方式:

  • 中间人攻击

  • 对单向散列函数的攻击

  • 利用数字签名攻击公钥密码

  • 潜在伪造

4.4 混合密码系统

简单来说就是用非对称密码保护对称密钥,用对称密钥进行对数据的加解密。


加密



解密


5. 单向散列函数

英文名 One-way hash function,又称作消息摘要函数(Message digest function)、哈希函数、杂凑函数。输入成为消息(message)也成为原像(Message digest), 输出为散列值(hash value)也成为消息摘要(Message digest)或者指纹(fingerprint)


能够辨别出是否被篡改,但无法识别伪装。


特性:


  1. 根据任意长度的消息计算出固定长度的散列值

  2. 能够快速计算出固定长度的散列值

  3. 消息不同散列值不同(抗碰撞性)

  4. 具备单向性


应用:


  • 检测软件是否篡改

  • 基于口令的加密

  • 消息认证码

  • 数字签名

  • 伪随机数生成器

  • 一次性口令


常见的单向散列函数:


  • MD4、 MD5

  • SHA-1、SHA-256、SHA-384、SHA-512

  • RIPEMD-160

  • SHA-3

6. 消息验证码

英文名 Message Authentication Code, 输入为任意长度的消息和一个发送者与接收者之间共享的密钥,输出为固定长度的数据,即 MAC 值。


能够辨别篡改和伪装,但无法解决对第三方证明,以及防止否认

6.1 实现方法

  1. 使用单向散列函数实现使用 SHA1、SHA-224、SHA-256、SHA-384、SHA-512 所构造的 HMAC 分别称为 HMAC-SHA1、HMAC-SHA-224、HMAC-SHA-256、HMAC-SHA-384、HMAC-SHA-512

  2. 使用分组密码实现

  3. 其他方法(流密码,公钥密码)

6.2 应用与攻击方式

应用:


  • SWIFT (参考电子支付基础的一些分享资料)

  • IPsec

  • SSL/TLS


攻击方式:


  • 重放攻击

  • 密钥推测攻击

7. 伪随机数生成

很多地方都会用到随机数,生成密钥,密钥对,初始化向量,Nonce,盐。但是软件是没有办法生成真正的随机数的,软件生成的都是伪随机数。



生成伪随机数有以下几种方法:


  • 杂乱的方法

  • 线性同余法

  • 单向散列函数法

  • 密码法

  • ANSI X9.17

8. PGP

略,可参考,PGP: Pretty Good Privacy - Garfinkel Simson

9. 关于密码系统的信息安全常识

  • 不要使用保密的密码算法

  • 使用低强度的密码比不进行任何加密更危险

  • 任何密码总有一天都会被破解

  • 一次性密码本理论上是无法破译的,但实际过程因为面临密钥配送问题,保存问题,重用问题,同步问题,生成问题而没有得到使用。

  • 盐主要是防御字典攻击的

0x02 加密基础设施

这里先介绍常规做基础设施需要的特性有哪些,然后针对每一种不同的不同的设施稍作补充。 图是临时画的,包含了去做一套加密基础设施涉及到的不同方面。下面我会简单介绍图中的几块。



(绘制 by 作者)


  • Integration(Application/System)

  • Logging Management

  • Monitoring Management

  • Identify Management

  • Access Management

  • etc...

  • Optimization (Tech/Operation/...)

  • Workflow & Pipeline

  • Support Template

  • HW/SW Performance

  • Scenario

  • etc ...

  • Customer Service (Application/User/...)

  • Support Service

  • Self Service


在知道在做某些 Solution 时需要考虑到的点后,我们看下加密基础设施的大概 Scope 是什么样的(绘制 by 作者):



以 PKI 进行举例(之前曾经总结过一篇关于CA/RA文章, 以及另一篇关于HSM的), 在确定了建设 PKI 的方案后,对逻辑架构和物理架构进行设计,同时包含了与其他系统/服务(日志,监控,权限,加密机等)的整合,在系统进行部署并提供服务后。继续建设整合服务,例如提供 Support template, Customer Service,以及提供一定的 SDK 让其他系统/应用进行调用。不同功能的 CA 产生的不同证书提供给不同的应用或用户,其中提供给员工用于访问内部系统的证书是不是可以通过 MDM 工具推送到员工的 Laptop,以及 LB 上的用于提供 TLS 服务的证书,以及所有需要根证书的地方等等。尽量优化日常运营中繁复的工作。


同样的针对 HSM,KMS 或者说 Secret Management 之类的也是类似的做法。

0x03 总结


纸上得来终觉浅,绝知此事要躬行。

0x04 参考资料

发布于: 刚刚阅读数: 2
用户头像

I

关注

https://iami.xyz 2018.08.12 加入

一名求真务实的安全行业从业者,持续关注企业信息安全。

评论

发布
暂无评论
浅谈加密基础设施