【问题标题】:manually decrypt chef data bag item with openssl使用 openssl 手动解密厨师数据包项
【发布时间】:2017-03-08 03:29:52
【问题描述】:

根据 chef 中的 docs,它使用共享密钥来加密数据包项。

共享密钥是通过以下方式创建的:

openssl rand -base64 512 | tr -d '\r\n' > encrypted_data_bag_secret

数据以以下格式保存。

id:   mysql

pass:
cipher:         aes-256-cbc
encrypted_data: JZtwXpuq4Hf5ICcepJ1PGQohIyqjNX6JBc2DGpnL2WApzjAUG9SkSdv75TfKSjX4
iv:             VYY2qx9b4r3j0qZ7+RkKHg==
version:        1

user:
cipher:         aes-256-cbc
encrypted_data: 10BVoNb/plkvkrzVdybPgFFII5GThZ3Op9LNkwVeKpA=
iv:             uIqKHZ9skJlN2gpJoml6rQ==
version:        1

我试图使用 openssl 解密其中一项,但未能获得正确的魔法组合。

使用上面的示例数据,下面是我想出的最好的命令,我认为应该可以工作。数据是 base64 解码的,来自 openssl man 的 ivkey 应该是十六进制的,但我认为我的转换正在为 openssl 提供正确的数据。

cat 'JZtwXpuq4Hf5ICcepJ1PGQohIyqjNX6JBc2DGpnL2WApzjAUG9SkSdv75TfKSjX4' > encrypted_data
cat 'VYY2qx9b4r3j0qZ7+RkKHg==' > iv

openssl enc -d -aes-256-cbc -a \
  -in encrypted_data \
  -K $(cat encrypted_data_bag_secret|base64 -d|xxd -p) \
  -iv $(cat iv|base64 -d|xxd -p) 

任何人都可以看到我做错了什么或有使用 openssl 和共享机密文件手动解密厨师数据包项目的工作示例吗?

【问题讨论】:

  • 我想知道你为什么要这样做吗?
  • 我必须审核我们的主厨服务器...多个不同步的服务器,我想测试本地 git 保存的数据包文件版本,以查看哪些已使用 'common ' 密钥文件。
  • 好的,那么为什么不使用 Chef 而不是 bash 脚本和 openssl 来解密它们呢?
  • 因为我引用了本地 .json,我认为通过 jq 解析并将 encrypted_data 和 iv 键值输入到 openssl 以获得简单的成功会更容易 ||失败。但我认为使用 openssl 会更容易插入价值和利润。
  • knife -z data bag show 是你的朋友 :)

标签: openssl chef-infra


【解决方案1】:

扩展@coderanger:

鉴于加密数据包的内容,您需要对 ivencrypted_data 进行 base64 解码,然后获取原始密钥值并对其运行 SHA256。下面是一个使用上述 pass 数据包项的 Python 脚本示例:

import hashlib
from base64 import b64decode
from Crypto.Cipher import AES

iv = b64decode('VYY2qx9b4r3j0qZ7+RkKHg==')
key = 'data_bag_key_used_to_encrypt_data_bag'
key = hashlib.sha256(key.encode()).digest()
encoded = b64decode('JZtwXpuq4Hf5ICcepJ1PGQohIyqjNX6JBc2DGpnL2WApzjAUG9SkSdv75TfKSjX4')

dec = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
value = dec.decrypt(encoded)

value 现在应该包含您解密的 data_bag 内容

【讨论】:

    【解决方案2】:

    通过 SHA256 运行关键数据,并确保使用原始摘要,而不是十六进制或 base64。您也不想先对其进行 base64 解码,我们以 base64 模式生成密钥,因此它只使用可打印字符,而不是因为它曾经用作 base64 数据。

    你可以在the encryptor class看到相关代码。

    另外请记住,这仅适用于版本 1 的包物品。我们还有第 2 版,它添加了您必须剥离的 MAC,而第 3 版则使用 aes-256-gcm。

    【讨论】:

      猜你喜欢
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 2016-09-18
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多