【问题标题】:Generate a triple DES key in a file, and use it to encrypt a message在文件中生成三重 DES 密钥,并使用它来加密消息
【发布时间】:2020-03-31 00:35:42
【问题描述】:

我正在学习密码学,我想使用 OpenSSL 命令行生成以 base64 编码的三重 DES 密钥并将生成的密钥保存到文本文件中,然后我想使用此密钥文件加密文本消息。

我使用标准命令“rand”生成了一个以base64编码的大小为24字节的随机值并将其保存为文本文件中的密钥,但我不知道如何使用该文件来加密文本消息使用命令“enc”,我想知道是否有更好的方法来使用 OpenSSL 命令行生成三重 DES 密钥。

【问题讨论】:

    标签: encryption command-line openssl des


    【解决方案1】:
    1. 这不是编程或开发问题,也不是 SO 的真正主题。它更适合 security.SX 或超级用户。

    2. 如果这是(或现在)不是一次性测试,那么在文件中以明文形式保存密钥可能是不安全的。这部分真的属于 security.SX。

    3. 从技术上讲,三重 DES 密钥(就像过时前几年的单 DES 密钥)应该将每个八位字节的低位(在现代系统上为字节)设置为奇校验。在 70 年代,当 DES 被开发并通常在使用分立晶体管的专用硬件中实现时,这是一个非常重要的特性。在过去的几十年里,尤其是对于软件,这些奇偶校验位通常被忽略。特别是对于 OpenSSL,libcrypto 默认会忽略它们(尽管可以设置或检查),命令行 enc 使用 libcrypto 默认值。

    4. Commandine enc 默认为基于密码的加密,它派生提供的密码中的密钥,但可以使用-K(大写)IN HEX 获取实际密钥;请参阅手册页。

    在 Unix 上,如果您改用 rand -hex,这会很容易:

        openssl rand -hex 24 >key.hex
        openssl enc -des-ede3-cbc -K $(cat key.hex) -iv 0123456789ABCDEF -in X -out Y
        # see below
    

    在 Windows 上,这也是可管理的,但不是那么容易;你需要类似的东西

        openssl rand -hex 24 >key.hex
        for /f %t in ('type key.hex') do set k=%t
        rem double the % if used in a batch file
        openssl enc -des-ede3-cbc -K %k% -iv 0123456789ABCDEF -in X -out Y 
        rem ditto
    

    如果您坚持使用 base64,则需要 Unix 上的帮助程序

        openssl rand -base64 24 >key.b64
        K=$( openssl base64 -d <key.b64 | xxd -p )
        openssl enc -des-ede3-cbc -K $K ... # as above
    

    而且我认为它根本无法在 Windows 上完成。

    请注意,每种加密的 IV 应该不同,而不是像我的示例中那样硬编码,特别是对于 CBC,它也应该是对手无法预测的;这通常最容易通过使其随机化来完成。虽然如果不是 CBC 模式,只会对主动攻击者失去安全性,而如果它在 CTR 和 OFB 等所有其他模式下重复,即使对被动攻击者也会失去安全性。这部分属于 security.SX 或 crypto.SX,那里已经有几十个,如果不是几百个 Q。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 2020-12-31
      • 2019-12-18
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多