admin 管理员组

文章数量: 887018

加密解密

目录

  • 加密-Encryption

  • Symmetric-Key Encryption(对称密钥加密)

  • 凯撒密码-对称加密的例子-aesarCipher

    • 例子
  • Kercos原理-Kerckhoff’s Principle

  • 有什么方法破解凯撒密码?

    • 频率分析

    • 已知明文攻击

    • 暴力攻击

  • 通过加密进行身份验证-Authentication via Encryption

  • 结合加密和身份验证

  • 对称密钥加密的缺点

    • 他们要怎样让对方获知这个密钥key的值?

    • 如果有这些安全的信道 他们为什么还要使用不安全的渠道来发送密文那?

    • 但如果alice和bob是没有机会在安全环境下进行任何通过的两方那?

  • 非对称密钥加密

  • 非对称密钥加密的例子

  • 公钥私钥的生成

  • 非对称密钥加密的缺点

  • 公钥基础设施-Public Key Infrastructure(PKI)

  • 前置 加密与哈希的区别

加密解密/公钥私钥

密码学可以应用在任何需要以某种方式隐藏你所说的东西(所发送的信息)的场景下

加密-Encryption

密码学最古老的一种应用 加密

Alice需要发送信息m给Bob

Eve可以监听信道上所有的通过的信息

Alice怎样可以发送信息m给Bob 同时不让Eve理解信息m?

Symmetric-Key Encryption(对称密钥加密)

Alice和Bob持有享用的密钥k

Alice使用加密方法E() 使用密钥k加密信息m得到密文c

Alice通过信道发送密文c

Bob使用解密方法D() 使用密钥k 解密密文c 得到信息m

Eve即使在知道加密解密所使用的算法的情况下如果不知道密钥k也将无法通过解密获取信息m

凯撒密码-对称加密的例子-aesarCipher

假设需要发送的信息为一个由英文字母组成的字符串

为26个英文字母设置0-25共26个整数作为下标

设置密钥k的值为某个整数

加密方法为

在字母表上将明文信息使用的英文字母由低向高移动k位 如果超过下标25则从0开始以此循环

将得到的字母作为密文信息对应位置的字符

解密方法为

在字母表上将密文信息使用的英文字母由高向低移动k为 如果下标低于0则从25开始以此循环

将得到的字母作为明文信息对应位置的字符

例子

假设我们有明文信息ATTACKATDAWN

key为5

加密得到的密文信息将为FYYFHPFYIFBS

对于从信道窃取传输中信息的人来说 在不知道key 或不知道加密使用的算法的情况下

只能得到密文FYYFHPFYIFBS 无法获取明文信息

Kercos原理-Kerckhoff’s Principle

我们需要假设

不仅我们最终进行发送的数据会被人窥探并且他们可能知道我们所使用的加密算法

所以信息的保密性不应该取决于算法本身的保密

而应该取决于密钥key的保密性

在开发一个加密系统时 不应该认为人们不会知道你使用的算法

而应该假设 算法不具有保密性 保密性只存在于密钥中

密钥应该是唯一能保证我们系统安全的东西

有什么方法破解凯撒密码?

在不知道密钥key的值

但明确知道我们使用凯撒密码算法加密信息的情况下

有什么方法能够破解凯撒密码?

频率分析

假设密文来自英文字母组成的明文信息

则可将e作为密文中出现频率最高的密文字母的明文值(经验值)

以此反推得到key

并以此key尝试破解密文

若未正确破解 可替换此次猜测使用的字母e为出现频率第一位的字母进行下次尝试

重复此步骤直到获取其含义可理解的明文即可

已知明文攻击

如果攻击者已经知道了一段密文/此密文对应的明文 以及加密使用的算法

则可以很简单的推算出密文

比如攻击者知道了"ATT"在经过加密后得到"FYY"

则可推算出密钥key的值为5

暴力攻击

不论密钥key的值到底被设置为多少

因为凯撒密码算法本身的特性 事实上其值都可以由一个0-25之间的值替代 并起到与原key相同的作用\

明文进行加密时如果超过下标25设为0循环处理

密文进行解密时如果低于下标0设为25循环处理

攻击者最多只需要尝试25次就可以通过暴力攻击获取到正确的或等效的密钥key

因为如果key为0或任何26的倍数时

密文将于明文相同 所以是最高25次尝试就可获取明文

通过加密进行身份验证-Authentication via Encryption

假设eve不止能够窃听网络

它还能够在传输途中修改信息m

alice发送了一条信息给bob

eve拦截了信息并且发送了她修改后的信息m’

bob如何验证alice是信息的发送者(即如何验证bob收到的信息是未经修改的alice发送的信息)

假设alice和bo共用一个 单独的用于认证的密钥key-a

使用一个h()用于认证的函数

如果h(key-a,m)给出值a 则表示认证通过

此处的函数h()可以是添加一定数量的字符得到一个也定的结果a

或者是一个特定的哈希函数

如此当bob收到一条信息时

他就能够分辨出信息是否是alice发送的未经修改的信息(由alice签名的)

结合加密和身份验证

我们可以通过将我们的身份验证信息(比如mac地址)包含在密文中

从而结合以上提到的加密 以及 身份验证

从而可以达到以下效果

密文信息的接收者可以校验 密文信息是否来自它所预期的消息发送者

如果不是 接收者将无法读取此信息

对称密钥加密的缺点

在对称密钥加密中 bob和alice需要知道相同的密钥

他们要怎样让对方获知这个密钥key的值?

或许为了保密性 他们需要在一些单独的 安全的信道中共享这些密钥

比如有完善措施的安全网络 或者干脆是离线的环境下

如果有这些安全的信道 他们为什么还要使用不安全的渠道来发送密文那?

可能是便利性的原因或其他一些局限

离线环境/安全网络环境下的交流并不总是能够有机会进行的 不能随时使用

在可以使用安全渠道交换信息时 沟通的双方只需要约定密钥

然后就可以在非安全的环境下进行密文交流了

但如果alice和bob是没有机会在安全环境下进行任何通过的两方那?

举例 如果我需要把一个加密货币发送到一个我从未听说过的地址 或者发送给一个没有机会进行安全环境沟通的人

我该如何与他们建立一个安全的渠道 然通过他们可以证明他们是谁?

在一个大规模的网络或者系统中 我们不可能认识所有与我互动的人

对称密钥加密依然有一些在现实情况下难以规避的缺点

非对称密钥加密

在非对称密钥加密中

有两个不同的密钥

一个用来给信息加密 另一个用来解密

通常我们将这两个不同的密钥称为p-s密钥对 即公钥/私钥密钥对

任何知道这个公钥的人都可以给你发送加密消息

但只有拥有私钥的人 可以解密这些由公钥加密的消息

非对称密钥加密的例子

bob向所有人发布了公钥 Pbob 但仅bob自己持有私钥Sbob

Alice可以使用Pbob加密信息m 得到密文c 在非安全的信道上发送此密文给bob

唯一解密密文c的方式为使用解密方法D() 并且需要知道私钥Sbob

但Sbob只有Bob持有

以此方式 alice和bob可以进行在非安全信道上的密文通信 且不需要提前在安全环境下约定key了

公钥私钥的生成

此文不探讨如何实现一个非对称密钥加密算法

但我们现在可以知道的是 这种加密方式是行之有效的

公钥私钥密钥对并不是两个单独的随机值

我们需要对这两个key一并进行生成

椭圆曲线密码算法 RAS加密算法 都能够做到这一点

非对称密钥加密的缺点

非对称密钥加密的缺点主要是效率较低

整个信息交换流程因为复杂的非对称密钥加密解密算法的加入变得很慢

所以在大多数现代系统中实际流程未

如果两个实体需要进行非安全网络下的通信

他们呢首先使用非对称加密建立一个安全的通信通道

尽管较慢 但他们只需要通过这个安全信道约定一个对称密钥加密使用的key即可

然后这两个实体就会转而使用效率较高的对称密钥加密

公钥基础设施-Public Key Infrastructure(PKI)

alice在使用一个非对称密钥加密系统发送信息给bob时

如何能够确认他所持有的key时bob发布的公钥 而不是eve伪造的?

或者说 我们如何将身份与特定的公钥相关联?

这可以依赖公钥基础设施进行认证

公钥基础设施时互联网上的一些中心化的权威机构

这些机构会验证一个公钥是否与特定的发布者关联

并且这些机构会作为证书的颁发者 为此pki的使用者颁发证书

证明一个公钥与此实体存在绑定关系

在现在 很多网络浏览器中都已经内置了这些证书颁发机构

也可以依赖信任关系的传递进行认证

比如c因为曾面见过a并当面确认过Pa是a所发布的公钥

所以c相信Pa是a发布的公钥

d因为曾面见过c 可以信任c

所以d也可以信任c所信任的Pa是a所发布的公钥

以此递推

总之 一个公钥与发布者之间的绑定不被伪造 并不能依靠非对称密钥加密算法本身进行保证

前置 加密与哈希的区别

(仅为下篇文章介绍哈希的前置介绍)

不论是对称密钥加密还是非对称密钥加密

密文和明文之间总是能够双向的转换

这种转换是双向的 与这种转换相关的一个或一组函数 称为双向函数

哈希算法则不同

哈希算法将大集合中的数据映射到一个相较更小的集合的数据集合中

这种映射是单向的

如果hash(x) = y

则通过任意函数f(y) 得到x都是不可行的

举例hash()入参为一个整数 算法返回入参整数的平方值

hash(x) = 4

则没有确切的方法知道是x到底是2还是-2


此文为个人学习笔记

原始内容来自一b站转载视频

原视频系列标题:

原视频链接:

=333.999.0.0&vd_source=e974e5b422b5e93d638b7ac74272a918

感谢原内容作者

转载视频翻译多数为机翻 此文可能某些地方词不达意或翻译错误 若有事实错误或词不达意的情况还请指正 感谢

本文标签: 加密解密