密码系统的安全性

1,评估密码系统安全性主要有三种方法:

(1)无条件安全性

这种评价方法考虑的是假定攻击者拥有无限的计算资源,但仍然无法破译该密码系统。

(2)计算安全性

这种方法是指使用目前最好的方法攻破它所需要的计算远远超出攻击者的计算资源水平,则可以定义这个密码体制是安全的。

(3)可证明安全性

这种方法是将密码系统的安全性归结为某个经过深入研究的数学难题(如大整数素因子分解、计算离散对数等),数学难题被证明求解困难。这种评估方法存在的问题是它只说明了这个密码方法的安全性与某个困难问题相关,没有完全证明问题本身的安全性,并给出它们的等价性证明。

2,实际安全性

对于实际应用中的密码系统而言,由于至少存在一种破译方法,即强力攻击法,因此都不能满足无条件安全性,只提供计算安全性。密码系统要达到实际安全性,就要满足以下准则:
(1)破译该密码系统的实际计算量(包括计算时间或费用)十分巨大,以致于在实际上是无法实现的。
(2)破译该密码系统所需要的计算时间超过被加密信息有用的生命周期。例如,战争中发起战斗攻击的作战命令只需要在战斗打响前需要保密;重要新闻消息在公开报道前需要保密的时间往往也只有几个小时。
(3)破译该密码系统的费用超过被加密信息本身的价值。
如果一个密码系统能够满足以上准则之一,就可以认为是满足实际安全性的。

3,可证明安全性

3.1 可证明安全性体系的三大要素

在可证明安全体系中,有三大要素:安全模型,安全性定义和困难性问题。
安全模型分为安全目标和敌手能力。安全目标描述了安全模型要达到什么程度的安全,例如,对于加密算法的不可区分性(Indistinguishablity 简称 IND)、对于签名算法的存在性不可伪造(Existable Unforgeble 简称 EU)等。

其中不可区分性(IND)也称为语义安全(Semantic scurity),其定义如下。敌手即使获得了密文,也不能得到其对应明文的任何信息,哪怕是 1bit 的信息。其形式化的表示方法为:已知 m0,m1以及 Cb=Enc(pk,mb),其中 m0是 m0或 m1中的任意一个,即 Cb是 m0、m1其中之一的密文,敌手无法有效判断加密过程中 b 到底是 0 还是 1。

3.2 安全性定义

刻画敌手的能力,主要有四类,选择明文攻击(Chosen Plaintext Attacke 简称 CPA)、选择密文攻击(Chosen Ciphertext Attack 简称 CCA)、惟密文攻击(Ciphertext-Only Attack)、已知明文攻击(Known Plaintext Attack)。常用的刻画敌手能力是前面两类,选择明文攻击(CPA)是指由敌手选择明文并且可以得到对应的密文。选择密文攻击(CCA)是指敌手不仅可以选择明文获得密文,还能选择有限次的密文,获得对应的明文。CCA比 CPA 描述敌手的能力更强。

下面介绍一下常用的安全性定义。

CPA 安全。我们把选择明文攻击(CPA)描述成一个游戏以方便我们更好的理解。首先声明一点,这个游戏的目的是在选择明文攻击的前提下攻破系统的不可区分性(Indistinguishablity),所以下面简称这个游戏为 IND-CPA。其次,还要定义两个角色挑战者 C 和敌手 A。挑战者(challenger)的任务相当裁判,主持游戏并且对敌手的行为进行反馈。敌手顾名思义,就是去攻击当前系统,而且对于这个游戏来说是采用选择明文攻击的方法进行攻击。游戏的描述如下:

A. 初始化:挑战者 C 创建 IND-CPA 系统,并且将公钥发送给敌手 A。

B. 敌手 A 选择两个长度相同的明文 m0,m1发送给挑战者 C。挑战者 C 随机选择 b∈{0,1},并将 mb加密记作 cb,然后将密文cb发送给敌手 A。

C. 敌手 A 猜测挑战者 C 上一步进行加密的明文是 m0还是 m1,并且将猜测结果输出,输出结果记为 b‘。若 b‘=b,那么敌手攻击成功。

敌手攻击的优势可以定义为如下函数:

在这里插入图片描述

其中 w 是加密方案密钥的长度。因为随机猜测就有 1/2 的概率赢得 IND-CPA 游戏。所以

在这里插入图片描述

才是敌手经过努力得到的优势。如果对任何多项式时间的敌手 A,存在一个可忽略的优势σ,使得

在这里插入图片描述

那么就称这个加密算法在选择明文攻击下具有不可区分性,或者称为 IND-CPA 安全。

3.3 困难问题

有了安全模型和安全性定义,通常使用规约到困难问题的方法来进行安全性证明。密码学中常用的困难问题有离散对数困难问题(discrete logarithm problem,简称 DLP)、CDH 问题(Computational Diffie-Hellman) 、DDH 问题(Decisional Diffie-Hellman)以及 BDH 问题(Bilinear Diffie-Hellman)。

The Discrete Logarithm Problem(DLP)
在这里插入图片描述

The Computational Diffie-Hellman Problem(CDH)
在这里插入图片描述

The Decisional Diffie-Hellman Problem (DDH)
在这里插入图片描述

3.4 可证明安全性理论

有了前面叙述了安全模型,安全性定义,困难性问题,可证有了前面叙述了安全模型,安全性定义,困难性问题,可证明安全体系也变得可行。可证明安全性是指利用“规约”的方法,将攻击密码算法或安全协议的方法规约到一个攻击困难问题上。首先确定加密体制的安全目标,如签名体制的安全目标是签名的不可伪造性(Existable Unforgeble),加密体制的安全目标是信息的不可区分性(Indistinguishablity)。然后根据安全性定义确定敌手的能力构建一个安全性模型。

规约是复杂性理论中的概念, 一个问题P1规约到问题P2是指,已知解决问题 P1的算法 M1,我们能构造另一算法 M2,M2可以以 M1作为子程序,用来解决问题 P2。

将规约的方法应用在密码算法或安全协议的安全性证明上,例如,可以将敌手对密码算法或安全协议(P1)的攻击规约到一些已经得到深入研究的困难问题(P2)。即若敌手能够对算法或协议发起有效的攻击,就可以利用敌手构建一个算法来攻破困难问题,然而困难问题是已经被证明无法攻破的,这样就出现矛盾。根据反证法,敌手可以攻破算法或协议假设不成立,证明完毕。

一般来说,为了证明方案 1 的安全性,我们可以将方案 1 规约到方案 2,即如果敌手 A 可以攻破方案 1,那么敌手 B 同样也可以攻击方案 2,而方案 2 已经被证明是安全的,或者是一个难题。

证明过程通过一个思维游戏来描述。首先,挑战者创建方案2,B 表示方案 2 中的敌手,A 表示方案 1 中的敌手。B 为了攻破方案 2,利用 A 作为子程序来攻击方案 1。B 想要利用 A,就需要对 A 进行训练,所以 B 模拟了 A 的挑战者。

在这里插入图片描述
例如,如果要对加密算法进行安全性证明,那么方案 1 就是具 体 的 加 密 算 法 。 假 设 安 全 目 标 是 信 息 的 不 可 区 分 性(Indistinguishablity),敌手 A 的能力是可以选择明文攻击,即 CPA。敌手 B 模拟敌手 A 的挑战者,与 A 进行 IND-CPA 游戏。在游戏过程中,B 为了实现自己的目的利用 A。如果 A 无法判断自己是与 B 还是与挑战者做游戏,那么称 B 的模拟是完备的。

对于其他加密算法或加密协议,我们必须首先确定它想要实现的安全目标,例如签名方案的不可伪造性,然后根据安全性定义确定敌手的能力构建一个安全性模型,再把对加密算法或加密协议的攻击规约到已被证明的困难问题上。 这就是可证明安全性。

结语:可证明安全性理论是密码学理论与计算复杂性理论的一次完美结合,也是现代密码学的基石。在过去的 30 年终,现代密码学最大的突破就是把密码学体系建立在计算复杂理论上,这使得密码学从一门艺术发展成为一门严谨的学科。

转载链接:https://www.cnblogs.com/xdyixia/p/11610091.html
参考链接:https://www.cnblogs.com/zhuowangy2k/p/11901028.html

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

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

相关文章

java学习(135):map中泛型使用

定义一个员工类 public class Employee {private String name;private String ags;public void setName(String name) {this.name name;}public String getName() {return name;}public void setAgs(String ags) {this.ags ags;}public String getAgs() {return ags;} }定义…

java两种绑定方式_Javascript绑定事件的两种方式的区别

命名函数function check(){//code}匿名函数window.onload function(){//先获取元素对象,再绑定事件,绑定的是匿名函数不可重用var btn document.getElementById("btn");btn.onclick function(){//code}}以前一直以为两种方式的区别不大&…

前端基础_认识前端.md

前端学习 前端学习路线学习网站 菜鸟驿站慕课网freeCOdeCampw3schooltry8在线编辑 codepenjsfiddlethecodeplayer其他网站 cssfilterscssstats极客学院搭建个人博客wordpress博客园网站检查规范How to learn webTobe continue... 学习准备 查看浏览器占有的市场份额 查看浏览器…

[剑指offer][JAVA][第62题][约瑟夫环][LinkedList vs ArrayList]

【问题描述】 面试题62. 圆圈中最后剩下的数字 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第…

java创建两个foo方法_Java类实例化原理 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...

Java对象的创建过程包括类初始化(类实例化两个阶段。一、Java对象创建时机(1)使用new关键字创建对象(2)反射创建对象使用Class类的newInstance方法Student student2 (Student)Class.forName("Student类全限定名").newInstance();使用Constructor类的newI…

java学习(136):带泛型的类

SuppressWarnings("all") public class GJClass<T> {public String getClassName(T t){return t.getClass().getName();} } 测试类 public class test76 {public static void main(String[] args){GJClass gjClassnew GJClass();String classNamegjClass.get…

如何往eclipse中导入maven项目

现在公司中大部分项目可能都是使用maven来构建&#xff0c;假如现在摆在你面前有一个maven的项目&#xff0c;如果你要学习它&#xff0c;如何将它导入到像eclipse这样的集成开发工具中呢&#xff0c;以项目public_class_1为例&#xff1a; 1.在eclipse的工作界面的最左侧&…

[Leetcode][JAVA][第912题][排序算法]

【问题描述】 给你一个整数数组 nums&#xff0c;将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5]【解答思路】 1.插入排序&#xff08;熟悉&#xff09; 每次将一个数字插入一个有序的数组里&#xff0c;成为一个长度更…

java 调用r语言包传参数_Java与R语言的配置,调用

我是最近才接触到了R语言&#xff0c;所以用起来有很多的问题&#xff0c;之前只是想单纯想用java调用到R语言中的一些东西&#xff0c;没有想到这个事情并不是想象的那么简单的。好了&#xff0c;闲话不多说&#xff0c;下面我来说说我在运用R的时候遇上的问题吧。第一步&…

玩转oracle 11g(42):增加表空间

--查询表空间 select t.tablespace_name, d.file_name, d.autoextensible, d.maxbytes, d.status from dba_tablespaces t, dba_data_files d where t.tablespace_name d.tablespace_name order by tablespace_name.file_name; --增加表空间 AL…

php下载文件添加header响应头

header(Content-type:application/octet-stream);header(Content-Disposition:attachment;filename".basename($file).");header(Content-Length:.filesize($file));readfile($file);转载于:https://www.cnblogs.com/jielin/p/10203140.html

[Leetcode][JAVA][第1111题][栈思想]

【问题描述】 有效括号字符串 定义&#xff1a;对于每个左括号&#xff0c;都能找到与之对应的右括号&#xff0c;反之亦然。详情参见题末「有效括号字符串」部分。嵌套深度 depth 定义&#xff1a;即有效括号字符串嵌套的层数&#xff0c;depth(A) 表示有效括号字符串 A 的嵌…

玩转oracle 11g(43):oracle导出空表

因为11G数据库在CREATE表后数据库不会立刻给该表分配物理存储空间&#xff0c;所以导出数据库的时候自然而然不会导出该表。 解决方案&#xff1a;在导出表服务器上找出所有数据为空的表&#xff0c;批处理的给没有数据行的数据表分配存储空间。 方法1.此为分步骤执行&#x…

分类器交叉验证java_使用交叉验证的KNN分类器

首先&#xff0c;您需要准确定义您的任务 . F.ex给出R ^(MxN)中的图像I&#xff0c;我们希望将I分类为包含面部的图像或没有面部的图像 .我经常使用像素分类器&#xff0c;其任务类似于&#xff1a;对于图像&#xff0c;我决定每个像素是面像素还是非面像素 .定义任务的一个重要…

Python——assert(断言函数)

一、断言函数的作用 python assert断言是声明其布尔值必须为真的判定&#xff0c;如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not&#xff0c;用来测试表示式&#xff0c;其返回值为假&#xff0c;就会触发异常。 二、常用格式 assert 11  assert 222*…

[Leetcode][JAVA][第20题][Stack][Map]

【问题描述】 20. 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串&#xff0c;判断字符串是否有效。有效字符串需满足&#xff1a;左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可…

java学习(137):java异常初识

//java异常初识 public class test78 {public static void main(String[] args) {countArraylength( -1 );}public static int countArraylength(int length) {int[] nums new int[length];return nums.length;} } 运行结果

Java如何随机出石头剪刀布_JAVA编程实现石头剪刀布

我不是焊工import java.util.Scanner;public class Jsb {public static void main(String[] args) {while (true) {result(input(), random());System.out.println("");}}public static int input() {System.out.println("请输入&#xff1a;1-剪刀&#xff0c;…

java学习(138):异常处理

//异常 public class test79 {//定义方法声明定义异常&#xff0c;在满足条件时抛出异常对象&#xff0c;程序转向异常处理public double count(double n,double m)throws Exception {if (m 0) {//如果除数等于0.则抛出异常实例throw new Exception("对不起。除数不能等…

[Java]中[this][super]用法总结

this this是自身的一个对象&#xff0c;代表对象本身&#xff0c;可以理解为&#xff1a;指向对象本身的一个指针。 this的用法在java中大体可以分为3种&#xff1a; 1.普通的直接引用 这种就不用讲了&#xff0c;this相当于是指向当前对象本身。 2.形参与成员名字重名&am…