Какой механизм использует Ansible Vault для обнаружения неправильных паролей хранилища? Другими словами, если пользователь вводит неправильный пароль хранилища, Ansible показывает сообщение об ошибке ниже. Как?

Decryption failed (no vault secrets were found that could decrypt)

Есть ли какой-либо раздел в Vault Payload, которую Ansible использует для обнаружения неправильных паролей?

4
pmoubed 17 Июн 2020 в 21:16

1 ответ

Лучший ответ

Код для ansible-vault с соответствующим разделом можно найти здесь: https://github.com/ansible/ansible/blob/devel/lib/ansible/parsing/vault/ init .py # L736

Подводя итог, он использует указанный пароль и идентификатор хранилища для расшифровки файла. Таким образом, он будет искать идентификатор хранилища в файле хранилища, а затем попытается расшифровать пароль. Будет возвращена только часть crytpo байтовая строка, когда расшифровка прошла успешно и возвращается ожидаемый формат (PKCS7):

  • Итак, сначала анализируется содержимое хранилища (шестнадцатеричный формат преобразуется в фактические байты):
b_ciphertext, b_salt, b_crypted_hmac = parse_vaulttext(b_vaulttext)
  • Затем соответствующие ключи генерируются из соли и пароля:
b_password = secret.bytes
b_key1, b_key2, b_iv = cls._gen_key_initctr(b_password, b_salt)
  • Как вы правильно заметили, первое, что делает функция _decrypt_cryptography, это проверяет правильность 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.

Поэтому, когда вы используете неправильный пароль, криптографическая функция вернет данные, отличные от PKCS7, и это приведет к сообщению выше.

3
Simon 18 Июн 2020 в 15:48