加密解密-对称加密与非对称加密

2023-11-05

目录

加密解密/公钥私钥

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

加密-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站转载视频

原视频系列标题:

在这里插入图片描述

原视频链接:

https://www.bilibili.com/video/BV1SV4y1x71h?spm_id_from=333.999.0.0&vd_source=e974e5b422b5e93d638b7ac74272a918

感谢原内容作者

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加密解密-对称加密与非对称加密 的相关文章

  • hello paddle

    文章目录 一 用飞桨定义模型的计算 二 准备好运行飞桨 三 告诉飞桨怎么样学习 四 运行优化算法 五 机器学习出来的参数 import paddle 导入飞桨paddle和numpy import numpy print paddle pa
  • ssh普通用户(非root用户)的密钥登录

    原文地址 ssh原理 ssh普通用户 非root用户 的密钥登录 这里以用户名 zhangsan 为例 由于个人习惯问题 我把用户zhangsan的默认目录改了 在使用密钥登录的过程中 始终提示要输入用户密码 而 var log secur
  • 群晖硬盘已损毁 Linux 修复,群晖NAS提示空间损毁修复纪实

    注 以下操作有丢失数据的风险 请慎重考虑按本文提示操作 前几天 家里的服务器RAID卡告警 提示阵列掉盘 后花了一天时间进行重新挂盘并重建数据 不是重建阵列哈 开机 OK ESXI一切正常 运行各种系统没有问题 当打开NAS时 提示报错 重
  • stm32单片机基础(一)

    stm32单片机 串口复用 IO口功能如何查看 GPIO配置选择 GPIO 如何确定外设的时钟是APB1还是APB2 概念 时钟周期 机器周期 双工 半双工 单工含义区别 串口复用 一定要记得使能复用时钟 AFIO 端口IO功能复用时钟 某

随机推荐

  • 线程共享和私有的数据

    引用 windows程序员面试指南 堆上的数据是线程共享的 栈上的数据是线程私有的 1 堆上共享的数据 a 进程 代码段 b 进程 数据段 c 进程打开的文件描述符 d 信号的处理器 e 进程的当前目录和 f 进程用户 ID 与进程组 ID
  • 全网最牛,接口自动化-Linux系统安装Jenkins+Ant详细步骤

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • vld(Visual Leak Detector)下载地址和源码地址

    安装包下载页面 https kinddragon github io vld eg https github com KindDragon vld releases download v2 5 1 vld 2 5 1 setup exe 源
  • kafka存储原理介绍

    几个基本概念 Topic 消息主题 每一条消息都必须要指定主题 kafka集群可以同时进行多个topic的分发 Broker 消息处理的节点 可以立即为每个broker是一个单独的kafka进程 一般部署在不同的机器上 多个broker共同
  • js 计算月份差 ,天数差

  • Linux 安装 RocketMQ(Server)

    安装 linux版 官网下载地址 解压上传至 usr local 进入上传文件目录 cd usr local rocketmq all 4 7 0 source release bin 修改runbroker sh 修改runserver
  • chatgpt赋能python:如何通过Python赚钱

    如何通过Python赚钱 介绍 Python是一种高级编程语言 广泛用于Web开发 数据分析 机器学习等领域 Python具有简单易学 功能强大 易于维护等特点 因此非常受欢迎 而且 Python开源免费 可以在各个平台上运行 不需要花费太
  • Java设计模式-里氏替换原则

    里氏替换原则 Liskov Substitution Principle 定义1 如果对每一个类型为 T1的对象 o1 都有类型为 T2 的对象o2 使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时 程序 P 的行为没
  • 虚拟机ubantu连接物理机外部代理

    1 关闭windows防火墙 2 手动设置虚拟机代理 首先代理的允许局域网连接要打开 并且端口信息是根据v2rayN左下角的端口信息填写的 注意本地监听端口和局域网监听端口不一样
  • 【MATLAB第73期】# 源码分享

    MATLAB第73期 源码分享 基于MATLAB的不同类型数据排列方式合集 学习参考链接 1 对数组的行进行排序 单元格 字符串 类别 表 2 按字符代码对文本进行排序 3 对文件名 文件夹名或文件路径进行排序 4 对字符串 单元格 分类数
  • 原理图和PCB设计--EMC审查项(具体实施需结合公司实际项目做合理变更)

    原理图EMC设计检查要点 PCB EMC设计检查要点
  • python q-q图 和PP图

    转载于https www cnblogs com king lps p 7840268 html以供学习 侵权即删 一 QQ图 分位数图示法 Quantile Quantile Plot 简称 Q Q 图 统计学里Q Q图 Q代表分位数 是
  • qmake中文官方文档

    qmake QMake提供了一个用于管理应用程序 库 其他组件的构建过程的面向工程系统 QMake扩展了每个工程文件的信息 生成一个执行编译和连接过程的Makefile 本文翻译自Qt 4 8官方文档 一 QMake使用 QMake提供了一
  • vue导出excel

    1 下载依赖包 npm install S file saver xlsx npm install D Script loader 2 下载两个文件Blob js和 Export2Excel js 在src下创建vendor文件夹 将两个j
  • MVC简介

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 MVC简介 MVC架构最早是smalltalk语言研究团提出的 应用于用户交互应用程序中 smalltalk语言和java语言有很多相似性 都是面向对象语言 很自然的SUN在
  • QT的oracle驱动QOCI连接数据库产生QOCI driver not loaded和Unable to logon的问题解决

    相比mysql oracle的驱动真是一言难尽 都是商用的 mysql的驱动编译起来又快又稳 oci真的是让人捉鸡 无奈客户一开始起步用的都是国外买的成套系统 搭配oracle数据库 数据量大不可能进行迁移 所以只能硬着头皮上了 先记一波流
  • 解决数组塌陷问题的两种方法

    数组塌陷 操作数组的时候会使数组的索引发生变化 造成数组中的某项被跳过 例如 删除数组中的每一项 for var i 0 i lt arr length i arr splice i 1 1 每次执行i for var i 0 i lt a
  • if综合练习

    1 1 从控制台输入你要出的拳 石头 1 剪刀 2 布 3 2 电脑随即出拳 3 比较胜负 import random 1 从控制台输入要出的拳 player int input 请输入您要出的拳 石头1 剪刀2 布3 2 电脑出拳 com
  • IDEA个人常用设置及迅雷下载方式

    IDEA个人常用设置及迅雷下载方式 文章目录 IDEA个人常用设置及迅雷下载方式 1 迅雷下载方式 2 显示空格 3 120字符标准线及格式化自动换行 以下以2021 1为例 个人常用的一些设置总结 1 迅雷下载方式 有时候用浏览器下载很慢
  • 加密解密-对称加密与非对称加密

    目录 加密 Encryption Symmetric Key Encryption 对称密钥加密 凯撒密码 对称加密的例子 aesarCipher 例子 Kercos原理 Kerckhoff s Principle 有什么方法破解凯撒密码