对于质数存储密码的消息或者文章,大家肯定都听过或者看过。这样一种算法被广泛应用在网站、app等产品的登陆密码或者安全密钥的存储。
当然相似的算法还有很多,这样的算法有一个共同的特点——可顺不可逆。这也使这种算法在人们的生活中必不可少的原因。
咱们举一个小例子,以Flog为例:
与你的密码相关的人与机器只有4个:你、站长同志、Flog服务器和你平时用来登陆的浏览器。现在你们处于这个状态:
- 你知道你的密码,因此在不更改密码的情况下,能用密码(常规方式)登陆你的账号的人只有你一个人。
- 站长的手里有数据库。但是在数据库中存储的密码都是加密值。且不说站长不一定知道密码的加密方式,就算他知道了,对于一个“不可逆的算法”,他什么办法都没有。
- 想攻入服务器的人无法通过数据库获得你的密码,因此他只能用别的方法(后面我会说)。
- 你的浏览器可能会代替你记住你的密码,但是即使是高效率的机器也无法获得加密方式和他人的密码。
因此,在这样的状态下,只要防御设施做的足够(这一点不用担心),你的账号是相对安全的,因为只有你能登录。
而能轻易攻入你的账号的人,很明显只有站长(而不是对你图谋不轨的人)。
那么这和质因数分解有什么关系?有一定的关系吧。咱们来看下面一个算法:
- 先从你的密码分别用两种方式推导出独一无二的超大质数A和B。
- 将A和B相乘,返回加密值。
- 将加密值存储。
加密值好攻破吗?如果这种东西两三分钟就能反推你的密码,这种算法就不会闻名于世了。
咱再举一个例子:
你和张三之间有一个小秘密,你一定要告诉他不能说出来。不幸的是,李四非常想知道这个小秘密。
你们俩规定,用一种方式把你们说的话一一变成数字,每个数字加1。
后来李四知道了你们的转码方式,轻松地推出了你们的小秘密。
上面的例子牵扯到一个问题:所有的加密方式是否都有解码?对于常见的加密方法,在理论上都是可解的。
从简单的a+b开始,如果输出一个6,那么最简单的破密方式就是输入3+3对应的值。
如果我们再试试a*b,比如56,很轻易就可以用7*8解决。那么60999531548060898588250772390250112252980067623852665099919641078411942298481呢?你可以试试。这个数在二进制中有256位,如果让你手算五十年都不一定够。
这种数被我们称为RSA数,能用来保护我们的安全的RSA数通常是两个数十位超大质数的乘积。这种数易于获得,却难于解码。
换句话说,在输入密码之后验证时,RSA算法可以在几秒内验证你的密码,但是别人获得你的密码却需要数日甚至数月完成。相似的算法大多都应用了某些数字拥有的相似特点,从而使试图获取密码的人最后得到他梦寐以求的值时,这个值早已失去了意义。只能靠效率低下的试密码来解决问题。
问题又来了:质因数分解真的是无敌的吗?
当然不。
质因数分解的算法只要足够快,在一个可以接受的时间内获取了一个RSA质数的分解结果,这个RSA值就被攻破了。然而,目前的人类技术还远未达到这种水准。
在量子计算机的相关研究中,人类仅仅能够分解143。在未来,以一当亿的量子计算机终将解决该类问题。
我的分享到这里,谢谢朋友们!
This post belongs to Column 「rice0208跳坑记」 .
Itachi
Admin 2021-07-17T10:47:56Z“而能轻易攻入你的账号的人,很明显只有站长(而不是对你图谋不轨的人)”这句话虽然没有语义上的问题,但是怎么总觉得有些奇怪呢?