数论的第一次应用
数论是一门研究整数的学科。为什么会有人想要研究整数呢?数论到底能在生活中哪些地方得到应用呢?数论的用处并不是显而易见的。但是数论既然偏离了人类所有的生活轨迹,那为什么会有人研究它呢?
让我们回到1937年的秋天,德国在希特勒的领导下重新武装,世界大战一触即发。此时的图灵和我们一样正思考着数论能在哪些地方被应用。他很快意识到,在战争爆发以后,能否保护盟军之间通过电报传递的密令将成为能否赢得战争的关键。于是,图灵设想,能否通过数论来加密通信呢?这个灵机一动的设想,使数论彻底的融入我们的现代生活中。如今,数论已成为众多公钥密码系统,数字签名方案,密码散列函数和数字现金系统的基础。每一次你在淘宝购物,或者使用支付宝在线支付,你都在使用数论的一些算法。
图灵在设计好他的加密和解密算法后,很快就消失在公众的视野中,直到过了半个世纪之后,人们才逐渐知道图灵当时去了哪里,他在那里做了什么样的工作。我们接下来要通过分析图灵留下的一些手稿,试图重建图灵的计划。对于计划的具体细节,我们是未知的,因为图灵从来没有向外界公布过他的计划,因此我们只是推测图灵当时可能的,合理的想法。
图灵计划第一版
图灵的计划是通过数论来加密信息,那么我们首先假设图灵把这条信息转化为一个素数。这一步并不是真正的加密,只是转化为素数有利于后面的运算,所以这一步并不是至关重要的。一种简单的方法就是将每个字符编码成两位的数字(,等等),然后信息就会转化成一个巨大的整数,然后我们可以在这个整数后面加上必要的数字使其成为一个素数。例如,如果我们编码"victory"这个单词:
v i c t o r y
22 09 03 20 15 18 25 13
我们得到一个素数 ,后面加 是为了使它成为素数。现在我们可以这样加密这个素数,我们用 来代表没有被加密的信息,用 代表加密之后的信息。发送和接收信息的双方事先约定一个非常大的素数 作为密钥。发送方通过下面这个公式来加密 :
接收方通过下面这个公式来解密 :
假设双方约定的密钥是素数 并且需要加密的信息 是’victory’,那么加密后的信息就是:
图灵计划的第一版似乎存在很多问题,我们来分析一下。
- 发送方和接收方怎么能确保 和 是素数呢?
判断一个数是否是素数的古老的问题已经被研究了大概一个世纪了。所以我们有理由相信即使在图灵生活的年代,也已经有较好的算法能解决这一问题。在2002年,Manindra Agrawal, Neeraj Kayal和Nitin Sax- ena提出了一种算法,对于一个整数 ,该算法能保证在 步之内判断 是否是素数。这个算法的发现把素数测试这个问题归类到了相对简单的计算问题。 - 图灵计划是不是安全的呢?
纳粹分子只能看到加密的信息 ,因此解密这个信息需要对 做素因数分解。尽管数学家们付出了巨大的努力,目前还是没有发现高效的素因数分解的算法。也许以后能够有所突破,但是这个问题被认定为本质上难以解决的问题。实际上,我们可以选择远超过当时算力的素数,使敌人根本不可能对其完成素因数分解。因此,我们只要把 和 选择的足够大,纳粹分子应该就无计可施了。
尽管解决了上面那两个问题,图灵计划仍然存在一个巨大的缺陷,你能找到这个缺陷吗?
破解图灵计划第一版
如果我们使用图灵计划用同一个密钥来发送第二条加密消息会怎么样呢?这个时候,纳粹分子手里有两条被加密的信息:
此时 和 的最大公约数就是 ,两个数的最大公约数能很容易的被计算出来。因此只要我们发送了第二条信息,纳粹分子就能解密出我们的密钥和每一条信息!
很难让人相信像图灵这样天才的科学家会忽略掉这么明显的缺陷,唯一合理的解释就是图灵不是用的简单的乘法和除法,他的脑海里应该有另一套运算方法,那就是取模运算!
下一篇我将讲述图灵计划的第二版,以及我基于这个算法的一个简单的实现。
来源:CSDN
作者:陈大豪
链接:https://blog.csdn.net/czhhxx/article/details/103843075