Я начну с заявления об отказе от ответственности, что я здесь вне своей глубины. Коллега показывал мне процедуру расшифровки, которую он написал с pycryptodomex
. У него был зашифрованный файл, ключ и одноразовый номер (извлеченный из файла). Он смог расшифровать содержимое файла очень простым способом.
c = Crypto.Cipher.AES.new(key, AES.MODE_GCM, nonce)
c.decrypt(encrypted_data)
Подобную реализацию вы можете увидеть в pycryptodome test для GCM:
cipher = AES.new(self.key_128, AES.MODE_GCM, nonce=self.nonce_96)
pt = get_tag_random("plaintext", 16 * 100)
ct = cipher.encrypt(pt)
cipher = AES.new(self.key_128, AES.MODE_GCM, nonce=self.nonce_96)
pt2 = cipher.decrypt(ct)
К сожалению, pycryptdomex
- это дополнительная зависимость, которую мне нужно было бы отнести, и я стараюсь избежать этого. У меня есть базовая установка Anaconda, которая включает в себя пакеты pyCrypto и pyCA / cryptography . Похоже, что pycryptodomex
- это форк pyCrytpo, у которого не было стабильной реализации GCM с самого начала. Когда я смотрю на реализацию для PyCA/cryptography
, она смотрит прямо вперед:
cipher = Cipher(algorithms.AES(key), modes.GCM(nonce), backend=default_backend())
d = cipher.decryptor()
Но когда мы хотим расшифровать контент, мы должны вызвать finalize_with_tag
и создать тег аутентификации:
d.update(encrypted_data) + d.finalize_with_tag(tag)
К сожалению, у меня нет тега аутентификации и я не знаю, где его найти. Я не могу установить значение None, так как существует требование минимальной длины. Я также не уверен, зачем мне сначала создавать тег аутентификации для расшифровки AES GCM с помощью PyCA/Cryptography
, но мне не нужно создавать тег при дешифровании с помощью pycryptodomex
. В конечном счете я ищу ясности в следующем:
Возможно ли реализовать расшифровку AES / GCM с помощью пакета Anaconda PyCA/cryptography
, если у меня есть доступ только к ключу, nonce, а зашифрованные данные?
Почему мне нужно предоставить тег аутентификации для расшифровки с одной реализацией, а не с другой?
pycryptodomex
выполняет что-то под капот для определения метки?