【问题标题】:Suitable Language for RSA implementation [closed]适合 RSA 实现的语言 [关闭]
【发布时间】:2012-06-03 14:32:08
【问题描述】:

我想为一个大学项目实施 RSA 密码系统算法,我正在尝试决定使用哪种编程语言。我对C非常熟悉,所以这将是一个方便的选择。然而,该算法必须处理非常大的数字(它将包括一个 Primality 子例程),而且我听说使用 Python 会产生更好的实现。是对的吗?

提前谢谢你。

【问题讨论】:

  • 很大程度上取决于您的目标。你想要干净的代码吗?快码?避免侧信道攻击?大多数严肃的加密库都在 c 或汇编中。但是,如果该项目只是教育性的并且永远不会用于实际保护某些东西,那么高级语言可能更适合,因为它通常会导致代码更简洁。
  • C 将是这里的明显选择。公钥加密算法已经够慢了,用非常高级的语言实现它们只会让情况变得更糟。
  • 投票结束,因为“我应该使用什么语言?”类型的问题总是会导致固执己见的答案。这不适合 Stack Overflow。另见stackoverflow.com/faq#dontask

标签: python c cryptography rsa primality-test


【解决方案1】:

当然,您可以使用任何语言来实现 RSA,甚至是汇编程序。问题可能不在于“更好”的实现,而在于几周后查看生成的代码时更容易掌握什么。

让我们回顾一下 RSA 实现所需的内容:

  • 支持大整数
  • 模幂运算
  • 模逆
  • 密钥生成的素性测试

您选择的语言对这些内容的支持越多,结果就会越简洁易懂。像 C(++) 这样的低级语言不会对大整数提供本机支持,但是像 gmp 这样的库会为您提供所需的一切。 Java 有 BigInteger 类。

但是,结果可能不像使用内置大整数支持的语言(例如 Python、Ruby 或 Haskell)实现那样容易理解。生成的代码将非常类似于所使用算法的教科书描述。不利的一面是,它们往往比高度优化的 gmp 代码慢。

但由于此时性能可能不是您所追求的,我建议使用更高级的语言。您不必处理低级维护,可以专注于手头的任务,选择您最喜欢或有经验的那个。如果您想借鉴您对 C 的熟悉程度,没问题,使用任意 -诸如 gmp 之类的精度库,您也可以开始使用。

对于语言默认可能没有内置的缺失部分,可以参考以下内容:

尽管您可能已经知道这一点,但为了完整起见,请让我警告您,这种所谓的“教科书 RSA”实现在生产中使用并不安全 - 很多事情还没有解决. RSA blinding 可以防止侧信道攻击,为了使 RSA 作为一种加密方案是安全的,你还需要实现某种形式的填充,为你的密钥等使用加密安全的随机生成器是至关重要的。

【讨论】:

    【解决方案2】:

    我不知道 Python 是否会产生“更好”的实现,因为更好在这里是相当主观的。您可以找到两者的数字库,让您轻松处理大量数字。 Python 的优势 (imo) 是 numpy 库,它非常易于阅读和使用,并且通常更易于人类阅读,这通常会导致更容易调试。

    【讨论】:

      【解决方案3】:

      使用脚本语言或任何比 C 更高级别的语言(例如 C# 或 Java)很可能会更容易,因为您不必处理内存管理和其他与您的项目无关的任务。

      【讨论】:

      • 我不会使用任何使用动态类型的语言,因为它会使调试变得更加困难。该语言应该易于使用大整数(用于计算)和字节(用于填充和消息处理)。
      猜你喜欢
      • 2011-06-05
      • 2010-12-02
      • 1970-01-01
      • 2010-12-05
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      相关资源
      最近更新 更多