【问题标题】:AES algorithm input and output restrictionsAES算法输入输出限制
【发布时间】:2010-12-23 16:03:52
【问题描述】:

我想在我的应用程序中使用 AES 加密。我遇到了一些 aes 算法的开源实现。通过查看它们,我对以下参数感到困惑:

  1. AES 密钥长度。提到密钥长度应为 128、192 或 256 字节。如果我的密钥只是五位数,即 23467

  2. AES 纯文本长度:对 aes 纯文本长度有任何限制吗?

  3. AES 输出:如果我的密钥长度为 5 位数字且纯文本为 10 个字符,则 aes 输出字符串的最小大小是多少。

谁能帮帮我?

【问题讨论】:

    标签: aes


    【解决方案1】:

    AES 密钥长度。提到密钥长度应为 128、192 或 256 位。如果我的密钥只是五位数,即 23467

    您似乎将密钥视为某种密码。它不是。加密密钥并不意味着要被记住。它是一长串随机生成的字节,应该存储在安全的地方。

    不过,您可以从密码中导出加密密钥,例如使用哈希函数。在这种情况下,您输入234567 并使用生成的摘要作为键。然而,这有一些安全隐患,因为它使您的密钥容易受到字典和彩虹表攻击。查找“基于密码的加密”以获取有关如何安全处理此问题的详细信息;特别是,请查看PBKDF2,在RFC2898 中进行了描述。

    AES纯文本长度:对aes纯文本长度有限制吗?

    AES 是分组密码,是加密系统的底层构建块。它本身只能加密单个数据块(16 个字节),因此密码学家创建了几种“操作模式”,使我们能够加密任意长度的明文。 CTR 是不需要任何填充并且可以并行化的操作模式的一个很好的例子。

    AES 输出:如果我的密钥长度是 5 位数字且纯文本是 10 个字符,那么 aes 输出字符串的最小大小是多少。

    这完全取决于操作模式。在您的情况下,它可能是 10(当不需要填充时,例如 CTR)或 16(对于基于块的模式,例如 CBC)。

    【讨论】:

    • 感谢佩德罗的详细解释!!那么这是否意味着最好使用从 pbkdf2 算法派生的密钥作为密码密钥?我正在使用 c++ 来实现。如果可能的话,你能指出我在 CTR 模式下的 AES 实现吗?
    • @cppdev:好吧,如果你真的想使用密码,那比使用 PBKDF2 更好。如果您不需要密码,您可以随机生成一个密钥并使用它(尽管安全地存储它是一件复杂的事情)。关于加密库,我建议使用 Crypto++。
    • 在我见过的所有实现中,块密码的最小输出大小将是块大小。如果文件不是块大小的倍数,但至少是一个块大小,则可以使最后一个块与前一个块重叠,从而避免任何填充需要。但是,如果文件比块短,我知道除了将东西填充到块之外别无选择。
    • @supercat:谷歌“点击率操作模式”。它本质上是一种使分组密码充当流密码的方法。
    • @Pedro:CTR 模式要求不能多次使用会话密钥。实际上,它需要一个足够大的侧通道来传递会话密钥。侧信道不需要完全安全,但每次需要对某些通信进行加密时,它必须传递不同的东西,但必须将相同的东西传递给解密消息的实体,就像传递给加密它的实体一样。可以肯定的是,在没有侧通道的情况下,对手将能够将相同的消息识别为相同的,这可能会给短消息带来安全风险......
    【解决方案2】:
    1. 我认为您的意思是 128 和 256。(不是 198。)

    2. 这不是钥匙。那是一个密码。您使用 PBKDF1(google it)之类的算法从密码中获取密钥。

    3. 没有。 AES 是一种分组密码。它适用于与密钥大小相同的输入块。您可以使用任意数量的块,将您的输入分割成(比如说)128 位块。确保对 AES 使用 CBC 或类似模式。

    4. 您的密钥是 128 或 256 位。您的输入将是 80 位 (10*8),填充为 128 或 256。您的输出长度与密钥大小相同。

    尝试找到一个可以为您完成大部分工作的加密库。您不想只使用一个基本的 AES 函数。您还需要处理 IV、AES 模式,可能还有 MAC 等。我不能推荐任何东西,因为您没有说您要使用什么语言。

    【讨论】:

    • 不,输出长度完全与密钥大小无关。它要么是 a) 块大小的倍数 b) 等于明文长度。
    • 块大小取决于密钥大小。那么输出长度如何独立于它呢?
    • 我在解释 3 时有些草率,我给你。 (声誉上限是一个很大的抑制因素......)
    • AES 块的大小始终为 128 位。
    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2014-03-01
    • 2015-01-31
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多