为什么素数在密码学中很重要?


191

作为非密码学家,我总是感到一件事:使用素数为什么如此重要?是什么使它们在密码学上如此特别?

有人有简单的简短解释吗?(我知道有很多入门书籍,而《应用密码学》是圣经,但正如我所说:我不是要实现自己的密码算法,而我发现的东西却使我的大脑爆炸了-没有10页的数学公式请 :))

感谢您提供所有答案。我已经接受了使我最清楚实际概念的那个。


一些观察:1.下面的人提到“大量的素数分解需要很长时间”。实际上,对于任何因式分解都是如此。重要的是,任何整数!= 0都具有作为质数乘积的唯一因式分解(包括1,其分解长度为0)。
TT_

1
2.请检查我的解释为什么质数对哈希函数很重要:stackoverflow.com/questions/1145217/…这与系数属于一个字段的多项式的性质有关(这可能不是简短的解释)。
TT_

2
过于简单的简短说明→解决:a * b = 91。现在,解决:13 * 7 = x。第二个方程式求解起来更快(对于人或计算机)。
Dem Pilafian

Answers:


203

最基本和一般的解释:密码学全都与数论有关,所有整数(0和1除外)都由质数组成,因此您在数论中处理质数很多。

更具体地说,一些重要的密码算法(例如RSA)严重依赖于以下事实:大量的素数分解需要很长时间。基本上,您有一个“公用密钥”,由两个用于加密消息的大素数组成;另一个“秘密密钥”,由两个用于加密消息的素数组成。您可以将公钥公开,每个人都可以使用它来加密给您的消息,但是只有您知道主要因素并可以解密消息。考虑到当前数论的最新水平,其他所有人都必须考虑这个数,这花了太长时间才实用。


7
随着我们进入量子计算时代,似乎应该注意到,使用量子计算机对质数进行因式分解可以在多项式时间内使用Shor的算法 en.wikipedia.org/wiki/Shor%27s_algorithm 进行。解密像RSA这样的公钥加密
stujo

16
@stujo:您高估了量子计算的状态。实际上可以肯定不存在这样的计算机。已使用Shor算法和量子硬件出血前沿的研究工作是21分解人数最多的,这不是21位,但数量21,素因子3和7
迈克尔博格瓦特

1
我不确定当前是什么数据,要获取有关最新工作的信息很棘手,我相信那是在2012年,本文来自2014年(m.phys.org/news/2014-11-largest-factored- Quantum-device.html)我们是否看到过2016年的任何公开数据?不排除可能分类的内容。尽管无法运行Shors算法,但D-Wave现在已超过1000 qbits
stujo

1
@stujo:当所有人都使用Quantum CPU时,将遵循相同的原则,因为质数可以保持增长,这全都在于寻找更大,对于量子CPU不切实际的问题,如果有人使用常规CPUS创建密钥,而有人使用Quantum CPU来存在问题打破那些。据我了解,量子CPU的功能是使用qbit,每个qbit可以有3个值,因此新技术是以3为基数而不是以2为基数。一个64 qbit的CPU在一个单词中将具有3 ^ 64个组合。不知道它如何影响性能。
juanmf

5
@juanmf:您对量子计算的理解是完全错误的。它与拥有3个值绝对无关,这完全是没有意思的。细节非常复杂,但是结果是,某些量子算法可以以比非量子硬件上的“常规”算法低的Big-O复杂度解决问题。
Michael Borgwardt '18

137

简单?对。

如果将两个大质数相乘,则只有两个(大)质数会得到一个巨大的非质数。

将该数字分解是一项不平凡的操作,并且这一事实是许多密码算法的来源。有关更多信息,请参见单向功能

附录:更多解释。两个质数的乘积可以用作公钥,而质数本身可以用作私钥。只能通过知道两个因素之一来对数据进行的任何操作对解密来说都是不平凡的。


2
还值得注意的是,除了因式分解问题外,许多现代加密货币还(或替代地)依赖于离散对数问题。两者都是“单向”功能:很容易获得已知输入并计算出答案,但很难获得答案并计算出这些输入。
nezroy

4
将此解释链接到“单向功能”一词会有所帮助:en.wikipedia.org/wiki/One-way_function
克里斯·康威

但是如果可以使用公共密钥进行加密,为什么不能使用相反的方法呢?
jayarjo

45

这是一个非常简单且常见的示例。

RSA加密算法这是常用的安全电子商务网站使用,是基于这样的事实,很容易采取两种(超大型)的素数和乘他们,而这是非常难做到的对面-意思是:取一给定它只有两个主要因素,并找到它们。


30
仅供参考,将两个素数相乘得到的数字称为半素数。
马修·布鲁贝克

15

重要的不是素数本身,而是与素数一起工作的算法。特别是,找到一个数(任意数)的因子。

如您所知,任何数字至少都有两个因素。质数具有独特的属性,因为它们恰好具有两个因素:1和自身。

原因分解是如此重要,是数学家和计算机科学家不简单尝试每种可能的组合就不知道如何分解数字。也就是说,首先尝试除以2,然后除以3,再除以4,依此类推。如果尝试分解质数(尤其是很大的质数),则必须(基本上)尝试2到该较大质数之间的每个可能数。即使在最快的计算机上,也要花费数年(甚至几个世纪)来考虑密码学中使用的素数的种类。

事实是,我们不知道如何有效地分解大量数据,这使得密码算法无处不在。如果某一天有人弄清楚该怎么做,那么我们当前使用的所有加密算法都将过时。这仍然是一个开放的研究领域。


10
实际上,您只需要测试素数,直到测试因子的平方根即可。
马修·布鲁贝克

3
我知道。我以简单的名义“忽略”了这一细节。
巴里·布朗

@MatthewBrubaker你介意解释为什么吗?我不太了解
Kartik Chugh

4
@KartikChughヅ说n的不是素数&n = a * b。如果a > sqrt(n),则b必须较小,反之亦然,否则a * b > n本身将否定我们的最初主张。因此,要检查素数,我们只检查直到sqrt。
Abhinav Gauniyal

13

因为没有人知道将整数分解为素数的快速算法。但是,检查一组素数是否乘以某个整数非常容易。


1
有趣的是,已经有可能快速找出IF是否为质数。
nes1983

这里缺少“如果主要因素很大”。
Ben Voigt

@本:它不丢失。这个问题通常很难解决。请注意,通常很难解决的问题可能很容易解决。在这种情况下,小素数绝不是唯一容易的情况。
nes1983

2
没有人知道“公开”。世界各国政府的情报机构可能会使用他们不共享的技术。他们雇用了大量的数学毕业生。例如,NSA秘密地通过“ Dual EC_DRBG”促进了随机素数生成,他们知道这很弱,作为公开使用的标准加密方案的一部分。bits.blogs.nytimes.com/2013/09/10/...
唐亮

唐:积雪的文件似乎表明事实并非如此。他们得出了一个非常明确的结论,即(大体上可能会有角落),NSA只能通过他们知道的特殊数学魔术来解密加密的数据。施耐尔广泛讨论了这个问题。
nes1983

12

有一些很好的资源可以增加加密货币。这是一个:

从该页面:

在由Ron Rivest,Adi Shamir和Len Adleman于1977年发明的最常用的公钥密码系统中,公钥和私钥都是根据一个相对简单的数学公式从一对大质数中得出的。从理论上讲,通过向后计算公式可以从公共密钥派生私人密钥。但是,只有大质数的乘积才是公共的,并且将如此大小的数字分解为质数非常困难,以至于即使世界上功能最强大的超级计算机也无法破解普通的公钥。

布鲁斯·施耐尔(Bruce Schneier)的书《应用密码学》是另一本。我强烈推荐那本书;阅读很有趣。


9

为了更具体地说明RSA如何使用质数的属性,RSA算法主要取决于Euler定理,该定理指出,对于相对质数“ a”和“ N”,a ^ e等于1 N,其中e是N 的欧拉上位函数

素数从何而来?要有效地计算N的欧拉函数,需要知道N的素因数分解。在RSA算法的情况下,对于某些质数“ p”和“ q”,N = pq,则e =(p-1)(q -1)= N-p-q +1。但是,如果不知道p和q,则很难计算e。

更抽象地讲,许多低温照相协议使用各种陷门功能,这些功能易于计算但难以反转。数论是此类活板门函数(例如大质数的乘法)的丰富来源,并且质数绝对是数论的核心。


7

我建议读《代码中的数学之旅》一书。这本书具有与众不同的感觉,这令人惊讶,因为它是关于密码学的。这本书总结了莎拉·弗兰纳里(Sarah Flannery)从童年时期学习难题到16岁时创建Cayley-Purser(CP)算法的历程,它给出了关于单向函数,数论和质数以及它们之间的关系的惊人详细解释。密码学。

是什么让本书更加针对您的问题,是Sarah尝试使用矩阵算法实现新的公共密钥算法。这比使用质数要快得多,但是发现了可以利用它的漏洞。事实证明,她的算法最好用作私有加密机制。这本书很好地证明了使用质数进行加密,因为它经受了时间的考验和聪明人的挑战。



6

我不是数学家或神秘主义者,所以这是外行人的外在观察(没有花哨的方程式,很抱歉)。

整个线程充满了关于如何在密码学中使用素数的解释,很难在该线程中找到任何人以简单的方式解释为什么使用素数的解释...最有可能的原因是,每个人都认为这是理所当然的。

仅从外部看问题会产生类似的反应。但是如果他们使用两个素数之和,为什么不创建任何两个素数可以生成的所有可能和的列表?

在此站点上,455,042,511个素数的列表,其中最高素数为9,987,500,00010位数字)。

已知的最大质数(截至2015年2月)是257,885,161 − 1的幂,即17,425,170个数字。

这意味着没有必要列出所有已知质数的列表,更不用说所有可能的和了。取一个数字并检查它是否是素数更容易。

计算大素数本身是一项艰巨的任务,因此,反向计算两个已经被密码学家和数学家相乘的素数就足够了 ……今天。


3
只有您的最后一段真正有效。总数的论点也可以针对任何复合数(存在很大的范围[技术上无限大],所有和的存储都是不可行/愚蠢的)。另外,素数的总和在密码学中没有太大的相关性,更重要的是(通常在RSA的情况下)是它们的乘积。同样,通过反向计算,您可能意味着分解。那可能会帮助您解决那里的问题。
initramfs 2015年

4

密码算法通常出于其安全性而依赖于具有“困难的问题”。大多数现代算法似乎都使用非常大的因数分解作为他们的难题-如果将两个大数相乘,则计算它们的因数“将很困难”(即费时)。如果这两个数字是质数,则只有一个答案,这将使答案更加困难,并且还可以保证,当您找到答案时,它是正确的答案,而不是其他碰巧得出相同结果的答案。


4

我认为是在密码学重要的不是素数本身,而是它是困难因式分解问题

假设您有一个非常大的整数,该整数已知是两个质数m和n的乘积,要找出m和n是不容易的。RSA之类的算法取决于这一事实。

顺便说一句,有一篇关于算法的论文,可以使用量子计算机在可接受的时间内“解决”该素因数分解问题。因此,当量子计算机出现时,新的密码学算法可能不再依赖于素数分解的这种“困难” :)


3

因为分解算法对找到的每个因子都大大加快了速度。将两个私钥设为素数可确保找到的第一个因素也将是最后一个。理想地,两个私钥的值也将几乎相等,因为仅弱密钥的强度很重要。


这对我来说有点多余。较弱的关键部分的一部分,可以对最高答案进行评论:)
Ulysse BN

-1

质数主要用于密码术,因为它在确定给定数是否为质数时会花费大量时间。对于黑客来说,如果有任何算法花费大量时间来破坏代码,对他们来说就变得毫无用处


7
弄清楚数字是否为质数很便宜,我们需要便宜。我们还怎么知道在RSA中选择素数作为我们的素数因子,还是在有限域加密中选择素数作为模数?昂贵的是将大量的综合因素分解为大量的主要因素。
CodesInChaos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.