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

news2024/11/16 9:36:16

目录

一. 介绍

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

三. 完美安全的密钥长度

四. 最优的完美安全方案

五. 香农定理

(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,也就是:

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

进一步可得:

接着很容易证明可得。

六. 小结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1415270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正则匹配 | 正则实际应用探索分享

这并不是一篇教正则基础的文章&#xff0c;其正则式不能对您进行使用后的结果负责&#xff0c;请以研究的眼光看待本篇文章。 技术就是懒人为了更好的懒才会想办法搞的东西&#xff0c;我最近因为某些原因需要频繁删除注释 我就想到通过替换的正则功能快速删除文件中的简单注…

Qslog开源库使用

Qslog源码下载地址&#xff1a;https://github.com/victronenergy/QsLog 1.QSLOG使用方式 &#xff08;1&#xff09;源码集成 在你的工程中&#xff0c;直接包含QsLog.pri文件&#xff0c;进行源码集成。当然你也可以包含QsLog.pri后&#xff0c;编译为xx.dll&#xff0c;在…

数据可视化练习

文章目录 试题示例 试题示例 绘制下图所示的表格 根据下表的数据&#xff0c;将班级名称一列作为x轴的刻度标签&#xff0c;将男生和女生两列的数据作为刻度标签对应的数值&#xff0c;使用bar()函数绘制下图所示的柱形图。 方式一 import numpy as np import matplotlib.p…

CUDA编程- - GPU线程的理解 thread,block,grid - 再次学习

GPU线程的理解 thread,block,grid 一、从 cpu 多线程角度理解 gpu 多线程1、cpu 多线程并行加速2、gpu多线程并行加速2.1、cpu 线程与 gpu 线程的理解&#xff08;核函数&#xff09;2.1.1 、第一步&#xff1a;编写核函数2.1.2、第二步&#xff1a;调用核函数&#xff08;使用…

跟着cherno手搓游戏引擎【12】渲染context和首个三角形

渲染上下文&#xff1a; 目的&#xff1a;修改WindowsWindow的结构&#xff0c;把glad抽离出来 WindowsWindow.h:新建m_Context #pragma once #include "YOTO/Window.h" #include <YOTO/Renderer/GraphicsContext.h> #include<GLFW/glfw3.h> #include…

iperf3网络带宽性能测试工具 局域网网络最大带宽高阶教程

iperf3 是一个 TCP, UDP, 和 SCTP (传输层协议)网络带宽测量工具&#xff0c;iperf 是一个用于主动测量 IP 网络上最大可用带宽的工具. 它支持与时间、协议和缓冲区相关的各种参数的调优. 对于每个测试&#xff0c;它报告测量的吞吐量/比特率(带宽), 丢包率和其他参数&#xff…

MySQL 覆盖索引

目录 一、什么是索引 二、索引的有哪些种类&#xff1f; 三、InnoDB的不同的索引组织结构是怎样的呢&#xff1f; 四、什么是覆盖索引 五、如何使用是覆盖索引&#xff1f; 六、如何确定数据库成功使用了覆盖索引呢 总结&#xff1a; 一、什么是索引 索引&#xff08;在 …

Log4j2-01-log4j2 hello world 入门使用

拓展阅读 Log4j2 系统学习 Logback 系统学习 Slf4j Slf4j-02-slf4j 与 logback 整合 SLF4j MDC-日志添加唯一标识 分布式链路追踪-05-mdc 等信息如何跨线程? Log4j2 与 logback 的实现方式 日志开源组件&#xff08;一&#xff09;java 注解结合 spring aop 实现自动输…

openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板

文章目录 openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板概述笔记工程中需要的openssl的库实现END openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板 概述 openssl3.2 - 测试程序的学习 整了几个test.c, 每开一个新的测试工程, 总要改这改那的. …

【RH850U2A芯片】Reset Vector和Interrupt Vector介绍

目录 前言 正文 1. 什么是Reset Vector 1.1 S32K144芯片的Reset Vector 1.2 RH850芯片的Reset Vector 2. 什么是Interrupt Vector 2.1 S32K144芯片的Interrupt Vector 2.2 RH850芯片的Interrupt Vector 3. Reset Vector等价于Interrupt Vector吗 4. 总结 前言 最近在…

uniapp微信小程序-input默认字的样式

需要的是这样的 问题 正常是在input框上面写样式就行&#xff0c;但是uniapp不起作用 解决 直接在input上写placeholder-style"color就解决了 <input class"findInput" type"text" placeholder"关键词查询"placeholder-style"co…

微信小程序-04

rpx&#xff08;responsive pixel&#xff09;是微信小程序独有的&#xff0c;用来解决屏适配的尺寸单位。 import 后跟需要导入的外联样式表的相对路径&#xff0c;用 ; 表示语句结束。 定义在 app.wxss 中的样式为全局样式&#xff0c;作用于每一个页面。 在页面的 .wxss 文…

第九篇 华为云Iot SDK的简单应用

第九篇 华为云Iot SDK的简单应用 一、华为云Iot SDK API的简单使用 1.初始化SDK 2.绑定连接配置信息 3.连接服务器 4.上报属性 5.接收命令 二、实现智能家居灯光状态上报 &#x1f516;以下是上报数据到华为云Iot的代码片段&#xff0c;配合串口控制灯光&#xff0c;改变灯…

DolphinDB学习(2):增删改查数据表(分布式表的基本操作)

文章目录 创建数据表1. 创建数据表全流程2. 核心&#xff1a;创建table3. 在已有的数据表中追加新的数据 数据表自身的操作1. 查询有哪些数据表2. 删除某张数据表3. 修改数据表的名称 博客里只介绍最常见的分区表&#xff08;createPartitionedTable&#xff09;的创建方法&…

【机器学习笔记】1 线性回归

回归的概念 二分类问题可以用1和0来表示 线性回归&#xff08;Linear Regression&#xff09;的概念 是一种通过属性的线性组合来进行预测的线性模型&#xff0c;其目的是找到一条直线或者一个平面或者更高维的超平面&#xff0c;使得预测值与真实值之间的误差最小化&#x…

Hive3.1.3基础(续)

参考B站尚硅谷 分区表和分桶表 分区表 Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录&#xff0c;每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区&#xff0c;这样的查询效率会提高很多。 分区表基本语法 分区表…

JVM系列-9.性能调优

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理&#x1f525;如果感觉博主的文…

c++ QT 信号的个人理解 信号就是独立文件调用的一种“协议”

一. 简介 就我个人来理解&#xff0c;信号槽机制与Windows下消息机制类似&#xff0c;消息机制是基于回调函数&#xff0c;Qt中用信号与槽来代替函数指针&#xff0c;使程序更安全简洁。 信号和槽机制是 Qt 的核心机制&#xff0c;可以让编程人员将互不相关的对象绑定在一起&a…

JavaEE-自定义SSM-编写核心- my spring bean工厂(IoC、DI)

3.4 my spring bean工厂&#xff08;IoC、DI&#xff09; 加载类解析类获得类 3.4.0 分析 3.4.1 扫描指定包下的所有类 package com.czxy.bean;import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Objects;public class MyBeanFac…

面向Java开发者的ChatGPT提示词工程(11)扩写

什么是扩写&#xff1f; 扩写是指将较短的文本交给GPT生成更长的文本。比如&#xff1a;根据一组基本指令&#xff0c;写出一封完整的电子邮件&#xff1b;或者根据一系列主题&#xff0c;创作出一篇包含这些主题的文章。 这样的技术&#xff0c;有着广阔的应用场景&#xff…