Могу ли я использовать AES I.V. или nonce как соль пароля? - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь создать программу на Python, которая будет принимать файл и ключ , а затем будет шифровать файл.Я уже знаю, что в режимах AES-GCM и AES-CFB используются одноразовые номера и IV соответственно.И я в настоящее время храню IV / nonce в самом зашифрованном файле.Я размышляю над идеей, могу ли я использовать IV / nonce AES-CFB / AES-GCM в качестве соли хеширования пароля?

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

if filepath.endswith(EXT):
      method = 'decrypt'
      flag = False
      with open(filepath, 'rb+') as f:
        f.seek(-NONCE_SIZE,2)
        iv = f.read()
      os.truncate(filepath, os.path.getsize(filepath) - NONCE_SIZE)

    # If the file doesn't end with the required extension,
    # then identify the method as `encrypt` and do the same
    # with the key provided.
    else:
      method = 'encrypt'
      flag = True
      iv = Random.new().read(NONCE_SIZE)

    # Make a cipher object with the nonce and key and write
    # to the file with the arguments.
    # Previous approach as commented-out code line below
    # key = hashlib.sha3_256(key.encode()).digest()
    key = PBKDF2(key, iv, dkLen=32)
    crp = getattr(AES.new(key, AES.MODE_GCM, nonce=iv), method)

Я ожидаю, что IV / nonce, используемый в качестве соли хеширования пароля, обеспечивает требуемую безопасность.

1 Ответ

1 голос
/ 18 июня 2019

Вот для чего уже существуют IV и nonce. Использование их дважды может иметь катастрофические последствия для шифрования. Одноразовый номер - это по определению число, которое используется только один раз.

...