Давайте предположим, что мы генерируем очень большие (например, 128 или 256-битные) числа, которые служат ключами для блочного шифра.
Давайте далее предположим, что мы носим шляпы из фольги (по крайней мере, когда снаружи).
Будучи настолько параноиком, мы хотим быть уверенными в нашей доступной энтропии, но мы не полностью доверяем какому-либо конкретному источнику.Может быть, правительство фальсифицирует наши монеты.Может быть, эти кости очень тонко взвешены.Что, если аппаратные прерывания, поступающие в /dev/random
, будут немного слишком согласованными?(Помимо того, что мы параноики, мы настолько ленивы, что не хотим создавать все вручную ...)
Итак, давайте смешаем их все.
Что такое безопасныйспособ (ы) для этого?Предположительно, простая конкатенация нескольких байтов из каждого источника не совсем безопасна - если один из источников является предвзятым, он, теоретически, может подстраиваться под такие вещи, как атака по связанному ключу, например.
Достаточно ли использовать SHA-256 поверх объединенных байтов?
(И да, в какой-то момент я собираюсь забрать копию Cryptography Engineering.:))