【问题标题】:Secure openSSL file encryption安全的 openSSL 文件加密
【发布时间】:2019-03-31 01:02:46
【问题描述】:

我希望使用 OpenSSL(多个文件)安全地加密千兆字节的数据。

我使用这个命令(openSSL 1.0.2p-i386-win32):

openssl.exe enc -e -aes-256-ctr -in secret.txt -out encrypted.txt -salt -pass pass:AsIDHnd19!&@#@!#lJglG1f31!

我的问题是:

  1. 使用什么模式?点击率还是CBC? (点击率是为了速度?)
  2. 如何生成随机 IV?例如在 PowerShell 脚本中。 (我使用的是 Pshell v2.0)
  3. 我提供的命令是否足够安全?
  4. 我可以为每个文件使用相同的盐以提高加密速度吗?
  5. 20-30 字符的真正随机密码是否可以弥补密码的不足? 四?

编辑:

我下载了一个更新的版本,可以使用 PBKDF2 (openSSL 1.1.1-win32-mingw):

openssl.exe enc -e -aes-256-ctr -in secret.txt -out encrypted.txt -salt -pass pass:AsIDHnd19!&@#@!#lJglG1f31! -pbkdf2 -p

使用 -p 我可以看到用于加密文件的盐、密钥和 IV。每次我运行 openssl 时,所有 3 个参数都会发生变化,即使在同一个文件上并且使用相同的传递。

这是否意味着我现在很安全并且 IV 是随机的?

【问题讨论】:

  • 20-30个随机字符的密码表明它不是只存在于某些用户头部的密码,而是存储在某处的东西。在这种情况下,您应该只使用实际的二进制 AES 密钥。 AES 本身不使用密码,OpenSSL 需要做很多额外的事情才能将您的密码变成密钥.. 例如。添加盐,并做一些密码拉伸等。你得到了很多额外的处理,最多相同的安全性。
  • 这是如何生成 AES 密钥的吗? stackoverflow.com/questions/52979457/…这是我的另一个问题。所以现在我已经生成了它,我只是将密钥提供给 openssl 中的 -k 标签还是什么?顺便说一句,密码是随机生成并保存在另一台机器上的。
  • 我运行了前面的命令,但是添加了一个 -p 标签来查看 iv、key 和 salt,每次我用相同的密码加密同一个文件时,所有 3 个参数都会随机变化。这意味着我很安全,openssl 会为我随机生成?
  • @kelalaka 好的,谢谢。这意味着我可以用这个命令安全地加密?
  • @kelalaka 我需要从命令行执行它,没有交互模式。从文件中读取密码然后粉碎文件是否更安全?使用 tagg -pass file:FILEPATH

标签: powershell encryption openssl aes


【解决方案1】:
  1. CBC 和 CTR 的速度应该相同。
  2. 如果未指定 IV,则使用 pbkdf2 从您的密码生成 IV。
  3. 点击率是recommended CBC。
  4. 不建议使用相同的盐。 Salt 用于防止对密码的攻击,来自 OpenSSL 文档。

如果没有 -salt 选项,则可以对密码执行有效的字典攻击并攻击流密码加密数据。原因是没有盐,相同的密码总是生成相同的加密密钥。使用 salt 时,加密数据的前 8 个字节为 salt 保留:加密文件时随机生成,解密时从加密文件中读取。

  1. IV不缺。如果没有给出,OpenSLL 会为您生成。

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 2011-02-05
    • 1970-01-01
    • 2012-05-21
    • 2023-04-04
    • 2018-11-28
    • 2013-06-17
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多