Какова энтропия байтов XORed CSPRNG с хэшем с низкой энтропией?

Допустим, я беру 256 бит из CSPRNG и предполагаю, что это идеальные 256 бит энтропии. Назовите это рандом.

Допустим, я беру sha256 текста ASCII «пароль». Назовите этот хэш.

Теперь мы XOR rand и hash. Назовите это смешанным.

Энтропия смеси меньше, чем энтропия ранда?

Если да, то есть ли формула для расчета его энтропии?

Пример ниже: какова энтропия микширования в зависимости от rand и weak_hash

#!/usr/bin/python3
import hashlib, os

def main():
    rand = int(os.urandom(32).hex(),16)
    weak_hash = int(hashlib.sha256(b'password').digest().hex(),16)
    mixed = ("%064x" % (rand ^ weak_hash))
    print(mixed)

main()

person user3074620    schedule 27.04.2018    source источник
comment
AIUI, если один из входных данных XOR имеет идеальную энтропию, то и выходной. Если у вас есть информация, скажем, о четырех битах слабого ввода, вы ничего не можете сказать об этих четырех битах вывода XOR.   -  person rossum    schedule 27.04.2018


Ответы (1)


Вы описываете одноразовый блокнот. Если ключевой поток: вывод CSPRNG полностью случайный, то зашифрованный текст также будет неотличим от случайного.

Конечно, выходные данные CSPRNG не полностью случайны. Однако, если CSPRNG хорошо засеян с достаточной энтропией, тогда у вас будет такая же безопасность, как у потокового шифра, который имитирует одноразовый блокнот.

Таким образом, вывод (mixed) будет таким же случайным, как и CSPRNG, пока CSPRNG не попадет в ранее обнаруженное состояние. В основном это должно происходить только в случае отказа источника энтропии.

person Maarten Bodewes    schedule 27.04.2018