【问题标题】:Finding a cryptographically strong random secret for applications?为应用程序寻找加密的强随机秘密?
【发布时间】:2010-11-01 00:58:17
【问题描述】:

在构建 Web 应用程序时,我想知道我需要多长时间(多少位)才能用作加密密钥 - 以及我是否可以在键盘上混合出随机字符序列,或者我是否需要一些特殊的软件来为我生成一些东西?

(即从 ssh-keygen 之类的东西中窃取私有 RSA)

更新:我将在 PHP 的 mcrypt library 中使用这个键,但我也对 c++ 选项感兴趣(都在 linux 上)。

【问题讨论】:

    标签: security encryption cryptography


    【解决方案1】:

    大多数加密库都有生成会话密钥的工具。看在上帝的份上,不要尝试自己动手。

    【讨论】:

    • 据我所知,mycrypt 没有——尽管它有一个 IV 生成器。
    • 所以使用一个。这太重要了,不能留给不了解情况的应用程序程序员或不合适的库。
    • 哈哈,这就是我发布这个问题的原因!我需要知道在哪里可以找到创建密钥的东西。
    • Erm... 使用random.org 作为一次性随机密钥。如果您想要一个 ASCII 可读密钥,只需从 33-126 生成 n 个整数,其中 n 是以字节(字符)为单位的密钥长度。手动或在线将每个 int 转换为 ASCII 字符,并将新字符串复制到脚本或首选存储位置。如果您需要随机盐和 IV,请遵循上述建议,因为 PHP 的 myrcypt create IV 如果调用正确,只需调用 /dev/[u]rand 或 win32-crypt。
    【解决方案2】:

    如果可能,您应该使用 /dev/urandom。这是一个熵池,其中填充了非常接近真实随机数生成器的东西。这里有更多关于entropy pools 和熵源的信息。

    【讨论】:

    • 从技术上讲,/dev/urandom 是伪随机的,严格来说不是熵池。它从熵池中提取,但即使该池是干的,它也会继续生成输出。 /dev/random 是熵池,你可以很容易地清空它。
    • @Slartibartfast 我已经阅读了 Linux 内核中的 random.c 并且您基本上是正确的。 /dev/urandom 只有在无法满足请求时才会退回到 prng。在大多数情况下 /dev/urandom 更有利,因为否则您的应用程序将不得不等待熵池填满。速度与安全是一种常见的权衡。
    • 我并不是说不应该使用 /dev/urandom,我只是在纠正一个轻微的技术错误。
    【解决方案3】:

    您在这里并没有将苹果与苹果进行比较。我所知道的大部分 openssl、gpg、pgp 程序都不会仅从您键入的字符中获取输入。它们可能会从击键之间的时间(pgp 这样做)中获取一些时间,但它们也会从您的操作系统收集的其他来源中获取随机性:磁盘访问时间、数据包间到达时间和其他来源。这些组合起来生成“随机”数字以供加密使用。

    密钥长度有些不同。 NIST 提出了有关密钥长度的建议,您可能需要研究一下。话虽如此,密钥长度几乎从来都不是安全链中最薄弱的环节。

    选择合理的密钥大小,但不要忘记在security engineering 的所有其他领域付出努力。这本书的第一版在网络上,是一个巨大的资源。

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 1970-01-01
      • 2015-05-01
      • 2023-03-11
      • 2011-02-28
      • 1970-01-01
      • 2011-12-04
      • 2023-01-02
      • 2016-07-08
      相关资源
      最近更新 更多