On Fri, 9 Nov 2018 02:07:05 +0300 Alexey V. Vissarionov wrote: > On 2018-11-08 20:06:28 +0300, Andrey Savchenko wrote: > > >> 5. желательно всем обзавестись такими энтропийными ключиками, > >> как у Алексея! :) > > И да, и нет. То, что у Алексея ключик аппаратный — это хорошо, но, > > как я помню, там нет равномеризации выборки и не гарантируется > > несмещённость. > > Первое обеспечивается аппаратно (на том ОУ, который компаратор), а > второе достигается банальным отбеливанием по SHA2 внутри CSPRNG. Покажи мне, пожалуйста, где там SHA2? Вот последние исходники random.c ядра: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c Для смешивания входных данных используется CRC-32 полином: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n323 * For the purposes of better mixing, we use the CRC-32 polynomialas * well to make a (modified) twisted Generalized Feedback Shift * Register. Для выходных данных используется SHA-1 (чтоб не выдавать внутреннее состояние пула), который затем замешивается обратно в пул: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n333 * The mixing operation is much less sensitive than the output hash, * where we use SHA-1. All that we want of mixing operation is that * it be a good non-cryptographic hash; i.e. it not produce collisions * when fed "random" data of the sort we expect to see. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n1417 * We mix the hash back into the pool to prevent backtracking * attacks (where the attacker knows the state of the pool * plus the current outputs, and attempts to find previous * ouputs), unless the hash function can be inverted. By * mixing at least a SHA1 worth of hash data back, we make * brute-forcing the feedback as hard as brute-forcing the * hash. > Или, если так будет понятнее: оно и не надо - лишь бы оно добавляло > в пул хоть что-то действительно случайное (а стабилитронам в этом > отношении действительно можно доверять, особенно дешевым на низкое > напряжение, что для генерации шума самое то). > > > А если третий момент распределения будет сильно отличен от нуля, > > то это тоже значимая уязвимость, поскольку делает возможным > > корреляционный анализ данных, особенно на большой выборке. > > Именно поэтому данные примешиваются в пул через хеш-функцию. Однако, в исходном коде по ссылкам выше это не совсем так. Best regards, Andrew Savchenko