【问题标题】:How does password-based encryption technically work?基于密码的加密在技术上是如何工作的?
【发布时间】:2010-11-02 19:31:51
【问题描述】:

假设我有一些数据和一个密码,我想以这样一种方式对数据进行加密,使其只有使用正确的密码才能恢复。

这在技术上是如何工作的(即如何实施)?我经常听到人们使用位移来加密,但是你如何基于密码呢?基于密码的加密如何工作?

一个例子是 Mac OS X FileVault

谢谢。


如果您提供示例代码,最好是 C、Objective-C 或伪代码。

【问题讨论】:

  • 一个正确而完整的答案是大约 2 年的计算机科学和数学研究生课程。许多博士都写过关于加密的文章……
  • 你可能不想想要做的一件事是滚动你自己的加密库,至少如果你真的关心加密数据的安全性的话。获得正确的加密货币是困难

标签: passwords encryption


【解决方案1】:

对于(对称)加密,您需要一个用于加密和解密的密钥。

通常,您提供的密码用作此密钥的来源。出于各种安全原因,密码不(并且由于所使用的密码的要求通常不能)直接用作密钥。相反,key derivation function 用于从密码生成密钥。

这就是加密密码必须长且相当随机的原因:否则生成的密钥将仅来自可能密钥的极小子集,然后可以简单地全部尝试,从而强制加密。

对于代码示例,有几种可能:

  • 看一个密码库的源码,比如OpenSSL
  • 看一个实现加密的程序源码,比如GnuPG
  • google 一些简单加密算法或密钥导出函数的示例源代码,并尝试理解它

这取决于你想学什么。

【讨论】:

  • 您的意思是“通常,您提供的密码用作此密钥。” ?该段的第一句和第二句似乎是矛盾的。
  • @Thanatos:糟糕,我不是这个意思。感谢您指出;固定。
  • 感谢您的回答,它让我了解了密钥派生函数的想法。我仍然对为什么这看起来如此复杂感到困惑,不知道您是否有建议:stackoverflow.com/q/51791514/470749 谢谢!
【解决方案2】:

您需要查看其他资源以获得深入的解释,因为这个问题非常广泛。

一般来说:正如 sleske 指出的那样,您使用密码作为加密密钥的“种子”。然后,您使用此密钥应用双向加密算法(即可以应用一次加密并再次解密的算法)。当您将算法应用于一段数据时,它会以这样一种方式被加密,即如果不使用相同的密钥,您将永远无法再次取回数据,并且您实际上无法在没有相同密码的情况下生成相同的密钥一颗种子。

【讨论】:

    【解决方案3】:

    如果您对加密感兴趣,请阅读 Bruce Schneier 的 Applied Cryptography。很好的阅读,很多例子。它经历了许多不同的加密类型。

    【讨论】:

      【解决方案4】:

      一种简单但不完全安全的方法是将每个字节旋转一个由密码确定的数字。您可以使用字符串中的哈希码,或计算字符数,或任何数字。

      不过,您可能想到的是公钥加密。这是一个文档的链接,它会告诉你它的数学 - 你必须自己计算出实现细节,但是一旦你理解了数学,这并不难。 http://mathaware.org/mam/06/Kaliski.pdf

      【讨论】:

      • 对称加密可能同样适用于此。
      【解决方案5】:

      大多数分组密码的基本构建块是称为Feistel Network 的结构。它相当容易理解。

      流密码更简单 - 它们本质上只是伪随机数生成器,尽管具有一些重要的安全属性,其中初始内部状态是从密钥派生的。

      【讨论】:

        【解决方案6】:

        基于密码的加密是对称的。输入通常由除了密码之外的盐组成。 FooBabel 有一个很酷的应用程序,您可以在其中玩这个......目前他们为了简单起见将 Salt 硬编码为一个 8 字节(0 到 7)的数组。我提出了一个请求,看看他们让用户输入盐。无论如何,这里是 - PBECrypto

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-21
          • 1970-01-01
          相关资源
          最近更新 更多