当前位置: 首页 > news >正文

【现代密码学基础】详解完美安全与香农定理

目录

一. 介绍

二. 完美安全的密钥与消息空间

三. 完美安全的密钥长度

四. 最优的完美安全方案

五. 香农定理

(1)理论分析

(2)严格的正向证明

(3)严格的反向证明

六. 小结


一. 介绍

一次一密方案,英语写做one time pad encryption scheme

一次一密方案可以实现完美安全(perfectly secret),但是这些方案是有局限性的,比如所有完美安全的方案密钥空间都要大于等于消息空间,这个定理待会我们会利用密码学专业术语进行证明。

如果假定密钥的长度固定,消息空间(message space)里的明文长度也固定的话,那么完美安全就要求密钥的长度大于等于消息的长度。当然,如果密钥和消息长度一样的话,就像一次一密那样,则是最优的情况。

除了这一个限制外,完美安全还要求密钥只能使用一次,具体证明则留给读者了。

二. 完美安全的密钥与消息空间

一个密码方案可以抽象成如下三个算法:

Gen,Enc,Dec

如果说该密码方案是完美安全的,他的消息空间为M,密钥空间为K,那么一定可得:

|K|\geq |M|

证明:

此处我们利用反证法。也就是证明,如果|K|<|M|,那么该方案一定不是完美安全的。

首先假定|K|<|M|。

不妨假设明文在M上是均匀分布的。从密文空间C中选择一个密文c,并且该密文的概率不为0,也就是:

c\in C

对于该密文c来讲,使用不同的密钥k可能会得到不同的明文。我们将所有的可能性形成一个集合称之为M(c),如下:

并不是每个密钥解密都有效,所以很容易可得该集合的空间小于等于密钥的空间,注意包含等于号就是恰好每个密钥都有效,那么可得:

|M(c)|\leq|K|

大家可以把该过程的解密算法看成是确定性算法(deterministic)。

根据我们的条件假设,密钥空间小于明文空间,也就是|K|<|M|,那么必然存在一部分的明文不在该集合中,也就是:

m'\in M\quad m'\notin M(c)

所以可得:

该概率代表已知密文c,不可能会解密得到m',因为你已经尝试了所有的密钥。

但是m'在明文空间中是有概率的,也就可以得到:

从敌手的角度来讲,这就是泄露的信息。在已知密文情况下,明文的信息被泄露了一部分。所以很明显该方案不是完美安全的。

三. 完美安全的密钥长度

以上讨论告诉我们,完美安全不能无限降低密钥的长度,也可以将其看成完美安全的局限性。当然,现如今总是会出现一些非密码学的文章解释说设计出了一个新的加密方案,方案是无法攻破的,并且实现了类似一次一密的安全性,而且密钥的长度还小于明文的长度。很明显这类说法要么就是非严格密码学的局外人,要么就是方案本身是错的。

四. 最优的完美安全方案

在香农(Shannon)对完美安全的解释工作中,他指出密钥生成算法Gen要从所有可能的密钥中均匀输出密钥,就像一次一密方案。对于任意的明文m和密文c,都会存在唯一的密钥来匹配m和c,这个和一次一密方案也很类似。

这些有用的特征都可以用来证明方案的完美安全。换句话说,明文,密文和密钥的尺寸都是相等的,也就是:

|M|=|K|=|C|

在之前的证明中,我们已经严格证明完美安全要求:

|K|\geq |M|

借助映射定理,要想解密算法不出错,则要保证密文空间要大于等于明文空间,也就是:

|C|\geq |M|

通过以上的这些讨论我们不难得出,最优的完美安全方案需要保证:

|M|=|K|=|C|

五. 香农定理

将加密方案表示成:

(Gen,Enc,Dec)

其中消息空间为M,且满足:

|M|=|K|=|C|

那么如果方案满足如下两个条件,则可以说明他是完美安全的:

(1)Gen从密钥空间中输出密钥k,如下:

k\in K

其对应的概率均相等,都为1/|K|

(2)任意选择明文m和密文c,也就是:

m\in M\quad c\in C

都能从密钥空间K中找到对应的密钥k,也就是:

k\in K

使其满足:

Enc_k(m)=c

需要将此处的Enc看成加密算法。

完整形式化的定理如下:

证明该定理:

遵循充分必要条件,该定理需要正向证明和反向证明。

(1)理论分析

首先需要根据给定的两个条件,来证明完美安全。首先观察条件2,因为总存在密钥k将对应的明文m和密文c对应,所以密文c和明文m可能存在任意的对应关系。又因为密钥是唯一存在的,且每个密钥的概率均相等,正如一次一密方案,完美安全则很容易被证明。

接着需要根据完美安全,来解释这两个条件成立。完美安全意味着,对任意的明文m和c都至少存在一个密钥使得他们互相对应,再根据:

|M|=|K|=|C|

可以证明对应的密钥只有唯一性存在,那么就很容易说明每个密钥被选取的概率都是相等的,否则完美安全则不成立。

(2)严格的正向证明

不失一般性,可假设加密算法Enc是确定性的。我们首先需要根据条件1和条件2来证明该密码方案是完美安全的。这个证明过程在此专栏的前面有介绍过。

从密文空间C中选取一个密文c,从明文空间M中选取一个明文m,也就是:

c\in C\quad m\in M

令k代表某唯一的密钥,且满足:

进一步可计算得到:

第一个等号:对应成功的关键在于密钥选择正确

第二个等号:条件1表明

此等式对任意的m和c都是成立的,那么可以直接得出该方案是完美安全的。

(3)严格的反向证明

现在我们已知是完美安全,需要证明条件1和2成立。

选取任意密文:

c\in C

一定会存在对应的明文m*满足:

这也就意味着对任意的明文:

m\in M

其概率均不为0,也就是:

那么进一步我们将明文写成集合的形式:

进一步可得:

接着很容易证明可得。

六. 小结

在网络安全领域,香农定理可用于证明给定的方案是否为完美安全。

相关文章:

【现代密码学基础】详解完美安全与香农定理

目录 一. 介绍 二. 完美安全的密钥与消息空间 三. 完美安全的密钥长度 四. 最优的完美安全方案 五. 香农定理 &#xff08;1&#xff09;理论分析 &#xff08;2&#xff09;严格的正向证明 &#xff08;3&#xff09;严格的反向证明 六. 小结 一. 介绍 一次一密方案…...

Python 将文本转换成语音播放 pyttsx3

Python 将文本转换成语音播放 pyttsx3 目录 Python 将文本转换成语音播放 pyttsx3 1. 安装 2. 使用 3. 封装 Pyttsx3 是一个 Python 库&#xff0c;它提供了文本到语音&#xff08;Text-to-Speech&#xff0c;TTS&#xff09;转换的功能。这个库允许 Python 程序通过调用本…...

FPGA高端项目:Xilinx Artix7系列FPGA 多路视频缩放拼接 工程解决方案 提供4套工程源码+技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案我已有的FPGA视频拼接叠加融合方案本方案的Xilinx Kintex7系列FPGA上的ov5640版本本方案的Xilinx Kintex7系列FPGA上的HDMI版本 3、设计思路框架设计框图…...

开源模型应用落地-业务优化篇(三)

一、前言 假如您跟随我的脚步&#xff0c;学习到上一篇的内容&#xff0c;到这里&#xff0c;相信细心的您&#xff0c;已经发现了&#xff0c;在上一篇中遗留的问题。那就是IM服务过载的时候&#xff0c;如何进行水平扩容&#xff1f; 因为在每个IM服务中&#xff0c;我们用JV…...

基于SpringBoot+Vue实现的物流快递仓库管理系统

基于SpringBootVue实现的物流快递仓库管理系统 文章目录 基于SpringBootVue实现的物流快递仓库管理系统系统介绍技术选型成果展示账号地址及其他说明源码获取 系统介绍 系统演示 关注视频号【全栈小白】&#xff0c;观看演示视频 基于SpringBootVue实现的物流快递仓库管理系…...

编程笔记 html5cssjs 072 JavaScrip BigInt数据类型

编程笔记 html5&css&js 072 JavaScrip BigInt数据类型 一、BigInt 数据类型二、BigInt 的创建和使用三、BigInt 操作与方法三、示例小结 JavaScript BigInt 数据类型是一种内置的数据类型&#xff0c;用于表示大于 Number.MAX_SAFE_INTEGER&#xff08;即2^53 - 1&…...

matlab simulink 步进电机控制

1、内容简介 略 41-可以交流、咨询、答疑 2、内容说明 电动执行器定位控制在生产生活中具有广泛的应用&#xff0c;在使用搭载步进电机的电动执行器进行定位控制的时候&#xff0c;定位系统的定位精度和响应波形&#xff0c;会随着负载质量的变化而变化&#xff0c;这是由电…...

使用阿里云的IDaaS实现知行之桥EDI系统的单点登录

&#xff0c;在开始测试之前&#xff0c;需要确定用哪个信息作为“登陆用户的ID字段”。 这个字段用来在完成SSO登陆之后&#xff0c;用哪个信息将阿里云IDaaS的用户和知行之桥EDI系统的用户做对应。这里我们使用了 phonenumber 这个自定义属性。需要在阿里云做如下配置&#x…...

基于微服务的高考志愿智能辅助决策系统(附源码)

目录 一.引言 1、编写目的 2、系统功能概述 二.功能分析 三.微服务模块 1、微服务用户相关模块 &#xff08;1&#xff09;用户注册 &#xff08;2&#xff09;用户登录 &#xff08;3&#xff09;用户信息管理 &#xff08;4&#xff09;用户操作 2、微服务文件云存…...

LeetCode —— 137. 只出现一次的数字 II

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…...

pnpm、npm、yarn 包管理工具

1、npm 关键词&#xff1a;软件包管理器、命令行工具、一个社区和一个平台 npm&#xff08;Node Package Manager&#xff09;是一个用于Node.js环境的软件包管理器。它是一个命令行工具&#xff0c;用于安装、升级、删除和管理JavaScript软件包。npm最初是随同Node.js一起发布…...

微服务知识

1、概念 大型单体应用拆分成多个独立部署运行的微服务&#xff08;解决并发问题&#xff09;​​​​​​​ 2、特点 3、技术栈 4、微服务带来的问题 ​​​​​​​ 5、微服务的注册中心 服务注册与发现&#xff1a;微服务实例在启动时会向注册中心注册自己的信息&#xf…...

如何在微信搭建私域流量池?

A: ①给客户打标签 添加标签&#xff0c;多维度构建用户画像&#xff0c;精准发送消息。 ②群发信息 选择自定义时间&#xff0c;上传内容 (支持文字&#xff0c;图片) &#xff0c;一键群发 。 ③建立专属素材库 将常用的话术、图片与文件录入至素材库&#xff0c;员工可随…...

MySQL原理(三)锁定机制(1)综述

一、介绍&#xff1a; 1、锁的本质 业务场景中存在共享资源&#xff0c;多个进程或线程需要竞争获取并处理共享资源&#xff0c;为了保证公平、可靠、结果正确等业务逻辑&#xff0c;要把并发执行的问题变为串行&#xff0c;串行时引入第三方锁当成谁有权限来操作共享资源的判…...

Qt知识点总结

将枚举类型转换为字符串 这里使用的在网络编程中&#xff0c;获取socket状态并显示的时候&#xff0c;遇到的一个问题 #include <QMetaEnum>// 将枚举类型转换为字符串 QMetaEnum metaEnum QMetaEnum::fromType<QAbstractSocket::SocketState>(); const char *c…...

什么是系统工程(字幕)13

0 00:00:00,670 --> 00:00:01,582 如果不加图 1 00:00:01,582 --> 00:00:02,130 怎么加 2 00:00:02,130 --> 00:00:03,225 我们来看一下 3 00:00:03,225 --> 00:00:03,590 你看 4 00:00:03,980 --> 00:00:06,720 右键点这个&#xff0c;添加元素 5 00:00:0…...

qt学习:Table widget控件

目录 头文件 实战 重新配置ui界面 添加头文件 在构造函数中添加初始化 显示方法 该实例是在sqlite项目上添加qt学习&#xff1a;QTSQL连接sqlite数据库增删改查-CSDN博客 头文件 #include <QTableWidgetItem> 实战 重新配置ui界面 用法介绍&#xff0c;可以双击…...

Android --- Content Provider是使用示例,通俗易懂

当两个应用程序之间需要共享数据时&#xff0c;可以通过 Content Provider 来实现。在这个示例中&#xff0c;我们将创建一个简单的 Content Provider&#xff0c;让 App_B 暴露人口总数的数据&#xff0c;并由 App_A 来获取这个数据。 首先&#xff0c;我们来创建一个简单的示…...

02-opencv简单实例效果和基本介绍-上

机器视觉概述 机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素…...

中科大计网学习记录笔记(一):Internet | 网络边缘

计算机网络 前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面…...

Shell脚本——免交互

目录 一、Here Document免交互 1、免交互概述 2、语法格式 2.1示例&#xff1a;免交互方式实现对行数的统计&#xff0c;将要统计的内容置于标记EOF之间&#xff0c;直接将内容传给wc-l来统计 3、变量设定 ①变量图换成实际值 ②整行内容作为变量并输出结果 ③使输出内…...

【数据分享】1929-2023年全球站点的逐月最高气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…...

CentOS gui 图形界面显示文字乱码

一、现象 CentOS&#xff08;CentOS 7.5&#xff09;控制台下显示中文乱码&#xff1a; 或者通过X11 Forwarding远程显示CentOS的图形化程序文字乱码&#xff1a; 二、解决方法 安装中文语言包&#xff1a; yum install kde-l10n-Chinese 注&#xff1a;网上有些文章会推荐安…...

[Vue入门]Vue的使用:vue对象+data+el+插值表达式

总结性内容: 1.想让Vue工作,就必须创建一个Vue的实例,而且要传入一个配置对象 2.root容器中的代码依然符合html规范,只不过混入了一些特殊的Vue语法 3.root容器里的代码被称为Vue模板 <!DOCtype html> <html><head><meta charset"UTF-8">&l…...

Tomcat运维

目录 一、Tomcat简介 二、系统环境说明 1、关闭防火墙&#xff0c;selinux 2、安装JDK 3、安装Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2、webapps目录介绍 3、Tomcat配置介绍&#xff08;conf&#xff09; 4、Tomcat的管理 四、Tomcat 配置管理页面(了解) …...

前端开发基于Qunee绘制网络拓扑图总结-02

1、渲染连线颜色 *关键函数一定要调用&#xff1a;graph.invalidate()* graph.forEach(function(element) {if (element instanceof Q.Edge) {let arr [#549BF1, #AA8A6E, #8F54F1,#5A70BC,#BCBF5C, #BC5A76, #67B4D4,#B4C9EF, #676AD4, #A86EAA,#5CBF7F, #EFB4B4];let inde…...

牛客——中位数图(连续子数组和二维前缀和)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 给出1~n的一个排列&#xff0c;统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后&#xff0c;位于中间的数。 输入描述: 第一行为两个正…...

Java:搭建eladmin复习mvn、springboot、vue等

目录 1.源码平台后端&#xff1a; 2.源码平台前端&#xff1a; 3.操作系统&#xff1a;centos7.9 4.mysql:5.7.x 安装 5.redis:5.0.X 6.maven&#xff1a;3.8 7.java:1.8&#xff1a; 8.nodejs:16.x 9.通过mvn打包eladmin后端 10.npm打包前端项目进行部署 11.访问测试…...

JavaScript入门

第二个知识点&#xff1a;javascript的基本语法 定义变量 在JavaScript里面&#xff0c;没有int&#xff0c;string 之类的数据类型&#xff0c;只有 var var num 1; var string "天玄地号"; 在javascript中&#xff0c;写完一句语句之后可以不加分号&#xff…...

Redis单机-主从集群-哨兵集群-分片集群 搭建教程

Redis集群 本章是基于CentOS7下的Redis集群教程&#xff0c;包括&#xff1a; 单机安装RedisRedis主从Redis分片集群 1.单机安装Redis 首先需要安装Redis所需要的依赖&#xff1a; yum install -y gcc tclredis-6.2.4.tar.gz 然后将Redis安装包上传到虚拟机的任意目录&am…...