如何让你的暗码更安全?(一) - 对称加密
暗码学,是任何认证、授权、审计的支撑。失去了暗码学的保障,任何机制都是一场空。
现实中,暗码学的应用非常广泛:银行暗码的掩护、网络流量的传输加密、电子邮件的安全传输,都用到了各种各样的加密技能。
‘钥’怎么读?
公钥、私钥、密钥词组中,yào 和 yuè 两个读音的关系是文白异读,yuè 是文读,yào 是白读。
在安全范畴中,‘钥’,专用读作‘yuè’。
S 盒?
在暗码学中,S 盒(Substitution-Box,更换盒)是加密算法中执行更换盘算的根本结构。
在块暗码中,通常被用于模糊密钥和密文之间的关系,提供非线性变换,通过肴杂来反抗统计分析和差分暗码分析等攻击。
加密算法
接下来,先容一些经典的暗码学算法:对称加密算法、非对称加密算法和散列算法。
对称加密算法
对称加密算法,又称为共享密钥加密算法,是指加密和解密使用相同密钥的加密算法。如图所示:
发送方发一段文字,但是不想让别人看到,会使用加密算法,用密钥对这段文字加密,天生对应的密文,发送给接收方;
接收方收到这段密文,但是由于加密了并不清楚发送方发送了什么内容,就必要使用解密算法,用相同的密钥进行解密,获取到原文。
我们常见的对称加密,DES、AES、国密 SM1(不公开)、国密 SM4。
DES
DES(Data Encryption Standard,数据加密标准),是一种典范的块暗码,一种将固定长度的明文通过一系列复杂的操作变成同样长度的密文的算法。
对 DES 而言,块长度为 64 位。密钥表面上是 64 位的,然而只有其中的 56 位被实际用于算法,其余 8 位可以被用于奇偶校验,并在算法中被抛弃。因此,DES 的有效密钥长度仅为 56 位。
- 根本原理
- DES 是一种分组加密算法,它将明文分成 64 位的数据块进行加密
- 加密过程中,会使用一个长度为 56 位的密钥
- DES 使用 Feistel 网络结构,通过多轮迭代进行加密和解密操作
- 汗青配景
- DES 最初由 IBM 开发,并于 1977 年被美国国家标准局(NBS,现在的 NIST)确定为联邦资料处置处罚标准
- 安全性
- 由使用的密钥长度仅为 56 位,可以或许被暴力破解,已经不是一种安全的加密方法
- 1999 年 1 月,distributed.net 与电子前哨基金会合作,在 22 小时 15 分钟内即公开破解了一个 DES 密钥
- 替代方案
- 为了加强安全性,可以使用 DES 的派生算法 3DES 来进行加密
- DES 标准和 3DES 标准已渐渐被高级加密标准(AES)所取代
- 应用场景
- 在某些遗留体系中仍然有应用,但由于安全性题目,现在已被渐渐淘汰
- 在一些特定的嵌入式体系或硬件加密模块中,DES 仍然大概被使用
AES
AES(Advanced Encryption Standard,高级加密标准),是美国联邦政府采用的一种区块加密标准。它取代了之前的 DES 成为了新的标准。
- 根本原理
- AES 是一种分组加密算法,它将明文分成 128 位(16 个字节)的数据块进行加密
- 加密过程中,会使用一个长度为 128 位、192 位、或 256 位的密钥
- AES 使用 Feistel 网络结构,通过多轮迭代进行加密和解密操作,加密轮数取决于密钥长度:
- 128 位密钥:10 轮
- 192 位密钥:12 轮
- 256 位密钥:14 轮
- 汗青配景
- Rijndael 是由 Daemen 和 Rijmen 早期所设计的 Square 改良而来,而 Square 则是由 SHARK 发展而来。
- 安全性
- AES 算法的安全性依赖于密钥的长度,密钥越长,算法的安全性越高。
- AES 被以为是目前非常安全的加密算法之一,只管存在针对其实现的各种侧信道攻击,但其核默算法至今未被破解。
加密过程
AES 的加密,有几种模式:
- ECB(Electronic Codebook,电子暗码本)
- CBC(Cipher-block Chaining,暗码块链接)
- PCBC(Propagating Cipher-block Chaining,添补暗码块链接)
- OFB(Output Feedback,输出反馈)
- CFB(Cipher Feedback,密文反馈)
- CTR(Counter Mode,计数器模式)
以常用的 CBC 模式为例,主要有几个步骤:
- 数据分组
明文数据,必要被分组,每一组 128 位( 16 个字节)的数据块。如果不足 128 位,则必要添补到 128 位
- 密钥扩展
AES 算法使用一个密钥调度算法,把主密钥(128 位)扩展成 N+1 个轮密钥,每个轮密钥的长度与 AES 分组长度相同,即 128 位(16 字节)
- AES-128,扩展成 10+1 个轮密钥
- AES-192,扩展成 12+1 个轮密钥
- AES-256,扩展成 14+1 个轮密钥
- 初始化向量(IV)
在 CBC(Cipher-block Chaining,暗码块链接)模式中,每个数据块在加密前会与前一个数据块的密文进行异或操作,因此必要一个初始向量(IV)与第一个数据块进行异或操作。
- 每个轮密钥通过一个复杂的更换和置换过程,进行加密
- 字节更换(SubBytes):使用一个更换表(S-box)对状态矩阵中的每个字节进行更换
- 行移位(ShiftRows):对状态矩阵的行进行循环左移操作,第 0 行不移位,第 1 行左移 1 字节,第 2 行左移 2 字节,第 3 行左移 3 字节
- 列肴杂(MixColumns):对状态矩阵的列进行线性变换,每列的 4 个字节通过乘法和加法操作肴杂在一起
- 轮密钥加(AddRoundKey):将状态矩阵与当前轮的轮密钥进行按位异或操作
- 轮密钥处置处罚
- 初始轮,只进行轮密钥加
- 重复轮,,进行 N-1 轮,进行字节更换、行移位、列肴杂、轮密钥加
- AES-128,重复 10-1 轮
- AES-192,重复 12-1 轮
- AES-256,重复 14-1 轮
- 最终轮,只进行字节更换、行移位、轮密钥加
解密过程
AES 的解密,与加密过程类似,只是在加密过程中,使用的是加密密钥,在解密过程中,使用的是解密密钥。
- 数据分组:
密文数据被分构成 128 位(16 字节)的数据块。
- 密钥扩展:
与加密相同,AES 使用密钥调度算法来扩展主密钥天生用于解密的子密钥。这些子密钥与加密过程中使用的顺序相反。
- 初始化向量(IV):
在 CBC 模式下,每个数据块在解密前会与前一个数据块的明文进行异或操作。因此必要一个初始向量(IV)与第一个数据块进行异或操作。
- 每个轮密钥通过一个复杂的更换和置换过程,进行加密
- 字节更换(SubBytes):使用一个更换表(S-box)对状态矩阵中的每个字节进行更换
- 行移位(ShiftRows):对状态矩阵的行进行循环左移操作,第 0 行不移位,第 1 行左移 1 字节,第 2 行左移 2 字节,第 3 行左移 3 字节
- 列肴杂(MixColumns):对状态矩阵的列进行线性变换,每列的 4 个字节通过乘法和加法操作肴杂在一起
- 轮密钥加(AddRoundKey):将状态矩阵与当前轮的轮密钥进行按位异或操作
- 轮密钥处置处罚
- 初始轮,只进行轮密钥加
- 重复轮,,进行 N-1 轮,进行字节更换、行移位、列肴杂、轮密钥加
- AES-128,重复 10-1 轮
- AES-192,重复 12-1 轮
- AES-256,重复 14-1 轮
- 最终轮,只进行字节更换、行移位、轮密钥加
- 竣事操作:
颠末上述步骤后,数据块被解密回明文。如果在加密过程中使用了添补,这一步骤中必要重新添加添补以恢复原始数据的长度。
SM4
SM4 是一种对称暗码算法,由我国国家暗码管理局在 2012 年发布,属于国密(国家商用暗码)算法之一,常用于无线互联网加密等范畴。
根本原理
- 结构:
- SM4 块长度为 128 位(16 个字节),密钥长度为 128 位(16 个字节)。
- SM4 算法使用了 非平衡 Feistel 网络结构
- 轮数:总共进行 32 轮加密运算
- 根本操作
- 使用一个 8 位到 8 位的 S 盒进行非线性替代
- 轮函数 F: 包罗非线性变换 τ(由 S 盒构成)和线性变换 L
- 密钥扩展: SM4 从 128 位主密钥天生 32 个 32 位轮密钥
- 解密和加密类似,只是使用轮密钥的顺序相反
- 安全性: SM4设计用于反抗已知的暗码分析攻击,如差分分析和线性分析
- 应用: SM4主要用于中国的政府和某些商业应用中,用于掩护敏感但非秘密的信息
总结
本文主要简朴先容了对称加密算法 DES,AES 和 SM4 的根本原理,以及它们的实现过程。
在加密通讯中(如 HTTPS、VPN 等),两边会协商出一个加密算法和密钥,对传输的数据进行加密,从而防止第三方窃取。
对于大部分公司来说,选取 AES-128 进行加解密运算,就能获得较高的安全性和性能。
如果是金融或政府行业,在涉及国家层面的对抗上,有一定的合规需求,则必要应用国密算法。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |