【问题标题】:Big-O for public key encryption用于公钥加密的 Big-O
【发布时间】:2011-11-30 05:23:26
【问题描述】:

我已经搜索了几天,但我找不到使用公钥加密来加密、解密或尝试破解加密文件(暴力破解)的大 O 表示法算法。我正在尝试确定我开发的一个大量使用公钥加密的想法的大 O 表示法。

这些与公钥加密相关的 Big-O 算法是什么:

A) 使用长度为 L 的密钥加密由 N 个字符组成的文件

B) 解密同一个文件

C) 一种典型的暴力破解算法,用于破解具有 N 个字符且最大密钥长度为 L 的加密文件

任何包含 Big-O 符号的更有效算法来破解加密将不胜感激。另外,请参考可以找到此材料的任何地方。

很抱歉提出一个我真的应该能够自己找到的问题,但我还没有找到我要找的东西。

【问题讨论】:

  • 我很确定所有操作都是 O(N)。在 A) 和 B) 的情况下,N 表示作用的数据长度。在 C 的情况下,N 表示长度为 L 的密钥的排列。
  • 如果可能的话,我希望参考一些文档或其他内容。和一个实际的答案,所以我可以接受。 ;)
  • 另外,如果加密/解密只是 N 阶,我会感到惊讶。我对一般安全密码学的理解(并不广泛;我可能错了)是每个加密字符都依赖于原始文件中的多个字符(不是字符到字符的转换或简单的 ASCII 操作)。这是否意味着至少有一个 N*log(N) 阶算法?

标签: cryptography big-o public-key-encryption


【解决方案1】:

标准公钥/私钥算法几乎从不用于大型输入,因为这些算法的安全属性通常不适合批量加密。最常见的配置是使用公钥/私钥算法加密一个小的(恒定大小,通常为 128 - 256 位)密钥,然后将该密钥用于对称加密算法。

话虽如此,我将使用 RSA 作为其余问题的测试用例:

A/B) 抛开密钥生成,RSA 在O(n) 中加密和解密消息的大小。 (请注意,所有消息都必须是密钥的大小,因此较小的消息被填充,较大的消息必须被分解。)加密/解密的确切速度取决于您的 RSA 实现使用的算法,但它是密钥大小的多项式:

http://www.javamex.com/tutorials/cryptography/rsa_key_length.shtml

C) 给定一个公钥,RSA 可以通过分解公钥来破解,目前最好使用GNFS(即O(exp((7.1 b)^1/3 (log b)^1/3)))来完成。我认为基于加密数据破解 RSA 的工作并不多,因为公钥是一个更有用的目标。

【讨论】:

  • 如果 RSA 的密钥大小是指数级的,它会太慢(并且不会比暴力破解慢多少)。链接页面上突出显示的句子看起来更像是在二次(这将是因子 4)和三次(因子 8)之间。
  • duskwuff 2011 年 10 月 4 日 19:07 “GNFS [is] O(exp((7.1 b)^1/3 (log b)^1/3)))” 抱歉,如果钝,但什么为B'?例如,公钥的值,或公钥的长度(以比特为单位)(上面的问题用“L”表示),还是完全不同的东西?
  • 从维基百科页面,很确定b 是密钥的长度(以位为单位)。它与 L-Notation 复杂度 n 变量匹配得相当好。但我也想确认。 @TomRoche
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 2013-04-05
相关资源
最近更新 更多