Я хаос.
Я — субстанция, из которой ваши художники и ученые строят ритмы.
Я дух, с которым ваши дети и клоуны смеются в счастливой анархии.
Я хаос.
Я жив и говорю тебе, что ты свободен.
— Эрис, богиня хаоса, раздора и замешательства Порядок невозможен без беспорядка.
Программисты часто погружаются в хаос в поисках гениальных идей, случайных чисел и магических коэффициентов, которые должны быть в каждом уважающем себя приложении.
В этой статье я покажу вам, как практически из ничего получить качественные образцы случайности, которыми вы сможете, например, поделиться со своими друзьями, любящими хаос.
Предупреждение юристам, политикам и прочим роботам: это полушутливая статья.
Входные данные Для получения хаоса нам понадобятся два файла, которые мы назовем «Семя Хаоса» и «Земля».
Семя Хаоса — небольшой файл, из которого родится хаос.
Earth — это файл произвольного размера, который задаст объем результирующей энтропии и немного увеличит случайность результата.
В принципе, можно было бы обойтись и без Земли, но на всякий случай лучше использовать ее — особенность случайных данных в том, что их трудно отличить от неслучайных.
Что, если мы генерируем только нули? Надежный, работающий файл гарантирует, что результат всегда будет хоть чем-то осязаемым.
Семя Хаоса Выбрать подходящего кандидата на роль Семени Хаоса – непростая задача.
Файл должен иметь хорошую начальную энтропию, и вы должны его искренне ненавидеть, потому что впоследствии он претерпит ужасные и болезненные изменения.
Изображения имеют хорошие показатели случайности, к тому же они разбросаны по всему Интернету.
Если доступа в Интернет нет, вполне вероятно, что ваше приложение-пожиратель хаоса будет работать на компьютере человека, который смотрит и сохраняет забавные картинки вместо того, чтобы жить насыщенной жизнью, поэтому не стоит беспокоиться.
Файлы идеальны на роль Семени Хаоса
Мы используем логотип DMCA. Теперь нам нужно что-то с этим сделать, как-то превратить из упорядоченного набора битов в беспорядочный.
С этой задачей хорошо справляется семейство псевдослучайных функций.
По их определению, не существует эффективного алгоритма, который отличал бы их выходные данные от выходных данных функции, генерирующей истинную случайную последовательность битов — именно то, что необходимо.
Один из моих любимых криптографических шифров — AES — представляет собой псевдослучайное преобразование, поэтому мы будем его использовать.
Нас совершенно не интересует какая-либо криптографическая стойкость, нам просто нужно превратить Семя Хаоса в самый бесконечный поток случайности.
Давайте возьмем первые 16 байт Seed в качестве ключа для AES. После этого просто зашифруем весь файл в режиме счетчика, обязательно сделайте это 5 раз подряд. Если нам нужно больше энтропии, чем содержится в Семени Хаоса, мы просто зашифровываем его еще 5 раз подряд. Вот так, без каких-либо случайных данных в качестве входных данных, вы можете получить неограниченный источник качественного хаоса! Самое главное — удалить исходный файл после превращения его в чистую энтропию и никому не рассказывать, что мы использовали, потому что в противном случае любой может получить точно такой же хаос, как и мы.
Хаос перестанет быть хаосом и его придется отбросить.
Чтобы в таких случаях не всегда выбрасывать сгенерированную случайность, мы куда-нибудь посеем Семя.
Земля В качестве Земли можно использовать любой файл.
Если задуматься, то можно было бы обойтись и без нее, но есть как минимум 5 причин, почему без Земли обойтись нельзя.
Идеальными кандидатами на роль являются различные сжатые данные, например, аудио- и видеозаписи — они достаточно большие и часто встречаются на компьютерах пользователей.
В фильмах Михалкова большая энтропия и местами та же Земля.
Было бы неплохо использовать их для демонстрации концепции, но у меня нет ни одного купленного экземпляра.
Поэтому мы используем композицию музыканта Брэд отстой , конкретно - " Ты никуда не пойдешь «Брэд не должен обижаться, потому что он выпускает свою музыку под лицензией CC BY-SA вместе со всеми источниками.
Более того, в отличие от многих других рассматриваемых кандидатов с Земли, его музыка совсем не отстой.
Мы посадим Семя в Землю, используя надежную и любимую всеми криптографами логическую функцию — XOR. Если смешать случайные данные с не такими уж случайными, вы получите случайные данные! Более того, независимо от того, сколько неслучайных данных мы смешиваем со случайными, на выходе все равно будут случайные данные.
Мечта гомеопата.
Кроме того, эта функция лежит в основе одноразового блокнота, единственного известного в настоящее время абсолютно стойкого шифра.
Программа Занимает 20 строк в Python, если у вас есть пьяес .
Код
использование: python script.py семенной_файл файл_земли выходной_файл Здесь результат смешивание песни Брэда с логотипом DMCA. Загрузите или создайте его сами и убедитесь, что результат абсолютно случайный! Всего 20 строк превращают любые два файла в драгоценный хаос.from pyaes import AESModeOfOperationCTR as Cipher from os import sys with open(sys.argv[1], "rb") as TheSeedOfChaosFile: key = TheSeedOfChaosFile.read(16) cypher = Cipher(key) TheSeedOfChaosFile.seek(0) TheSeedOfChaos = TheSeedOfChaosFile.read() with open(sys.argv[2], "rb") as TheEarthFile: with open(sys.argv[3], "wb") as TheEntropyFile: chunk = TheEarthFile.read(len(TheSeedOfChaos)) while chunk: for i in range(5): TheSeedOfChaos = cypher.encrypt(TheSeedOfChaos) chunk = [x ^ y for x, y in zip(chunk, TheSeedOfChaos[0:len(chunk)])] TheEntropyFile.write(bytearray(chunk)) chunk = TheEarthFile.read(len(TheSeedOfChaos))
pyaes работает и прекрасен в своей простоте, но это самая медленная вещь, которую я когда-либо импортировал в свой интерпретатор.
Буду рад, если идея кому-то понравится и он перепишет ее в более быструю версию.
Если кто-то создаст онлайн-сервис по обмену чистой энтропии во славу прочитанного, я пойму, что жил не зря.
Анализ Очевидно, что рандомность исходных файлов будет меньше финальных.
И машина, и человек не поймут, что произошло на выходе.
На всякий случай напишем небольшой скрипт, который считает статистические показатели файлов и проверяет: Исходный код скрипта import sys
import math
with open(sys.argv[1], "rb") as file:
data = file.read()
filesize = len(data)
frequencies = [0]*256
for byte in data:
frequencies[byte] += 1
frequencies = [freq / float(filesize) for freq in frequencies]
entropy = -sum([freq * math.log(freq, 2) for freq in frequencies])
mean = sum(frequencies) / len(frequencies)
stddev = [(freq - mean) ** 2 for freq in frequencies]
stddev = math.sqrt(sum(stddev) / len(stddev))
print('Shannon:')
print(entropy)
print('Mean: (ideal: ' + str(1/256) + ')')
print(mean)
print('StdDev:')
print(stddev)
Статистика оригинального Семени Хаоса
Шеннон: 7.942118575257812 Среднее: (идеально: 0,00390625) 0.003906250000000003 Стандартное отклонение: 0.0011614891032870488Источник статистики Земли
Шеннон: 7.973164196428091 Среднее: (идеально: 0,00390625) 0.0039062499999999987 Стандартное отклонение: 0.0008704476953482593Статистика результатов
Шеннон: 7.999936528333672 Среднее: (идеально: 0,00390625) 0.0039062499999999983 Стандартное отклонение: 3.665423289519401e-05Результат имеет почти идеальную энтропию и очень малый разброс вероятностей появления разных байтов.
Всегда проверяйте свою энтропию, особенно перед тем, как отправить ее кому-либо.
Возможно, ваш хаос недостаточно хаотичен и человек не будет рад такому подарку.
Заключение Таким простым способом из файлов, часто встречающихся в домашнем хозяйстве, можно быстро получить пару гигабайт совершенно случайных байтов.
Главное — удалить источник Семени Хаоса, иначе злоумышленник сможет получить такой же хаос, как и ваш, испортив всю идею.
Получающиеся потоки хаоса пригодны для перезаписи ранее удаленных вами на диске файлов (для этого хаос желательно сохранять и удалять его только по мере увеличения потребности в дисковом пространстве), они пригодятся в различных прикладных программах.
которые требуют много случайных данных, причем быстро, а также, благодаря хорошим статистическим показателям, являются прекрасным предложением последователю дискордианства.
Ну.
почему бы не устроить настоящий хаос? Теги: #хаос #случайные числа #АЭС #сарказм #как сломать адвоката #sos меня держат на энтропийной фабрике #Госдума запретила ГПСЧ #Криптография
-
Продажа Компьютерного Оборудования
19 Oct, 24 -
Геймификация В Реальном Мире. За И Против
19 Oct, 24 -
С Этим Днем, Хабр!
19 Oct, 24 -
Firefox 4B1
19 Oct, 24 -
Немного О Фототехнике Canon
19 Oct, 24