对称密码体制要求加密与解密使用后个共享密钥,解密是加密的逆运算,由于通信双方共享同一个密钥,这就要求通信双方必须在通信前商定该密钥,并妥善保存该密钥,该密钥称为秘密密钥。秘密密钥的存在使得对称密码体制开放性变差。
流密码是军事、外交等机要部门中应用最为广泛的对称密码体制。同时,它也是手机应用平台最常用的加密手段。流密码实现较为简单,加密时将明文按字符 (或字节)逐位进行加密,解密时将密文按字符(字节)逐位解密。加密、解密可以是简单的位运算,如模n运算。明文加密后,生成的密文几乎和明文保持同样的长度.流密码加密与解密的流程:
分组密码多应用于网络加密,是对称密码体制中发展最为完善的密码体制。分组密码对固定长度的一组明文进行加密,这一固定长度称为分组长度。分组长度是分组密码的一个参数,它与分组算法的安全性成正比,其取值范围取决于实际应用的环境。为保证分组算法的安全性,分组长度越长越好,分组长度越长,则密码分析越困难,为保证分组密码的实用性,分组长度越短越好,分组长度越短,则越便于操作和运算。
分组长度的设定需要权衡分组算法的安全性与实用性,一般设置为56位。但随着密码学的发展,分组长度只有56位的分组密码已经不能确保算法的安全性。目前,分组密码多选择128位作为算法的分组长度。
分组密码的加密过程是将明文分成固定长度的块(分组),每个块的大小通常是 n 位,然后对每个块进行独立的加密。
以一个简单的例子来说明,假设我们使用一个分组长度为 4 位的分组密码,加密算法是将每个 4 位的明文块按照某种规则进行替代。
明文: 1010 1101 0110 1111
加密过程:
这里,C1、C2、C3、C4 分别代表四个不同的密文块。由于分组密码的性质,即相同的明文块将总是加密成相同的密文块,不同的明文块将产生不同的密文块。
解密过程涉及到使用相同的密钥和相反的变换操作来将密文还原为原始的明文。我们假设解密过程是将每个4位的密文块按照相反的规则进行替代,以还原原始的明文。
这是一个简化的假设,实际的分组密码解密过程可能涉及更复杂的数学运算和逆操作。
解密过程:
这里,M1、M2、M3、M4 分别代表四个不同的明文块,与加密过程中使用的相同的规则和密钥一一对应。解密过程的目标是通过逆操作,将密文还原为原始的明文。
实际上分组密码的加密过程涉及到更复杂的替代和置换操作,以及多轮的加密流程。实际的分组密码算法,如DES、AES等,采用了更复杂的结构和运算,以提高安全性。
安全性原则也称为不可破译原则,它包含理论上不可破译和实际上不可破译两重含义。香农认为: 在理想密码系统中,密文的所有统计特性都与所使用的密钥独立。
关于实用密码的两个一般的设计原则是香农提出的混乱原则和扩散原则。
人们所设计的密码应使得密钥的每一位数字影响到密文的多位数字,以防止对密钥进行逐段破译,而且明文的每一位数字也影响密文的多位数字以便隐藏明文数字的统计性。
人们所设计的密码应使得密钥和明文以及密文之间的信赖关系相当复杂以至于这种信赖性对密码分析者来说是无法利用的。
主要有以下几个方面
1)密码体制的破译所需要的时间和费用超出了现有的资源和能力。
2)密码体制的破译所需要的时间超过了该体制所保护的信息的有效时间。
3)密码体制的破译所需要的费用超过了该体制所保护的信息的价值
分组密码可以用软件和硬件来实现。
硬件实现的优点是可获得高效率,而软件实现的优点是灵活性强、代价低。
使用子块和简单的运算。密码运算在子块上进行,要求子块的长度能自然地适应软件编程,如8、16、32位等。应尽量避免按位置换,在子块上所进行的密码运算尽量采用易于软件实现的运算。最好是用处理器的基本运算,如加法、乘法、移位等。
加密和解密的相似性,即加密和解密过程的不同应局限于密钥使用方式上,以便采用同样的器件来实现加密和解密,以节省费用和体积。尽量采用标准的组件结构,以便能适应于在超大规模集成电路中实现。
DES(Data Encryption Standard)是一种对称分组密码,最早在1977年由IBM设计并发布为美国国家标准。DES的分组长度是64位,密钥长度是56位。
以下是DES的一些基本特点和工作原理:
分组长度和密钥长度: DES使用64位的分组长度,意味着明文和密文都是64位的二进制数。DES的密钥长度为56位,但实际上,密钥是由64位中的8位用于奇偶校验,因此有效的密钥长度是56位。
Feistel结构: DES采用了Feistel结构,其中明文分成两半,并经过一系列的迭代轮次(通常是16轮),每轮都包括将一半的数据进行函数变换和两半数据的置换。
密钥扩展: 在每轮的加密过程中,56位的密钥会被扩展为48位的轮密钥,这些轮密钥用于每轮的函数变换。
S-盒替代: DES使用S-盒(Substitution Box)进行替代操作,这是一个由8个不同的4x16的盒子组成的表,用于将输入映射到输出。S-盒替代提供了非线性性,增加了DES的安全性。
P-盒置换: 在每轮的函数变换后,DES使用P-盒进行最终的置换操作,使输出的位重新排列。
加密和解密对称: DES的加密和解密过程非常相似,只是轮密钥的顺序相反。这使得DES成为一种可逆的对称密码算法。
尽管DES曾经是广泛使用的加密算法,但由于其密钥长度相对较短,容易受到暴力破解的威胁,因此在现代加密标准中已经被更安全的算法取代,例如AES(Advanced Encryption Standard)。
AES(Advanced Encryption Standard)是一种对称分组密码标准,广泛应用于保护敏感数据的加密通信中。它是DES的后继者,经过了广泛的评估和认可,成为当前最常用的对称加密算法之一。AES的设计目标是提供高度的安全性、效率和可扩展性。
以下是AES的一些关键特点和工作原理:
分组长度和密钥长度: AES支持多种分组长度,包括128位、192位和256位。密钥长度可以是128位、192位或256位,分别对应AES-128、AES-192和AES-256。
SubBytes 变换: 在AES的加密过程中,一个字节的替代操作(SubBytes)通过一个固定的字节替代表(S-盒)来实现。S-盒提供了非线性的替代,增加了算法的安全性。
ShiftRows 变换: ShiftRows 变换对每一行进行循环移位,这增加了AES的混淆效果,使其更难受到线性和差分攻击。
MixColumns 变换: MixColumns 变换通过一系列的线性变换混淆列,提高了AES的抗差分攻击性能。
AddRoundKey 变换: AddRoundKey 变换将当前轮的轮密钥与分组进行异或运算,引入了密钥的信息,增加了安全性。
密钥扩展: AES使用密钥扩展算法,将初始密钥扩展为每一轮所需的轮密钥。密钥扩展算法的设计对AES的安全性至关重要。
轮数: AES的轮数取决于密钥长度,分别为10轮(AES-128)、12轮(AES-192)和14轮(AES-256)。
加密和解密对称: AES的加密和解密过程非常相似,主要区别在于轮密钥的使用顺序。这种结构使AES成为一种可逆的对称密码算法。
AES的设计经过了广泛的公开评估,目前被广泛应用于保护敏感信息,包括在加密通信、存储设备和云计算等领域。由于其高度的安全性和效率,AES已经成为许多国际标准和协议的基础。
在介绍AES的加密模式之前,向量这个概念不得不先介绍一下:
在密码学和加密领域,向量(IV)指的是初始化向量(Initialization Vector)。初始化向量是在使用块密码模式时,为了增加加密算法的安全性而引入的一组随机数或伪随机数。
在加密算法中,IV 的作用主要有两个方面:
增加随机性: 初始化向量引入了随机性,确保相同的明文块在使用相同密钥的情况下产生不同的密文块。这是为了防止同样的明文在不同位置生成相同的密文,增加了密码算法的安全性。
防止模式重复: 在一些加密模式中,例如CBC(Cipher Block Chaining)模式,每个块的加密依赖于前一个块的密文。在这种情况下,使用初始化向量可以确保第一个块的加密也是随机的,而不会依赖于前一个块的密文。
举例来说,如果使用AES算法,且使用CBC模式,每个块的加密过程会包括将前一个密文块与当前明文块进行异或操作。为了确保每个加密操作都有足够的随机性,就需要一个初始化向量。初始化向量的值通常是固定长度的二进制数,例如128位。
在AES(Advanced Encryption Standard)中,IV的长度通常等于块大小,即128位(16字节)。
在DES(Data Encryption Standard)中,块大小是64位,因此IV的长度也是64位。
初始化向量本身不是密钥,而是用于改变密码算法的输入,以增加随机性和安全性。
AES(Advanced Encryption Standard)可以用于不同的加密模式,以适应各种应用场景。这些加密模式定义了如何对输入数据进行分组、加密和连接,以及如何处理密文。以下是一些常见的AES加密模式:
密码分组链接模式(Cipher Block Chaining Mode,CBC):
计数器模式(Counter Mode,CTR):
密码反馈模式(Cipher Feedback Mode,CFB):
输出反馈模式(Output Feedback Mode,OFB):
这些加密模式的选择取决于应用的需求,例如并行处理能力、语义安全性、流式数据等。在实际应用中,常常根据具体场景的需求选择适当的加密模式。
需要注意的是,在使用这些模式时,正确的密钥管理和初始化向量(IV)的使用非常关键,以确保安全性。
正确的密钥管理和初始化向量(IV)的使用对于加密安全性至关重要。
密钥生成: 密钥生成是指如何生成并管理用于加密和解密的密钥。密钥应该是足够强大和随机的,以抵抗各种攻击,特别是暴力破解。通常使用专门的密码学随机数生成器来生成密钥。
密钥分发: 密钥必须在通信的双方之间安全地分发。这可能涉及使用其他安全机制(例如,公钥加密)来确保密钥的安全传输。
密钥更新: 定期更新密钥是保持系统安全性的一部分。如果长时间使用相同的密钥,有可能暴露于密码分析或其他攻击。定期更新密钥有助于维护系统的安全性。
引入随机性: 初始化向量是一个固定长度的随机值,用于在同一个密钥下加密不同的明文。在使用块密码模式时,每个块都使用独立的初始化向量。这有助于防止同样的明文块在不同位置生成相同的密文块。
传递方式: 初始化向量通常需要与密文一起传输,并且接收方需要知道初始化向量的值。在某些情况下,初始化向量可以公开,但在其他情况下,需要通过安全渠道传递。
不可预测性: 初始化向量的选择应具有一定的不可预测性,以防止攻击者对加密算法进行分析。通常,初始化向量的值应该是随机的,并且在每次加密操作时都不同。
固定长度: 初始化向量的长度通常等于加密算法所使用的块大小。例如,在AES中,如果使用128位的块大小,初始化向量也应该是128位。
在实际应用中,密钥管理和初始化向量的选择取决于具体的加密算法和使用场景。仔细设计和管理这些元素对于确保系统的安全性至关重要。
《Java加密和解密的艺术》