第六个知识点:我们怎么把NP问题解释成一组可以在多项式内证明的命题
第六个知识点:我们怎么把NP问题解释成一组可以在多项式内证明的命题
原文地址:http://bristolcrypto.blogspot.com/2014/11/52-things-number-6-how-can-we-interpret.html
这是密码学52件事的第六篇,我们继续解释复杂性理论,这篇我们给NP问题另一个定义。(注:就是说这节中,我们把"问题是否为NP的"转换为另一组可以在多项式时间内判定的定理)。
这个问题是紧接着上一周的问题的。上周我们回答了什么是复杂NP类问题。这周我们回答一个相关的问题---我们怎么把NP解释成一组能被多项式时间检查的命题。
现在我们看一个直觉上的"一个问题是NP的"这意味着什么?他不仅仅是一个直观的定义,更是清晰的说明了为什么这类复杂性问题对密码学和世界上其他问题那么重要。现在在我们讨论怎么用之前,我们先给出定义:
NP 是一类能在多项式时间内确定的问题
NP 是存在多项式时间运行的Verifier
这到底啥意思?首先我们有一个元素\(x\),我们想要知道是否\(x \in L\)(\(L\)是NP语言)。我们有一个证明\(P\)对\(x\)输出一个证据\(w\),这可能需要要给多项式时间在给定\(x\)寻找\(w\)。然后如果我们给出\(x\)和\(w\)到我们的验证器\(V\),\(V\)能够在多项式时间内输出是否\(x \in L\)。
我在看到这里的时候以我的知识有点不懂。 这里就是交互式证明系统,限制了交互的时间复杂度。那为什么非要给出一个V,然后给出一个P呢。这个是交互式证明系统定义的一部分。在这种计算模型(交互式证明系统)下,限制一下计算时间,就可以给出了NP问题的定义。 这里我十分推荐读下这节Sipser's Introduction to the Theory of Computation, section 7.3.
这个定义似乎和上一周给出的不同,但是实际上他们是等价的。(Sipser的书中有精确的定义)。非正式的说,他们的等价性是因为\(w\)可以是NDT在每个分支节点做出的决定的序列,这样就从非确定的降级成确定的自动机了。(上面的那节也给出了精确的证明)。
因此为什么这个问题在密码学中那么有用呢?本质上,我们有一类这样的原因,如果你没有witness(凭据?密钥?)可以用指数时间来检查,但是如果你有这个witness那么你就可以用多项式时间来完成。这是很多密码学算法的feel。(23333)。如果你不知道key那么你就很难解密这个消息,如果你知道key那么你很快就能解密出消息。
一个警告:虽然密码学中使用NP问题看起来是个不错的做法。但是它可能不是那么简单。因为NP问题的语言是基于最坏时间的。然而密码学中的算法是基于平均时间的。例如,我们有一种NP语言,一个元素需要指数级的时间求解,其他元素都非常快。这不是好的加密方案。我们希望对所有的消息都是安全的。而不是仅仅一个。
现在我们知道整数因子分解不知道是不是NP完全的,也不知道是不是P类问题。但是它是一个例子。说明我想要说的关于仔细选择NP实例的问题。一般来说,找到一个数的因数很容易。其中一半能被2整除。但是如果我们选择一个特定的我们将会很难分解。让我们集中思路在形式\(N = p * q\)对\(p,q\)素数。现在如果这两个数字有一个很小,那么分解它也是容易的,我们希望这两个数字大小相同。由此我们可以根据这个构建加密方案(RSA)。
[1] Equivalence_of_definitions
第六个知识点:我们怎么把NP问题解释成一组可以在多项式内证明的命题的更多相关文章
- 第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么
第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么 Sigma协议 Sigma协议是Alice想要向Bob证明一些东西的协议(Alice知道一些秘密).他们有下面的一般范式:Al ...
- 第十六个知识点:描述DSA,Schnorr,RSA-FDH的密钥生成,签名和验证
第十六个知识点:描述DSA,Schnorr,RSA-FDH的密钥生成,签名和验证 这是密码学52件事系列中第16篇,这周我们描述关于DSA,Schnorr和RSA-FDH的密钥生成,签名和验证. 1. ...
- 第二十六个知识点:描述NAF标量乘法算法
第二十六个知识点:描述NAF标量乘法算法 NAF标量乘法算法是标量乘法算法的一种增强,该算法使用了非邻接形式(Non-Adjacent Form)表达,减少了算法的期望运行时间.下面是具体细节: 让\ ...
- 第三十六个知识点:Index Calculus算法
第三十六个知识点:Index Calculus算法 我们这篇博客继续描述一种数学攻击,这种数学攻击被叫做Index Calculus(IC)算法. 注意这里Index Calculus算法没有找到合适 ...
- python基础知识第六篇(知识点总结)
####################### 整理 ################# # 一.数字# int(..) # 二.字符串# replace(替换)/find/join/strip(移除 ...
- Cassandra学习六 一些知识点
http://www.flyml.net/2016/09/08/cassandra-tutorial-java-api-example/ Cassandra对查询的支持很弱,只支持主键列及索引列的查询 ...
- SQL Server进阶(六)表表达式--派生表、公用表表达式(CTE)、视图和内联表值函数
概述 表表达式是一种命名的查询表达式,代表一个有效地关系表.可以像其他表一样,在数据处理中使用表表达式. SQL Server支持四种类型的表表达式:派生表,公用表表达式,视图和内联表值函数. 为什么 ...
- Scipy的stats模块包含了多种概率分布的随机变量,随机变量分为连续和离散两种。+忽略程序中警告信息+np.newaxis解释
- linux运维工程师面试题收集
面试必考 mysql5和mysql6 有什么区别 mysql-server-5.5:默认引擎改为Innodb,提高了性能和扩展性,提高实用性(中继日志自动恢复) mysql-server-5.6:In ...
随机推荐
- Yarn 生产环境核心参数配置案例
目录 Yarn 生产环境核心参数配置案例 需求 修改yarn-site.xml配置 分发 重启集群 执行WordCount程序 Yarn 生产环境核心参数配置案例 调整下列参数之前要拍摄Linux快照 ...
- 日常Java 2021/11/13
Java Applet基础 Applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以Applet是一个全功能的Java应用程序.如下所示是独立 ...
- MapReduce的类型与格式
MapReduce的类型 默认的MR作业 默认的mapper是Mapper类,它将输入的键和值原封不动地写到输出中 默认的partitioner是HashPartitioner,它对每条记录的键进行哈 ...
- Linux基础命令---echo打印内容到标准输出
echo echo指令可以输出内容到标准输出,以空白分割字符串,并且后面增加换行. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 ec ...
- javascript将平行的拥有上下级关系的数据转换成树形结构
转换函数 var Littlehow = {}; /** * littlehow 2019-05-15 * 平行数据树形转换器 * @type {{format: tree.format, sort: ...
- SpringBoot的定时任务
springBoot定时任务可分为多线程和单线程,而单线程又分为注解形式,接口形式 1.基于注解形式 基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影 ...
- Thymeleaf+layui+jquery复选框回显
一.Thymeleaf+layui+jquery复选框回显 基于Thymeleaf模板下的layui+jquery复选框回显,主要是jquery.大致意思是:把数组转成JSON传到前台,再在前台转回数 ...
- Redis持久化 aof和rdb的原理配置
目录 一.介绍 二.RDB持久化(全量写入) rdb原理 rdb模式 rdb触发情况 rdb优势和劣势 rdb文件配置 rdb命令配置 rdb数据恢复 三.AOF持久化(增量写入) aof原理 aof ...
- 01-gevent完成多任务
gevent完成多任务 一.原理 gevent实现多任务并不是依靠多进程或是线程,执行的时候只有一个线程,在遇到堵塞的时候去寻找可以执行的代码.本质上是一种协程. 二.代码实现 import geve ...
- [BUUCTF]REVERSE——[MRCTF2020]hello_world_go
[MRCTF2020]hello_world_go 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,有很多,直接检索flag 一个一个点过去,找到了flag 按a,提取 ...