Комментарии 26
Устройство собирал под платформу Bay Trail, процессор Celeron J1900, там ничего такого нет. А в целом, конечно вариант хороший.
Спасибо, посмотрел внимательнее, проверил настройки ядра и /proc/cpuinfo, оказалось он у меня тоже есть. Но в Linux с ним всё не просто, вроде его и не выпилили как во FreeBSD, но то, что он используется не видно. Ядро восстанавливает энтропию со скоростью меньше чем 2 байта в секунду, что в моём случае не приемлемо. А rngd принципиально против этого источника энтропии: RDRAND will be disabled и далее уточнение, что без вариантов. Поэтому эффекта я не заметил, и пришлось решать проблему сначала через /dev/urandom, а потом и доп.устройством.
Ближе к железу, чем драйвер drivers/char/random.c вряд-ли что-то можно найти. Если что, он хорошо документирован.
Хорошо хоть в данной статье автор запихнул описание ЛУТа под спойлер.
Но, я попробую :)
Внутренний параноик сходу выдал: «если так просто сделать генератор 'истинно случайных чисел' почему это до сих пор не сделано».
Вы гений? Или что-то не договариваете?
Да, /dev/urandom примерно так и работает, и нет ничего плохого в его использовании. Но ещё лучше, когда есть выбор. Так что, почему бы и не сделать.
Спасибо, но схема этого генератора стандартная, ищется по ключевым "avalanche noise generator", только софт пришлось писать с нуля, поскольку примеры, сопровождающие эти схемы, по моему скромному мнению, не приемлемы.
При этом пары 00 и 11 отбрасывать, а пары 01 и 10 использовать как 0 и 1 соответственно. В этом варианте, при неравных вероятностях выпадения исходных нулей и единиц, вероятности выпадения 01 и 10 все равно будут равны и не будут зависеть от температурного дрейфа.
А калибровку делать при заметном дисбалансе выпадения пар 00 и 11.
Что-то смысл не уловил, какие два бита вы предлагается взять, чтобы равновероятно выпадали 01 и 10? Если что, то там по сути все 10 бит, в той или иной мере, случайные, но использовать их нельзя. Всегда будут зависимости, как рабочий диапазон, температура, износ. Само по себе это не плохо, если есть возможность откалибровать, но чем больше бит, тем больше требуется вычислений. А использованный метод, прост и надёжен, даже формул не требуется для обоснования.
Т.е. одно измерение — один бит. Я предлагаю делать два измерения. Получать два бита. Их я и предлагаю взять. Не два бита из результата АЦП, нет.
Есть такой метод получать гарантированно случайное измерение условной кривой монетой. Даже если орел будет падать с вероятностью 0.9, этот способ будет давать нам на выходе 0.5.
RS232 устройство 3-в-1 для домашнего Linux сервера: Часть 1 (Аппаратная)