Как и ответы выше, я могу повторить, что это во многом зависит от того, что вы проверяете.
В нашем коде было несколько мест, где мы хотели убедиться, что ошибки программиста не могут привести к передаче случайных байтов в качестве закрытых ключей AES или EC и т. Д.
Конкретный характер ошибок, о которых я беспокоился, был больше о 1. шаблонах последовательности байтов и 2. общих значениях bigint, не распределенных случайным образом. Вы можете увидеть список вещей, которые нас беспокоили в модульных тестах.
Не желая иметь дело с установкой numpy везде и проводя множество очень дорогих тестов, я пишу дешевый набор базовых тестов, которые исправили конкретные проблемы, которые мы искали в коде:
В любом случае, вы могли бы сделать то же самое. Используйте модифицированную версию кода adhoc ниже и генерируйте статистику того, что вы считаете хорошим источником случайности. Тогда сравните с вашим сомнительным источником.
https://github.com/earonesty/dotfiles/blob/master/randbytestest.py
Резюме:
- установить пакет runstats
- вычисляет статистику по таким вещам, как регрессия для смежных значений, каждого n-го значения, наборов значений, интерпретируемых как отдельные значения
- вычислить и сохранить статистику для 10 тыс. Сэмплов из urandom
randbytestest.py -b -l 1024 -i 10000
randbytestest.py -b -l 32 -i 10000
randbytestest.py -b -l 16 -i 10000
- сравнить эти статистические данные с сомнительными значениями с помощью p-val запроса о неверности
Это определенно не строго. Но он также обнаруживает и предотвращает все проблемы, которые нас беспокоили.