gpt4 book ai didi

ansible - Ansible Vault 如何检测错误的密码?

转载 作者:行者123 更新时间:2023-12-03 23:46:29 29 4
gpt4 key购买 nike

Ansible Vault 使用什么机制来检测错误的 Vault 密码?换句话说,如果用户输入了错误的保险库密码,那么 Ansible 会在下面显示错误消息。如何?
Decryption failed (no vault secrets were found that could decrypt)
Vault Payload中是否有任何部分Ansible 用于检测错误的密码?

最佳答案

ansible-vault的代码相关部分可以在这里找到:https://github.com/ansible/ansible/blob/devel/lib/ansible/parsing/vault/init.py#L736

总之,它使用指定的密码和保险库 ID 来解密文件。因此,它将在保管库文件中查找保管库 ID,然后尝试解密密码。 crytpo part只有在解密成功并返回预期格式(PKCS7)时才会返回一个字节字符串:

  • 所以首先解析 Vault 的内容(将十六进制格式转换为实际字节):
  • b_ciphertext, b_salt, b_crypted_hmac = parse_vaulttext(b_vaulttext)
  • 然后,根据盐和密码生成相关 key :
  • b_password = secret.bytes
    b_key1, b_key2, b_iv = cls._gen_key_initctr(b_password, b_salt)
  • 正如您正确地注意到的,第一件事是 _decrypt_cryptography功能是使用从上面的密码派生的 key 之一检查 HMAC 是否正确:
  • hmac = HMAC(b_key2, hashes.SHA256(), CRYPTOGRAPHY_BACKEND)
    hmac.update(b_ciphertext)
    try:
    hmac.verify(_unhexlify(b_crypted_hmac))
    except InvalidSignature as e:
    raise AnsibleVaultError('HMAC verification failed: %s' % e)
  • 然后,实际解密发生:
  • cipher = C_Cipher(algorithms.AES(b_key1), modes.CTR(b_iv), CRYPTOGRAPHY_BACKEND)
    decryptor = cipher.decryptor()
    unpadder = padding.PKCS7(128).unpadder()
    b_plaintext = unpadder.update(
    decryptor.update(b_ciphertext) + decryptor.finalize()
    ) + unpadder.finalize()
  • b_plaintext然后返回。

  • 因此,当您使用错误的密码时,crypto 函数将返回非 PKCS7 数据,然后导致上述消息。

    关于ansible - Ansible Vault 如何检测错误的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62435735/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com