第六个知识点:我们怎么把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 ...
随机推荐
- A Child's History of England.26
CHAPTER 9 ENGLAND UNDER WILLIAM THE SECOND, CALLED RUFUS William the Red, in breathless haste, secur ...
- day04 sersync实时同步和ssh服务
day04 sersync实时同步和ssh服务 sersync实时同步 1.什么是实时同步 实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器. 2.为什么使 ...
- Ecshop 安装
参考 http://www.68ecshop.com/article-617.html ecshop的安装第一步:下载ecshop网店系统正式版安装包 我们可以来ecshop开发中心的官网(www.6 ...
- Templates and Static variables in C++
Function templates and static variables: Each instantiation of function template has its own copy of ...
- Linux:awk与cut命令的区别
结论:awk 以空格为分割域时,是以单个或多个连续的空格为分隔符的;cut则是以单个空格作为分隔符.
- Does compiler create default constructor when we write our own?
In C++, compiler by default creates default constructor for every class. But, if we define our own c ...
- my39_InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析
MySQL InnoDB支持三种行锁定方式: 行锁(Record Lock):锁直接加在索引记录上面,锁住的是key. 间隙锁(Gap Lock): 锁定索引记录间隙,确保索引记录的间隙不变.间隙锁是 ...
- 【Java 基础】Java Map中的Value值如何做到可以为任意类型的值
Occasionally the average developer runs into a situation where he has to map values of arbitrary typ ...
- Springboot集成SpringSecurity
一.Spring security 是什么? Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架. 它提供了一组可以在Spring应用上 ...
- WPF 引用第三方库的控件在设计器加上设计时数据和属性
本文告诉大家如何在 VisualStudio 2022 的 XAML 设计器中,在设计时给第三方控件加上设计用的属性和数据的方法 此功能要求使用不低于 VisualStudio 2019 的 16.8 ...