如何解决由于数字大,无法理解 RSA 实现
我试图了解非对称加密算法的工作原理。我发现最常用的算法是 RSA,所以我检查了它是如何工作的。我实际上并没有完全理解整个内容,但我知道它涉及使用天文数字进行乘法和模运算。
我读到 RSA 使用的是 4096 或 8192 位密钥长度。这意味着相乘的值和指数值的组合最多应该是 4096 位长,对吗?让我们假设一个 1000 位整数适合这个密钥长度。为此,让我们假设 2 500 位数字相乘。
这是我无法理解的。一个 500 位的数字应该像 2000 位一样长,对吗?现代计算机的长度为 64 位。高性能服务器可以是 128 位甚至 256 位长。但是 2000 位?我从未听说有任何计算机能够或具有可以处理这种情况的 ALU。
那么乘法、取模和其他运算是如何对这些巨大数字进行的呢?或者 RSA 的设计并不是为了真正进行这么大的计算(因为我对它的理解不够清楚)?还是普通电脑做不到,我们使用的key是预先计算好的?
或者我应该接受密码学很难并放弃它?
解决方法
如果你记得在学校学习乘法和加法,大数是通过解决大数组成数字的简单问题来计算的。 This wiki article 概述了小学乘法算法。它还展示了如何在代码中实现该算法。因此,对您的问题的简单回答是,该算法的一个奇特版本用于执行处理大数所需的数学运算。
由于计算机一次可以处理 64 位、128 位或更多位,因此一次对多位数字执行数学运算,而不是一次对一位数字进行运算。
对于像 RSA 这样的算法,速度很受赞赏,数学可能会针对特定的密钥长度进行多次硬编码。像 NIST hash function competition 这样的比赛非常重视性能,甚至考虑在硬件中实现数学计算的难度。
更一般地,长数学由 GMP、Boost Multiprecision Library 和 others 等库执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。