目录

3.1 炒鸡蛋与对称密码

3.2 本章学习主要内容

3.3 从文字密码到比特序列密码

3.3.1 编码

3.3.2 XOR(异或)

3.4 一次性密码本–绝对不会被破译的密码

3.4.4 一次性密码本是无法破译的

3.4.5 一次性密码本为什么没有被使用

3.5 DES(Data Encryption Standard)

3.5.1 什么是DES

3.5.2 加密和解密

3.5.3 DES的结构(Feistel 网络)

3.6 三重DES(3DES)

3.6.1 什么是三重DES

3.6.2 三重DES的加密

3.6.3 三重DES的解密

3.6.4 三重DES的现状

3.7 AES的选定过程

3.7.1 什么是AES

3.8 Rijndael算法

3.8.1 什么是Rijndael

3.8.2 Rijndael的加密和解密

3.8.3 Rijndael的破译

3.8.4 应该使用哪种对称密码


3.1 炒鸡蛋与对称密码

无重要内容。

3.2 本章学习主要内容

  1. 比特序列运算与XOR运算(异或)
  2. 一次性密码本
  3. 对称密码算法:DES、3DES、AES以及其他一些密码算法
  4. 众多对称密码算法中,到底应该使用哪一种

3.3 从文字密码到比特序列密码

3.3.1 编码

计算机的操作对象是由0和1排列而成的比特序列。将现实世界中的东西映射为比特序列的操作称为编码。如下图:

3.3.2 XOR(异或)

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

  • 将明文A用密钥B进行加密,得到(A⊕B)。
  • 将密文(A⊕B)用密钥B进行解密,得到明文A。

只要选择一个合适的B,仅仅使用XOR可以实现一个高强度的密码。

能够产生不可预测的比特序列,对于密码技术的贡献是巨大的。这种不可预测的比特序列称为随机数

3.4 一次性密码本–绝对不会被破译的密码

原理:将明文与一串随机的比特序列进行XOR运算。明文与密钥长度一样。

3.4.4 一次性密码本是无法破译的

一次性密码本无法破译的根源在于,无法确认破译后的字符串是否是正确的明文

假设对 username 这个字符串进行XOR加密,那么在破译时,需要尝试所有的密钥,那么
破译时,既会出现 username 这个正确的字符串,也会出现比如 aaaaaaaa,bbbbbbbb 这样的规则字符串,也会出现 password 这样有意义的英文单词,也就是说破译后会出现明文中所有可能的字符组合,从中无法判断哪个才是正确的。

3.4.5 一次性密码本为什么没有被使用

  1. 密钥的配送:密钥的长度和密文是相等的。矛盾点 — 如果能够有一种方法将密钥安全地发送出去,那么岂不是也可以用同样的方法来安全地发送明文了吗?
  2. 密钥的保存:矛盾点通上面的一样,“保护明文” 和 “保护和明文一样长的密钥”一样矛盾,问题没有得到实质性的解决。
  3. 密钥的重用:绝对不能重用过去使用过的随机比特序列。
  4. 密钥的同步:密钥和明文长度一样。如果明文很长,密钥也会很长。会引发密钥同步的问题。
  5. 密钥的生成:需要生成大量的随机数,必须是真正的随机数,只有那些机密性重过一切的场合才会使用。

综上所述,一次性密码本是一种几乎没有适用性的密码。但是,一次性密码本的思路却孕育出了流密码

关于流密码,将在第4章详细探讨。传送门——>

关于伪随机数生成器,将在第12章详细探讨。传送门——>

3.5 DES(Data Encryption Standard)

3.5.1 什么是DES

现在 DES 的密文可以在短时间内被破译,因此除了用它来解密以前的密文以外,现在不应该使用DES了。

3.5.2 加密和解密

DES是一种将 “64比特的明文” 加密成 “64比特密文” 的对称密码算法。DES的密钥长度是64比特,其中每隔7比特会设置一个用于错误检查的比特,因此实际上密码长度是56比特

DES以64比特的明文为一个单位进行加密,这个64比特的单位称为分组,以分组为单位进行处理的密码算法称为 分组密码。DES就是分组密码的一种。

DES每次只能加密64比特的数据,如果要加密的明文较长,就需要对DES加密进行迭代,迭代的具体方式称为 模式。 将在第4章详细探讨。

3.5.3 DES的结构(Feistel 网络)

加密过程:

在 Feistel 网络中,加密的各个步骤称为 轮(round),整个加密的过程就是进行若干次轮的循环。DES是一种16轮循环的 Feistel 网络。

下图中就是 Feistel 网络中加密的一轮:

子密钥指的是本轮加密使用的密钥,在 Feistel 网络中,每一轮都需要使用一个不同的子密钥。

一轮的具体步骤如下:

  1. 将输入的数据等分为左右两部分
  2. 将输入的右侧直接发送到输出的右侧
  3. 将输入的右侧发送到轮函数
  4. 轮函数根据右侧数据和子密钥计算出一串看上去是随机的比特序列
  5. 将步骤4中得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧

从这个过程中可以发现,一轮后右侧的数据没有加密,因此在每轮之间需要将左侧和右侧的数据对调。

如下展示了一个三层的 Feistel 网络加密过程:

解密过程:
        我们尝试将一轮加密的输出结果用相同的子密钥重新运行一次,无论轮函数具体是什么,都能够将密文还原为明文。

有多轮的情况也一样,解密时只要按照相反的顺序来使用子密钥就可以了。

Feistel 网络的特点,总结来说:

  • 轮数可以任意增加
  • 加密时无论使用任何函数作为轮函数都可以正确解密
  • 加密和解密可以用完全相同的结构来实现

在AES候选的5个算法中,有3个算法(MAR6,RC6,Twofish)都是使用了 Feistel 网络。

3.6 三重DES(3DES)

3.6.1 什么是三重DES

三重DES是为了增加DES强度,将DES重复三次得到的一种密码算法。缩写为 3SED。

3.6.2 三重DES的加密


        明文经过三重DES处理才能变成最后的密文,DES密钥的长度实际上是56比特,因此三重DES的密钥长度就是56X3 = 168比特。 加密 -> 解密 -> 加密

三重DES的过程为什么是:加密 -> 解密 -> 加密?这是为了兼容普通的DES加密,如果三重的3个密钥都相同,三重DES也就等同于普通DES了。

3.6.3 三重DES的解密

解密过程与加密正好相反。

3.6.4 三重DES的现状

目前还被银行等机构使用,但是由于其处理熟读不高,除了特别重视向下兼容性的情况以外,很少被用于新的用途。

3.7 AES的选定过程

3.7.1 什么是AES

AES:是取代其前任标准(DES)而成为新标准的一种对称加密算法。

全世界提供了多个对称密码算法作为AES的候选,最终从这些候选中选出了一种名为 Rijndael 的对称加密算法。

3.8 Rijndael算法

3.8.1 什么是Rijndael

Rijndael 也是分组密码算法。2000年选为标准密码算法——AES。 AES分组长度固定为128比特,密钥长度只有128、192、256这三种。

3.8.2 Rijndael的加密和解密

Rijndael 算法也是多轮的,每一轮中分为4个步骤(SubBytes、ShiftRows、MixColumns、AddRoundKey),Rijndael使用了SPN结构。

加密过程,每一轮中的步骤大致如下:

 解密过程:


        其中的 InvMixColumns, InvShiftRows, InvSubBytes 分别为 MixColumns, ShiftRows,SubBytes 的反向运算。

更为详细的Rijndael算法介绍,请移步 ——> AES(Rijndael算法)详解

传送门2——>Rijndael密码算法

3.8.3 Rijndael的破译

目前:到现在还没出现针对Rijndael的有效攻击。

对Rijndael来说,每一步都是用数学公式来表达的,这是以前任何密码算法都不具备的性质。如果Rijndael的公式能够通过数学运算来求解,那就意味Rijndael能够通过数学方法进行破译,而这也就为新的攻击方式的产生提供了可能。

不过这还是一种假设。

3.8.4 应该使用哪种对称密码

  1. DES、3DES已经不安全了,不会再应用到任何新的用途。
  2. 现在大家应该使用AES(Rijndael),因为它快速、安全,并且能够在各种平台上工作。

AES最终候选算法应该可以作为AES的备份。和Rijndael一样,这些密码算法也都经过了严格的测试,且没发现任何的弱点。

《图解密码技术》笔记3:对称密码(共享密钥密码)-用相同的密钥进行加密和解密相关推荐

  1. 计算机的加密技术是指,一、密码技术笔记-常见的密码加密技术

    1.什么是密码 说起密码,你首先想到的是什么?银行卡取钱时输入的密码.某平台登录时输入的密码......这或许是我们基于日常生活中最容易想到的密码.那么这些是密码吗?是也不是.举个栗子: 当我们去银行 ...

  2. 密码(图解密码技术)_第一章_环游密码世界总结

    解释一下啊:我发现我没有段落空两字的时候已经不想改了,原谅我懒,这系列后面也是这样的(任性). 本书中的主要角色: Alice_一般角色 Bob_一般角色 Eve_窃听者 Mallory_主动攻击者 ...

  3. 网络与系统安全笔记------密码技术及应用

    网络与系统安全笔记------密码技术及应用 密码学 密码学分支 密码编码 古典加密技术 现代加密技术 加密解密 密码分析 哈希函数 MD族算法 SHA族算法 完整性保护 认证 对称密码 国际标准 机 ...

  4. 人力资源和社会保障部——拟新增职业“密码技术应用员”

    原文见 关于对拟发布集成电路工程技术人员等职业信息进行公示的公告 关于对拟发布集成电路工程技术人员等职业信息进行公示的公告 发布日期:2021-01-15                来源:职业能力 ...

  5. 【信息保护论】Ch2. 加密与解密: 密码学历史中出现过的密码学技术

    密码学历史中出现过的密码技术 Caesar cipher 暴力破解(brute-force attack) Simple Substitution Cipher 密钥空间(key space) 多重置 ...

  6. 链接其他计算机设备要密码,打印机共享需要密码,教您解决win7打印机共享需要密码...

    我们知道在使用打印机的时候许多用户为了方便会将打印机设置网络共享,要使用的时候只要添加网络打印机就可以使用,然而有win7系统的用户却发现添加网络打印机的时候,提示输入用户名和密码,这是什么情况呢?该 ...

  7. 如何从 iPhone、iPad 和 Mac 共享 Wi-Fi 密码

    可能很多朋友连接上家里的Wi-Fi 后不会特意记住Wi-Fi密码,如果有其他Apple产品想连接一下WiFi却忘记了密码怎么办?如果您遇到这种情况,采用以下办法您可以轻松地在 iPhone.iPad ...

  8. 信息安全之仿射密码加密和解密

    本文利用仿射密码,对一个只含可打印字符的txt文件进行加密和解密. //加解密时,文件内容为所有可打印字符,即ASCII码从32-126的95个字符 #include<iostream> ...

  9. 《图解密码技术》笔记11:密钥-秘密的精华

    目录 11.1 本章学习的内容 11.2 什么是密钥 11.2.1 密钥就是一个巨大的数字 11.2.2 密钥与明文是等价的 11.2.3 密码算法与密钥 11.3 各种不同的密钥 11.3.1 对称 ...

最新文章

  1. Python解决The truth value of a Series is ambiguous.md
  2. base64编码的作用【转】
  3. python中numpy与matlab的对应关系
  4. css之多行文本输出
  5. 论文Real-Time Lane and Obstacle Detection on the global System
  6. 测试苹果电脑性能软件xbench在哪,mac性能测试网址
  7. 动态链接库dll注册函数DllRegisterServer的调试
  8. Jabber服务器部署
  9. Chrome鼠标手势插件:CrxMouse
  10. wikisql 数据集解释_【wiki维基百科中文数据集】抽取wiki数据集——实操
  11. WARNING: AllowZoneDrifting is enabled.
  12. ElasticSearch搜索引擎搭建笔记
  13. 离散数学——命题逻辑
  14. 笔记本电脑计计算机硬盘分区,笔记本电脑如何分区,手把手教你笔记本电脑如何分盘...
  15. 提供一个中国身份证号码判断的类
  16. 汽车租赁系统 ssm
  17. 如何测试一支笔之我见
  18. 全球及中国小型风力发电行业研究及十四五规划分析报告(2022)
  19. 进口产品需要做3c认证么?如何办理?
  20. java 八种基本数据类型

热门文章

  1. 高德地图API路线规划
  2. ORACLE获取oledbdatareader 记录数
  3. 支付宝小程序选择手机本地视频
  4. Linux内存管理第八章 -- Slab Allocator (二)
  5. 机器视觉 Histogram of oriented gradients
  6. python 正则 匹配任意字符串_Python正则表达式匹配字符串中的任意纯数字
  7. php 随机数原理,php随机数原理
  8. iOS Certificates, Identifiers Profiles简介
  9. 【暑假集训】拳王阿里
  10. mysql恢复ibd数据文件