我不明白可以使用密钥对邮件进行加密,然后如何无法向后工作以“撤消”加密?
#1 楼
计算机科学中有单向函数(未经数学证明,但如果没有其他证明,您将会变得很有名气)。这些功能很容易解决,但很难逆转,例如您很容易在一两分钟内在一张纸上计算569 * 757 * 911 = 392397763
。另一方面,如果我给您392397763
并要求您找到主要因素,您将很难过。现在,如果这些数字确实很大,那么即使是世界上最快的计算机也将无法在合理的时间内逆向分解。 在公共密钥密码学中,这些单向函数以巧妙的方式使用,以允许某人使用公共密钥对某些事物进行加密,但是很难解密生成的消息。您应该阅读Wiki文章RSA cryptosystem。
评论
@AronFoster:我们不知道是否有人。
–贡特拉姆·布洛姆
15年4月22日在16:50
@GuntramBlohm而且我们不知道每个Intel芯片是否都有后门,可以让NSA读取您编写的所有内容。那里存在着无数的风险,在某些情况下,有些事情不太可能发生,因此不值得您集中精力。
–阿伦·福斯特(Aron Foster)
15年4月22日在17:06
这些言论确实超出了问题的范围,这显然是一个初学者的问题。作为律师,我们指出,在实践中一直在使用单向功能时,我们在技术上还没有证明单向功能的存在,这只会使质询者感到困惑,并且没有任何实际价值。因此,这还不够“公平”,您不应该在imo中对其进行编辑。
–托马斯·博尼尼(Thomas Bonini)
15年4月22日在18:38
@AndreasBonini,这将是对孩子撒谎的实例
–sleblanc
15年4月22日在19:22
@AndreasBonini Stack Exchange网站不仅适合提出问题的人。它们也适用于其他遇到相同问题的人。无需故意遗漏细节:只需用简单的术语进行解释(就像卢卡斯所做的那样)。
–石匠
2015年4月23日在22:44
#2 楼
您的问题有点像这样(对汤姆•斯托帕德(Tom Stoppard)道歉):“为什么我可以将果酱搅拌到布丁中,而又不搅拌呢?”一些数学运算一样容易向后做向前。例如,您可以轻松地将100加到一个数上,再减去100就可以了。但是,有些倒数比较难。例如,如果我采用
x
并找到g(x) = a(x^5)+b(x^4)+c(x^3)+d(x^2)+ex+f
,我只需要做简单的乘法和加法。但是要从g(x)
返回x
是困难的(以代数方式),因为对五次方程式没有通用的代数解。目前尚不清楚为什么会出现这种情况(与二次方程相反),但事实并非如此。举一个更合适的例子,如果我告诉您34129和105319都是素数(它们是),您将能够很快得出它们的乘积为3594432151。但是,如果我要您找到3594432151的两个素因, ,您可能会发现难度更大。公共密钥密码学需要一对密钥。通常,私钥为参数提供了一个难以逆向执行的算法(例如,从纯文本到密文),而公钥为参数提供了一种难以逆向执行的算法,在另一个方向上。
所以,您之所以不能向后工作,仅仅是因为该算法的设计使其很难做到这一点。
评论
与其他相比,最佳答案。
–起搏器
2015年5月1日晚上11:09
#3 楼
玩杂耍很容易:您只需要在正确的时间投掷球,这样当球掉落时您就可以腾出手来。一个球或两个球,这是微不足道的。有了三个,这很容易。随着更多的球,(令人惊讶的)它变得更加困难。甚至更加困难。一般而言,使用n位密钥完成的“反向”加密就像玩2n个球一样。随着2048位密钥,这是像32317006071311007300714876688669951960444102669715484032130345427524655138867890893197201411522913463688717960921898019494119559150490921095088152386448283120630877367300996091750197750389652106796057638384067568276792218642619756161838094338476170470581645852036305042887575891541065808607552399123930385521914333389668342420684974786564569494856176035326322058077805659331026192708460314150258592864177116725943603718461857357598351152301645904403697613233287231227125684710820209725157101726931323469678542580656697935045997268352998638215525166389437335543602135433229604645318478604952148193555853611059596230656个球。大概是这样。
(当然,由于公开密钥算法使用了大量的数学结构,因此精明的头脑已经利用数学将球的数量减少到162259276829213363391578010288128,虽然这个数目要低得多,但仍然远远超出了汇总地球上所有现有计算机的电源。)
评论
哈哈哈!仅出于完整性考虑,您能否提及“球”的隐喻?
–麦克·恩斯沃思(Mike Ounsworth)
15年4月22日在17:26
它是图的广度优先探索的前排的隐喻,该图代表表示为有限状态自动机的加密系统。
–托马斯·波宁(Thomas Pornin)
15年4月22日在17:34
有许多机构试图估算RSA密钥大小与对称密钥的比较方式。归根结底,没有一个答案,因为我们正在比较不同种类的算法(对于对称密钥破解,RAM不计算在内;而对于整数分解而言,则计算很重要)。因此,RSA的等效范围大约在100到112位之间,具体取决于您询问的对象以及您认为什么是“单元”操作。 “ 107”源自“通用编号字段筛”的复杂性的原始应用。
–托马斯·波宁(Thomas Pornin)
2015年4月22日在20:00
这个答案有点错了,因为它可能给人以这样的密钥加密同样困难的印象。
–克苏鲁
2015年4月23日在9:04
虽然对于真正了解密码学基础知识的人来说,这个答案很有趣,但它几乎不能提供信息,我认为它实际上不能解决所问的问题。
– Shaamaan
15年4月23日在12:27
#4 楼
Max是有史以来思考密码学的最佳工具,它是魔方。如果您假设存在一个无法解决问题的世界,那么DiffieHellmanKeyExchange,RSA签名,RSA加密等都有直接的相似之处。您可以通过记下动作并在多维数据集上执行它们并将它们交换来进行操作。但是要记住的关键是,我认为必须困扰您的是:您是正确的。反转所有这些操作是“可能的”。从技术上讲,我们有f(x)和f_inverse(x),其中f(x)以多项式时间运行(即:您可以快速加密大量数字),而f_inverse(x,s)以指数时间运行(即:偶数介质数字是不可行的)-除非您有正确的secret s可以插入f_inverse。这样的功能对称为活板门。常见的陷门是数论问题,例如素数分解和离散对数。
评论
将Rubik's Cube视为加密的类比,可能会引起OP的问题。如果对给定状态(纯文本)的多维数据集执行一堆步骤(键),最后得到处于不同状态(密文)的多维数据集,则可以向后执行相同的步骤以返回到原始状态(纯文本)。所提出的问题是,这不适用于非对称加密。
–琼·汉娜(Jon Hanna)
15年4月24日在14:28
在Rubiks多维数据集表示法中,“反向”操作和“换向器”操作相同。要反转操作,不仅要应用反函数,而且要以相反的顺序应用它们。即:(L * F * U).inv ==(U.inv * F.inv * L.inv)。非对称加密的不同之处在于,.inv操作被设计为效率低下,以至于如果没有密钥的帮助您将无法执行此操作。
–Rob
15年4月24日在15:00
这个想法扩展到哈希。哈希是.inv操作效率低下的功能,并且没有帮助提高效率的秘密密钥。 .inv密钥有效的地方是对称密钥加密。即:消息* SymmetricKey = CipherText。 CipherText * SymmetricKey ==消息。因为X * X.inv == 1。
–Rob
15年4月24日在15:04
关键是他实际上是正确的。撤销加密不是“不可能”的。效率低下。不仅如此,对于我们使用的活板门方案,甚至都没有证明它效率低下。我们希望没人能很快解决素数分解问题。
–Rob
15年4月24日在15:05
#5 楼
您需要做的是在公钥密码学上阅读。简短的答案是它基于一种算法,该算法允许一个密钥加密而另一个密钥进行解密,这就是为什么您不能向后工作的原因。这是对正在发生的事情的简化解释,如果您想深入了解问题,可以查看以下内容,但请注意,它会迅速从悬崖上走出可能难以理解的数学:http://nrich.maths.org/2200
评论
在doctrina.org/How-RSA-Works-With-Examples.html上有一个更简单的入门
–ThoriumBR
15年4月22日在14:59
#6 楼
在这种公共密钥加密(或不对称加密)中,要加密某些内容,请执行以下操作:将要传输的消息(以数字形式):假设为5。
计算3 ^ 5(将3提升为“秘密”)= 243
计算其模数,除以另一个数字:例如143。因此,243/143 = 100。
你去。您的加密机密为100。要找到该机密,而没有私钥,您只需要找到一个数字,将其除以143就会得到100,然后求出它的立方数。
评论
143来自哪里?什么是公钥,什么是私钥?这个答案有很多不足之处,但是可以解决。
–克里斯·库德莫(Chris Cudmore)
15年4月24日在13:23
@ChrisCudmore谢谢您,我会根据您的评论进行修改以改善它
–woliveirajr
15年4月24日在16:20
看起来像是“ 5”。
–克里斯·库德莫(Chris Cudmore)
15年4月24日在17:02
#7 楼
通常,由于您没有足够的信息,因此您不能以明显的方式进行反向操作。RSA依赖于分解大数的难度。您可以通过将两个大质数p和q相乘来生成RSA模数n。 p与q相乘很容易。您还可以通过计算
q = n / p
(或p = n / q
)来反转操作。您不容易做到的是同时丢掉p和q,然后从n计算它们。这是一个不同的问题,不是您已经使用的某些过程的逆转。类似地,使用加密密钥e对消息m进行RSA加密涉及计算(m ^ e) mod n
。从理论上讲,您可以使用日志反转m ^ e
,但是如果不进行模运算,则此数字太大而无法使用。在任何情况下,取模运算都会舍弃部分数字,因此,您再也不会有琐碎地进行反向运算所需的所有信息。
评论
一段有关RSA加密的漂亮视频:youtube.com/watch?v=M7kEpw1tn50它帮助我了解了为什么它是如此难以破解:)我喜欢这个使用多种颜色的视频:youtube.com/watch?&v=3QnD2c4Xovk#!
非对称密钥加密的全部要点是,用于加密的密钥不能用于解密-您需要与之对应的密钥。
@BadSkillz-谢谢...现在,我将继续失去其余的时间,观看他们的其他视频。 :P
您为什么不能仅使用MD5哈希反向查找原始输入? (或至少一个为您提供相同哈希值的输入)