深入浅出 区块链密码学(学习笔记2.0)——对称加密

一.引言

        这篇文章是继上一篇(学习笔记1.0)更新的文章(可以去主页查看相应内容),本篇文章主要讲解对称加密的工作原理、加密算法以及对称加密与哈希函数之间有哪些关联。希望对各位有帮助,也可以在评论区给予补充说明。


二.何为对称加密

        对称加密是一种加密技术,使用相同的密钥来进行加密和解密。这意味着发送方和接收方都使用相同的密钥来加密和解密消息。密钥既用于加密明文(原始消息),也用于解密密文(加密后的消息)。


加密、解密和密钥

加密(Encrypt)是从明文生成密文的步骤,解密(Decrypt)是从密文还原成明文的步骤,而这两个步骤都需要用到密钥(Key)。这和我们现实中,用钥匙上锁和开锁是一样的。


让我们更详细地了解对称加密的工作原理和特点:

2.1 加密过程:

  1. 选择密钥:发送方选择一个密钥。这个密钥必须保密,只有发送方和接收方知道。
  2. 加密消息:发送方使用所选的密钥对要发送的消息进行加密。加密算法将明文消息和密钥作为输入,然后生成密文。
  3. 发送加密消息:发送方将加密后的消息发送给接收方。

2.2 解密过程:

  1. 接收加密消息: 接收方收到加密消息。
  2. 使用密钥解密: 接收方使用与发送方共享的密钥对收到的加密消息进行解密。解密算法将密文和密钥作为输入,然后生成明文消息。
  3. 获取原始消息:接收方获得解密后的明文消息。

2.3 特点和应用:

  1. 快速:对称加密通常比非对称加密更快速,因为它涉及的操作较少。
  2. 适用性广泛:对称加密适用于许多场景,如保护数据在传输过程中的机密性,存储在存储设备上的数据,以及在计算机系统内部传递的数据等等。
  3. 密钥分发挑战: 对称加密需要在通信双方之间共享密钥。密钥的安全分发可能是一个挑战,因为如果密钥在传输过程中被拦截,就会导致加密通信的不安全性。
  4. 常见算法: 常见的对称加密算法包括AES(高级加密标准)、DES(数据加密标准)、3DES、Blowfish等。

总的来说,对称加密是一种重要的加密技术,广泛应用于信息安全领域,可以保护数据的机密性,防止未经授权的访问和窃取。


三.对称加密常见算法

3.1 DES算法

 DES(Data Encryption Standard,中文:数据加密标准),是一种对称加密算法。该算法在1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并于1977年被发布,随后在国际上广泛流传开来。然而,随着计算机的进步,DES 已经能够被暴力破解,所以该算法已经不安全了。

DES是一种分组密码(Block Cipher,或者叫块加密),即将明文按64比特进行分组加密,每组生成64位比特的密文。它的密钥长度为56比特(从规格上来说,密钥长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实际长度为56比特)。

3.1.1 使用DES算法进行对称加密的过程

以下是使用DES算法进行对称加密的基本过程:

加密过程

  1. 选择密钥: 选择一个56位的密钥,这是DES算法的标准密钥长度。

  2. 初始化: 将明文消息进行初始化处理,以确保其长度符合DES算法的要求。通常,如果明文消息的长度不是64位的倍数,会使用填充(Padding)技术进行填充。

  3. 分组: 将初始化后的明文消息分成64位(8字节)的分组。

  4. 初始置换(Initial Permutation): 对每个分组应用初始置换,该置换将每个分组中的位重新排列。这是DES算法的一部分,目的是增加密码的强度。

  5. 轮函数(Round Function): 将初始置换后的分组输入到轮函数中。轮函数会使用子密钥对分组进行一系列的变换,包括置换、替换和移位等操作。

  6. 轮加密(Round Encryption): 对轮函数的输出进行轮加密操作,使用不同的子密钥对每个轮进行加密。

  7. 最后一轮加密: 当所有轮完成后,得到的结果被输入到最后一轮加密中,产生最终的密文。

解密过程 

  1. 选择密钥: 与加密过程相同,选择相同的56位密钥。

  2. 初始化: 将密文消息进行初始化处理。

  3. 分组: 将初始化后的密文消息分成64位的分组。

  4. 初始逆置换(Initial Permutation Inverse): 对每个分组应用初始逆置换,这是初始置换的逆操作。

  5. 轮函数逆操作: 将初始逆置换后的分组输入到轮函数逆操作中。这是轮函数的逆操作,将使用与加密过程相同的子密钥进行逆操作。

  6. 轮解密: 对轮函数逆操作的输出进行轮解密操作,使用不同的子密钥对每个轮进行解密。

  7. 最后一轮解密: 当所有轮完成后,得到的结果被输入到最后一轮解密中,产生最终的明文。


需要注意的是,DES算法是一种经典的对称加密算法,但由于其密钥长度较短且存在一些安全漏洞,已经不再推荐用于安全通信。更安全的替代算法包括AES(高级加密标准)。


3.1.2 DES算法加解密例题(帮助理解)

这里我使用一个简单的例子来演示使用DES算法进行对称加密的过程,帮助大家理解。

假设我们有以下信息需要进行加密:
明文消息: "HELLO WORLD"
密钥: "SECRETKEY" (这个密钥需要进行处理才能符合DES算法的要求,但为了简化,我们假设密钥已经符合要求)

现在我们将使用DES算法对这条消息进行加密。

加密过程:

1. 初始化: 将明文消息进行初始化处理。

    明文消息:"HELLO WORLD"
    
2. 分组: 将初始化后的明文消息分成64位(8字节)的分组。

    分组1:"HELLO WO"
    分组2:"RLDXXXXX"(填充字节)

3. 初始置换: 对每个分组应用初始置换,重新排列分组中的位。

    对分组1进行初始置换后的结果:"WHELO OL"
    对分组2进行初始置换后的结果:"XXXDRLLL"

4. 轮加密: 将初始置换后的分组输入到DES的轮函数中进行轮加密操作。

    对分组1进行轮加密后的结果:"6A25D1B3"
    对分组2进行轮加密后的结果:"3E14F35C"

5. 最后一轮加密: 将轮加密后的结果进行最后一轮加密,得到最终的密文。

    最终密文:"6A25D1B3 3E14F35C"


解密过程:

解密过程与加密过程相反,首先对密文进行初始逆置换,然后将结果输入到DES算法的轮函数逆操作中进行解密,最后进行轮解密和最后一轮解密操作,得到原始的明文消息。

需要注意的是:由于DES算法是一种块密码算法,因此如果消息的长度不是64位的倍数,需要进行填充。此外,实际上的DES密钥通常需要进行处理以符合算法的要求,但在这个例子中我们简化了这个过程。
 


3.2 3DES算法

3DES是DES(Data Encryption Standard)的一种变体,它使用了三个DES密钥对数据进行多轮加密,以提高安全性。3DES可以提供比单个DES更高的安全性,同时保持了与DES兼容的加密解密过程。

3.2.1 3DES的密钥

在3DES中,密钥是由三个56位的DES密钥组成,总共为168位。这三个密钥分别用作加密的第一轮、第二轮和第三轮。由于DES密钥的长度是56位,但实际上只有其中的 64 位被用于加密,因此每个56位的密钥中有8位用作奇偶校验位。

3.2.2 3DES的加密过程

3DES的加密过程与DES的加密过程类似,但它使用了三个密钥和多次轮加密。下面是3DES的加密过程:

  1. 初始轮密钥加(Initial Round Key Addition): 将明文与第一个密钥进行一次轮密钥加操作。
  2. 轮加密(Round Encryption): 将初始轮密钥加后的消息输入到轮函数中进行轮加密操作。这个操作会多次重复,通常是16轮。
  3. 后一轮加密(Final Round Encryption): 当所有轮完成后,得到的结果被输入到最后一轮加密中,产生最终的密文。

注意:3DES的加密过程,并不是进行三次DES加密(加密→加密→加密),而是以密钥1、密钥2、密钥3的顺序,进行加密→解密→加密的过程。 

3.2.3 3DES的解密过程

3DES的解密过程与加密过程相反,它使用相同的三个密钥和相反的操作来还原原始消息。解密过程包括初始逆置换、轮解密和最后一轮解密。

 3.2.4 3DES的优点和缺点

优点:

  •    提供了比单个DES更高的安全性,因为它使用了三个密钥和多次轮加密。
  •    兼容性好,可以与现有的DES系统集成,因为它仍然使用了DES的加密解密过程。

缺点:

  •    相对于AES等现代加密算法,3DES的加密速度较慢。
  •    使用了多个密钥,密钥管理可能会更加复杂。

总的来说,3DES是一种经典的对称加密算法,它在一定程度上提高了数据的安全性,但由于加密速度较慢和密钥管理复杂等问题,现在逐渐被更先进的加密算法所取代。

3.2.5 3DES算法加解密例题

我们通过一个简单的例题来理解3DES算法的加密和解密过程。

例题:

假设我们有以下信息需要进行加密和解密:
明文消息: "HELLO"
密钥: "SECRETKE"(假设为了简化,密钥已经符合DES算法的要求)

加密过程:

1. 选择密钥:使用密钥 "SECRETKE"。

2. 初始化:将明文消息 "HELLO" 进行初始化处理。

3. 分组:将初始化后的明文消息分成64位(8字节)的分组。

   - 分组1:"HELLOXXX" ("XXX" 代表填充字节,以确保分组长度为64位)

4. 初始轮密钥加: 将明文与第一个密钥进行一次轮密钥加操作。

   - 初始轮密钥加后的结果:"ABCDNABC"(假设加密结果)

5. 轮加密: 将初始轮密钥加后的消息输入到轮函数中进行轮加密操作。假设我们执行3轮加密。

   - 第1轮加密后的结果:"WXYZPQRS"
   - 第2轮加密后的结果:"MNOPQRST"
   - 第3轮加密后的结果:"EFGHIJKL"

6. 最后一轮加密: 使用第3轮加密后的结果作为最终的密文。

   最终密文:"EFGHIJKL"

解密过程:

1. 选择密钥:使用相同的密钥 "SECRETKE"。

2. 初始逆置换:对密文消息进行初始逆置换。

   - 初始逆置换后的密文:"ABCDNABC"

3. 轮解密:将初始逆置换后的密文消息输入到轮函数中进行轮解密操作。假设我们执行3轮解密。

   - 第1轮解密后的结果:"XYZWXYZV"
   - 第2轮解密后的结果:"OPQNPQRN"
   - 第3轮解密后的结果:"HIJKLMNO"

4. 最后一轮解密:使用第3轮解密后的结果作为最终的明文。

   最终明文:"HIJKLMNO"

通过这个例题,我们可以看到3DES算法的加密和解密过程。每一轮加密和解密都使用了相同的密钥,但是顺序和操作相反,以确保数据的安全性。


3.3 AES算法

AES(Advanced Encryption Standard,高级加密标准)是一种对称密钥加密算法,用于加密和解密数据。它是目前广泛应用的密码学标准之一,被美国政府采用作为保护敏感数据的加密标准,也被许多企业和组织所采用。

AES算法采用了分组密码的设计,它将输入数据分成固定长度的块,并使用相同长度的密钥来对每个块进行加密和解密。AES算法支持多种密钥长度,包括128位、192位和256位。

AES算法的特点包括:

  1. 安全性高:AES算法经过了广泛的密码学分析和审查,被认为是一种安全可靠的加密算法,难以被攻击。
  2. 效率高:AES算法设计简洁,加密和解密速度快,适用于各种计算设备和平台。
  3. 灵活性:AES算法支持多种密钥长度,可以根据安全需求选择合适的密钥长度。
  4. 易于实现:AES算法的实现相对简单,可以在各种编程语言和平台上实现。

AES算法的基本原理是将输入数据通过一系列的置换、替换和混淆操作,与密钥进行轮轮加密,从而产生密文。解密过程则是对密文进行相反的操作,使用相同的密钥来还原原始数据。AES算法的加密和解密过程都是相同的,只是在轮密钥的生成和使用方面有所不同。

总的来说,AES算法是一种安全、高效且广泛应用的对称加密算法,适用于保护敏感数据和通信的安全性。

3.3.1 AES算法工作步骤的作用和原理:

加密过程:

1. 密钥扩展(Key Expansion):

AES算法使用密钥扩展算法将输入的密钥转换为轮密钥(Round Keys)。这些轮密钥将用于加密和解密过程中的每一轮。密钥扩展算法通过迭代应用密钥调度算法,从而生成多个轮密钥。

2. 初始加密(Initial Round):

在初始加密阶段,明文数据被分成固定大小的块,并且与第一轮的轮密钥进行加密。这一步通常涉及一些基本的操作,如AddRoundKey(轮密钥加)。

3. 轮加密(Round Encryption):

AES算法的核心是多轮加密过程。在每一轮中,明文数据经历四个变换步骤:SubBytes、ShiftRows、MixColumns和AddRoundKey。这些变换步骤将明文数据转换为密文数据,并确保加密后的数据具有良好的扩散性和混淆性。

  • SubBytes: 使用S盒替换每个字节,这个替换是非线性的,增加了密码的复杂性和安全性。
  • ShiftRows: 对每一行进行字节移位操作,增加了密码的扩散性。
  • MixColumns: 对列进行线性变换,增加了密码的扩散性。
  • AddRoundKey: 将轮密钥与每个字节进行异或运算,增加了密码的复杂性。

4. 最后一轮加密(Final Round):

在最后一轮加密中,不再执行MixColumns步骤,只执行SubBytes、ShiftRows和AddRoundKey步骤。这是因为MixColumns步骤的目的是增加扩散性,但在最后一轮加密中已经不再需要。

5. 密文输出(Cipher Output):

最后,经过多轮加密后得到的密文数据即为加密后的结果。

解密过程:

解密过程与加密过程相似,但是使用的是相反的操作和轮密钥。解密过程包括轮解密和初始解密,其中轮解密包括SubBytes、ShiftRows、MixColumns和AddRoundKey步骤,而初始解密只包括AddRoundKey步骤。

通过这些步骤,原始的明文数据将被转换为密文数据,或者反之,以实现数据的加密和解密。AES算法的设计目标是提供高效、安全且可靠的数据加密和解密功能,使其成为广泛应用的加密标准之一。

3.3.2 AES算法加解密例题

我们通过一个例题来理解AES(Advanced Encryption Standard)算法的加密和解密过程。

例题:

假设我们有以下信息需要进行加密和解密:
明文消息: "HELLO"
密钥: "SECRETKEY"(假设为了简化,密钥已经符合AES算法的要求)

加密过程:

1. 选择密钥: 使用密钥 "SECRETKEY"。

2. 初始化: 将明文消息 "HELLO" 进行初始化处理。

3. 分组: 将初始化后的明文消息分成128位(16字节)的分组。

   - 分组1:"HELLOXXXXXXX" ("X" 代表填充字节,以确保分组长度为128位)

4. 轮加密: 将每个分组输入到AES算法的轮函数中进行轮加密操作。假设我们执行10轮加密。

   - 第1轮加密后的结果:"UODSNDJDIWFK..."
   - 第2轮加密后的结果:"XOWHDHDJDIWFK..."
   - 第3轮加密后的结果:"ASKDNJDJFWKX..."
   - 以此类推...

5. 最后一轮加密: 使用第10轮加密后的结果作为最终的密文。

   最终密文:"ASKDNJDJFWKX..."

解密过程:

1. 选择密钥: 使用相同的密钥 "SECRETKEY"。

2. 初始逆置换: 对密文消息进行初始逆置换。

   - 初始逆置换后的密文:"UODSNDJDIWFK..."

3. 轮解密: 将初始逆置换后的密文消息输入到AES算法的轮函数逆操作中进行轮解密操作。假设我们执行10轮解密。

   - 第1轮解密后的结果:"HELLOXXXXXXX"
   - 第2轮解密后的结果:"HELLOXXXXXXX"
   - 第3轮解密后的结果:"HELLOXXXXXXX"
   - 以此类推...

4. 最后一轮解密: 使用第10轮解密后的结果作为最终的明文。

   最终明文:"HELLO"

通过这个例题,我们可以看到AES算法的加密和解密过程。AES算法使用相同的密钥进行加密和解密,但是加密和解密的操作是相反的,以确保数据的安全性。AES算法是一种现代的对称加密算法,被广泛应用于保护敏感数据。


四.对称加密与哈希函数之间的联系

对称加密和哈希函数都是常见的加密技术,它们在保护数据安全和保障信息完整性方面扮演着不同的角色。虽然它们有一些共同点,但也有一些明显的区别。

4.1 共同点:

  1.  安全性保障:对称加密和哈希函数都是用来保护数据安全的技术。对称加密用于加密和解密数据,而哈希函数用于生成数据的摘要,以确保数据的完整性。
  2.  密钥管理:对称加密需要使用密钥来进行加密和解密操作,而哈希函数不需要密钥。

4.2 区别:

1. 用途:
   - 对称加密用于加密和解密数据,确保数据在传输或存储过程中的保密性。
   - 哈希函数用于生成数据的固定长度摘要,通常用于数据的完整性校验和验证,以及密码存储(如存储加盐哈希密码)。

2. 输出类型:
   - 对称加密的输出是密文,它与明文具有相同的数据格式,只是经过了加密转换。
   - 哈希函数的输出是固定长度的摘要,无论输入数据的大小如何,输出的摘要长度始终是固定的。

3. 可逆性:
   - 对称加密是可逆的,可以使用相同的密钥对密文进行解密,还原为原始的明文。
   - 哈希函数是不可逆的,即使知道输入数据和哈希值,也很难反向推导出原始数据。

4.3 关联:

1. 综合应用: 在实际应用中,对称加密和哈希函数经常结合使用,以提供更全面的数据安全保障。例如,在密码存储中,通常会使用哈希函数对密码进行哈希处理存储在数据库中,而在传输过程中,则使用对称加密技术来加密敏感数据。

2. 数据完整性验证: 在数据传输或存储过程中,可以使用哈希函数生成数据的摘要,并将摘要附加到数据中。接收方可以使用相同的哈希函数对接收到的数据计算摘要,并与发送方提供的摘要进行比较,以验证数据的完整性。

综上所述,对称加密和哈希函数在数据安全方面发挥着不同但相辅相成的作用,通过它们的综合应用可以提供更全面的数据保护和安全性。


五.结语

之后会持续跟进这方面知识内容,以上内容可能不是很完整,大家也可以看看其他文章内容进行对比。

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值