Какой-то парень сказал следующее:
Любой, кто пытается генерировать случайные числа детерминистскими средствами, конечно же, живет в состоянии греха.
Это всегда означает, что вы не можете генерировать истинные случайные числа только с помощью компьютера. И он сказал, что когда компьютеры были эквивалентны размеру одного микропроцессора Intel 8080 (~ 6000 клапанов). Компьютеры стали более сложными, и я считаю, что утверждение фон Неймана, возможно, больше не соответствует действительности. Считайте, что реализованный программный только алгоритм невозможен. Они работают на физическом оборудовании. Истинные генераторы случайных чисел и их источники энтропии также сделаны из аппаратного обеспечения.
Этот фрагмент Java помещен в цикл:
file.writeByte((byte) (System.nanoTime() & 0xff));
Можно создать файл данных, который я представил в виде изображения:
Вы можете видеть структуру, но также с большой случайностью. Интересно, что размер этого PNG-файла составляет 232 КБ, но он содержит 250000 пикселей серой шкалы. Уровень сжатия PNG был максимальным. Это только степень сжатия 7%, т.е. довольно не сжимаемый. Также интересно то, что файл уникален. Каждое поколение этого файла представляет собой немного другой шаблон и имеет сжимаемость ~ 7%. Я подчеркиваю это, поскольку это важно для моего аргумента. Это ~ 7 бит / байт энтропии. Это, конечно, уменьшит использование более сильного алгоритма сжатия. Но не уменьшайте ничего до 0 бит / байт. Лучшее впечатление можно получить, взяв вышеуказанное изображение и заменив его цветовой картой на случайную: -
Большая часть структуры (в верхней половине) исчезает, поскольку это были просто последовательности схожих, но незначительно разных значений. Является ли это истинным источником энтропии, созданным простым исполнением Java-программы в многозадачной операционной системе? Не равномерно распределенный генератор случайных чисел, а источник энтропии для одного? Источник энтропии, построенный из программного обеспечения, работающего на физическом оборудовании, которое просто является ПК.
дополнительный
Чтобы подтвердить, что каждое изображение генерирует свежую энтропию без фиксированного шаблона, общего для всех, было сгенерировано 10 последовательных изображений. Затем они были объединены и сжаты с помощью самого мощного архиватора, который я могу получить для компиляции (paq8px). Этот процесс исключит все общие данные, включая автокорреляцию, оставляя только изменения / энтропию.
Конкатенированный файл сжат до ~ 66%, что приводит к скорости энтропии ~ 5,3 бит / байт или 10,5 Мбит / изображение. Удивительное количество энтропии
Дополнение 2
Были отрицательные комментарии о том, что моя методология энтропии с помощью теста на сжатие является ошибочной, давая только слабую оценку верхней границы. Итак, я запустил объединенный файл через официальный тест криптографической оценки энтропии NIST, SP800-90B_EntropyAssessment . Это так же хорошо, как и для измерения энтропии не IID. Это отчет (извините, этот вопрос становится длинным, но проблема сложная):
Running non-IID tests...
Entropic statistic estimates:
Most Common Value Estimate = 7.88411
Collision Test Estimate = 6.44961
Markov Test Estimate = 5.61735
Compression Test Estimate = 6.65691
t-Tuple Test Estimate = 7.40114
Longest Reapeated Substring Test Estimate = 8.00305
Predictor estimates:
Multi Most Common in Window (MultiMCW) Test: 100% complete
Correct: 3816
P_avg (global): 0.00397508
P_run (local): 0.00216675
Multi Most Common in Window (Multi MCW) Test = 7.9748
Lag
Test: 100% complete
Correct: 3974
P_avg (global): 0.00413607
P_run (local): 0.00216675
Lag Prediction Test = 7.91752
MultiMMC Test: 100% complete
Correct: 3913
P_avg (global): 0.00407383
P_run (local): 0.00216675
Multi Markov Model with Counting (MultiMMC) Prediction Test = 7.9394
LZ78Y Test: 99% complete
Correct: 3866
P_avg (global): 0.00402593
P_run (local): 0.00216675
LZ78Y Prediction Test = 7.95646
Min Entropy: 5.61735
В результате NIST считает, что я сгенерировал 5,6 бит / байт энтропии. Согласно моей оценке сжатия DIY, она составляет 5,3 бит / байт, что несколько более консервативно.
-> Кажется, данные подтверждают мнение о том, что компьютер, на котором запущено только программное обеспечение, может генерировать настоящую энтропию. И этот фон Нейман был неправ (но, возможно, верен для своего времени).
Я предлагаю следующие ссылки, которые могут поддержать мое требование:
Есть ли стохастические модели недетерминизма в скорости выполнения программы?
WCET Анализ вероятностных жестких систем реального времени
Существует ли программный алгоритм, который может генерировать недетерминированный образец хаоса? и актуальность хаотических эффектов.
Параллели с квантовым принципом энтропийной неопределенности
Запись в блоге Алексея Шипилёва о хаотическом поведении nanoTime (). Его точечный сюжет не отличается от моего.
System.nanoTime()
.