作为非密码学家,我总是感到一件事:使用素数为什么如此重要?是什么使它们在密码学上如此特别?
有人有简单的简短解释吗?(我知道有很多入门书籍,而《应用密码学》是圣经,但正如我所说:我不是要实现自己的密码算法,而我发现的东西却使我的大脑爆炸了-没有10页的数学公式请 :))
感谢您提供所有答案。我已经接受了使我最清楚实际概念的那个。
a * b = 91
。现在,解决:13 * 7 = x
。第二个方程式求解起来更快(对于人或计算机)。
作为非密码学家,我总是感到一件事:使用素数为什么如此重要?是什么使它们在密码学上如此特别?
有人有简单的简短解释吗?(我知道有很多入门书籍,而《应用密码学》是圣经,但正如我所说:我不是要实现自己的密码算法,而我发现的东西却使我的大脑爆炸了-没有10页的数学公式请 :))
感谢您提供所有答案。我已经接受了使我最清楚实际概念的那个。
a * b = 91
。现在,解决:13 * 7 = x
。第二个方程式求解起来更快(对于人或计算机)。
Answers:
最基本和一般的解释:密码学全都与数论有关,所有整数(0和1除外)都由质数组成,因此您在数论中处理质数很多。
更具体地说,一些重要的密码算法(例如RSA)严重依赖于以下事实:大量的素数分解需要很长时间。基本上,您有一个“公用密钥”,由两个用于加密消息的大素数组成;另一个“秘密密钥”,由两个用于加密消息的素数组成。您可以将公钥公开,每个人都可以使用它来加密给您的消息,但是只有您知道主要因素并可以解密消息。考虑到当前数论的最新水平,其他所有人都必须考虑这个数,这花了太长时间才实用。
简单?对。
如果将两个大质数相乘,则只有两个(大)质数会得到一个巨大的非质数。
将该数字分解是一项不平凡的操作,并且这一事实是许多密码算法的来源。有关更多信息,请参见单向功能。
附录:更多解释。两个质数的乘积可以用作公钥,而质数本身可以用作私钥。只能通过知道两个因素之一来对数据进行的任何操作对解密来说都是不平凡的。
重要的不是素数本身,而是与素数一起工作的算法。特别是,找到一个数(任意数)的因子。
如您所知,任何数字至少都有两个因素。质数具有独特的属性,因为它们恰好具有两个因素:1和自身。
原因分解是如此重要,是数学家和计算机科学家不简单尝试每种可能的组合就不知道如何分解数字。也就是说,首先尝试除以2,然后除以3,再除以4,依此类推。如果尝试分解质数(尤其是很大的质数),则必须(基本上)尝试2到该较大质数之间的每个可能数。即使在最快的计算机上,也要花费数年(甚至几个世纪)来考虑密码学中使用的素数的种类。
事实是,我们不知道如何有效地分解大量数据,这使得密码算法无处不在。如果某一天有人弄清楚该怎么做,那么我们当前使用的所有加密算法都将过时。这仍然是一个开放的研究领域。
n
的不是素数&n = a * b
。如果a > sqrt(n)
,则b
必须较小,反之亦然,否则a * b > n
本身将否定我们的最初主张。因此,要检查素数,我们只检查直到sqrt。
因为没有人知道将整数分解为素数的快速算法。但是,检查一组素数是否乘以某个整数非常容易。
有一些很好的资源可以增加加密货币。这是一个:
从该页面:
在由Ron Rivest,Adi Shamir和Len Adleman于1977年发明的最常用的公钥密码系统中,公钥和私钥都是根据一个相对简单的数学公式从一对大质数中得出的。从理论上讲,通过向后计算公式可以从公共密钥派生私人密钥。但是,只有大质数的乘积才是公共的,并且将如此大小的数字分解为质数非常困难,以至于即使世界上功能最强大的超级计算机也无法破解普通的公钥。
布鲁斯·施耐尔(Bruce Schneier)的书《应用密码学》是另一本。我强烈推荐那本书;阅读很有趣。
我不是数学家或神秘主义者,所以这是外行人的外在观察(没有花哨的方程式,很抱歉)。
整个线程充满了关于如何在密码学中使用素数的解释,很难在该线程中找到任何人以简单的方式解释为什么使用素数的解释...最有可能的原因是,每个人都认为这是理所当然的。
仅从外部看问题会产生类似的反应。但是如果他们使用两个素数之和,为什么不创建任何两个素数可以生成的所有可能和的列表?
在此站点上,有455,042,511个素数的列表,其中最高素数为9,987,500,000(10位数字)。
已知的最大质数(截至2015年2月)是257,885,161 − 1的幂,即17,425,170个数字。
这意味着没有必要列出所有已知质数的列表,更不用说所有可能的和了。取一个数字并检查它是否是素数更容易。
计算大素数本身是一项艰巨的任务,因此,反向计算两个已经被密码学家和数学家相乘的素数就足够了 ……今天。
质数主要用于密码术,因为它在确定给定数是否为质数时会花费大量时间。对于黑客来说,如果有任何算法花费大量时间来破坏代码,对他们来说就变得毫无用处