МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ФГБОУ ВО «БРЯНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» Кафедра «Системы информационной безопасности» Дисциплина: «Программно-аппаратные средства обеспечения информационной безопасности» Курсовая работа на тему: «Программная реализация генератора ИСП» Студент гр. О-19-БАС-боис-С: Ступин А.О. Руководитель: ст. преп. Лысов Д.А. Брянск 2023 Содержание Содержание........................................................................................................ 2 Введение ............................................................................................................ 3 1. Определение случайных последовательностей ......................................... 4 1.1. Понятие случайности ............................................................................ 4 1.2. Псведослучайные последовательности ............................................... 5 1.3. Генерация истинно случайных последовательностей. ...................... 7 2. Программная реализация генератора ИСП ................................................ 9 2.1. Назначение и принципы работы программы ...................................... 9 2.2. Функциональное описание работы программы .................................. 9 Заключение ...................................................................................................... 11 Список литературы ......................................................................................... 12 Приложение ..................................................................................................... 13 Введение В современном мире информационных технологий безопасность и конфиденциальность данных становятся все более приоритетными аспектами. Генерация и использование истинно случайных последовательностей играют ключевую роль в обеспечении криптографической защиты. Цель настоящей курсовой работы заключается в исследовании принципов и методов генерации истинно случайных последовательностей, а также в создании программной реализации генерации истинно случайных последовательностей на основе данных, полученных с веб-сайта транзакций блокчейн-сети. В ходе работы будут рассмотрены основные принципы генерации случайных данных и проблемы, связанные с использованием псевдослучайных последовательностей. В работе будет представлена программная реализация алгоритма генерации истинно случайных последовательностей, использовании данных транзакций блокчейн-сети. основанного на 1. Определение случайных последовательностей 1.1. Понятие случайности Генерация случайных чисел представляет собой сложную и важную задачу в сфере информационной безопасности и криптографии. Введение понятия случайности требует понимания фундаментальных аспектов того, что такое случайность в контексте последовательностей чисел. В общем смысле случайность описывает отсутствие закономерностей, что делает элементы последовательности непредсказуемыми. Однако, для того чтобы говорить об истинной случайности, нужно уточнить критерии, по которым можно судить о степени случайности. Случайность – это понятие, которое описывает отсутствие любых закономерностей в данных. Истинно случайная последовательность означает, что каждый элемент этой последовательности нельзя предсказать и не зависит от предыдущих элементов. Это отсутствие зависимостей и предсказуемости делает такие последовательности фундаментально непредсказуемыми. В контексте генерации случайных чисел это подразумевает отсутствие структуры, которая может быть использована для предсказания будущих чисел в последовательности. Для повышения уровня случайности можно обратиться к внешним источникам. Источники настоящих случайных чисел найти крайне трудно. Физические шумы, такие, как детекторы событий ионизирующей радиации, дробовой шум в резисторе или космическое излучение, могут быть такими источниками. Однако применяются такие устройства в приложениях сетевой безопасности редко. Сложности также вызывают грубые атаки на подобные устройства. У физических источников случайных чисел существует ряд недостатков: Время и трудозатраты при установке и настройке; Дороговизна; Генерация случайных чисел происходит медленно, непродуктивно; Невозможность воспроизведения ранее сгенерированной последовательности случайных чисел. Современные технологии стремятся к созданию более сложных методов генерации случайных чисел, включая использование квантовых явлений, физических процессов и внешних источников случайности, чтобы добиться более высокой степени случайности в цифровых системах. 1.2. Псведослучайные последовательности В современных вычислениях мы редко имеем дело с истинно случайными последовательностями. В мире вычислений и информационных технологий, псевдослучайные последовательности представляют собой ключевой элемент. Эти последовательности порождаются алгоритмами и, хотя на первый взгляд они могут выглядеть случайными, на самом деле, они детерминированы — полностью определяются начальными условиями. Псевдослучайные программировании, последовательности статистике и широко моделировании используются из-за их в высокой предсказуемости и управляемости. Однако, их применение должно быть осознанным и зависеть от контекста использования. Псевдослучайные последовательности обладают детерминированностью, и их стойкость к взлому зависит от стойкости алгоритма генерации и секретности начального значения (семени). В криптографии важно поддерживать высокую степень стойкости, чтобы предотвратить воспроизведение последовательности злоумышленниками. Псевдослучайные генераторы (ПСГ, ГПСЧ) принимают начальное число, называемое семенем (seed), и используют его для инициализации алгоритма. Это означает, что при одинаковом семени ПСГ всегда породит одинаковую последовательность чисел. Даже небольшие изменения в семени могут привести к существенным изменениям в последовательности, что делает их весьма предсказуемыми. ПСГ состоит из алгоритма, в котором вводится некоторое начальное значение и затем методом итераций производится последовательность псевдослучайных чисел. Хотя период последовательности может быть очень длинным, но она всегда будет периодической. Одним из свойств таких последовательностей является тот факт, что, как только один из элементов последовательности известен, все остальные элементы – и предшествующие, и последующие, – могут быть определены. Очевидно, что это свойство особенно важно учитывать при использовании таких последовательностей в криптографии для генерации ключа. Хорошие ПСГ выдерживают большинство статистических тестов, но тем не менее важно понимать, что если последовательность считается достаточно долго, то при проведении некоторых тестов может быть получен отрицательный результат, поскольку последовательность все-таки периодична. Может показаться, что ПСГ бессмысленны, поскольку имеют много ограничений, но это не так. Несмотря на то, что они не производят истинно случайные числа, эти генераторы имеют ряд преимуществ. Во-первых, их стоимость практически равна нулю, так как они могут быть реализованы в программном обеспечении и многочисленные библиотеки находятся в свободном доступе. Во-вторых, их главный недостаток – а именно что последовательности, которые они производят, воспроизводимы – может в некоторых случаях представлять собой преимущество. При использовании случайных чисел для научных расчетов иногда бывает полезно иметь возможность воспроизвести последовательность чисел при отладке программы моделирования. Это одна из причин – другая причина состоит в отсутствии хороших физических генераторов случайных чисел, – вот почему эти генераторы широко используются в этих приложениях. Хороший подход заключается в использовании псевдослучайных чисел при отладке, а затем, при расчетах, – в использовании физического генератора для уточнения и подтверждения моделирования. Поскольку псевдослучайные последовательности детерминированы, они обладают ограниченной длиной периода — максимального количества чисел, которое может быть сгенерировано перед тем, как последовательность начнет повторяться. Длина периода является важным аспектом в оценке качества ПСГ. Большинство простых арифметических генераторов хотя и обладают большой скоростью, но страдают от многих серьезных недостатков: Слишком короткий период/периоды; Последовательные значения не являются независимыми; Некоторые биты «менее случайны», чем другие; Неравномерное одномерное распределение; Обратимость. 1.3. Генерация истинно случайных последовательностей. Генерация действительно случайных чисел — сложная задача, но существует несколько методов, которые можно использовать для их генерации. Вот несколько примеров: Аппаратные методы: Одним из способов генерации действительно случайных чисел является использование аппаратных методов, таких как использование счетчика Гейгера для обнаружения радиации или измерение электрического шума. Эти методы генерируют случайные данные, на которые не влияют никакие алгоритмы или формулы. Криптографические методы: Криптографические алгоритмы могут быть использованы для генерации случайных чисел, но они требуют источника энтропии, которая является мерой случайности входных данных. Энтропия может быть получена из различных источников, таких как тайминг клавиатуры, движения мыши и сетевой трафик. Методы выборки: Методы выборки предполагают выбор случайных данных из большого массива данных. Например, атмосферный шум или радиопомехи могут быть отобраны для генерации случайных чисел. Физические процессы: демонстрируют случайное Физические поведение, процессы, также которые могут быть использованы для генерации случайных чисел. Например, распад радиоактивных изотопов или время космических лучей можно использовать для генерации случайных данных. Стоит отметить, что истинно случайные числа не являются детерминированными, то есть их нельзя предсказать или воспроизвести. В отличие от них, генераторы псевдослучайных чисел (ГПСЧ) генерируют последовательность чисел, которая кажется случайной, но на самом деле определяется алгоритмом или формулой. Хотя ГПСЧ могут быть полезны во многих приложениях, их не следует использовать в ситуациях, когда требуется истинная случайность, например, в криптографии или азартных играх. 2. Программная реализация генератора ИСП 2.1. Назначение и принципы работы программы Программа разработана для генерации истинно случайной последовательности чисел на основе данных транзакций в блокчейне. Подобная реализация генератора ИСП могла бы найти свое применение в области криптографии и безопасности информации, где требуется надежный и случайный источник для создания ключей шифрования и других криптографических артефактов. В основе процесса генерации лежат данные о последних транзакциях в сети блокчейна «Polygon», а конкретно последние адреса кошельков, с которых была произведена транзакция, это могут быть абсолютно любые транзакции в сети, что делает последовательность еще более непредсказуемой, каждую секунду происходит более 100 уникальных транзакций. В свою очередь сам блокчейн, как распределенный и невозможный для подделки реестр транзакций, предоставляет уникальный источник данных, который сложно предсказать. Используя вышеописанные данные, программа подвергает их обработке, не допуская дублирования и избирая из адресов только числа, не учитывая повторяющиеся за последние транзакции кошельки, и начала адресов «0x». Важно отметить, что код не претендует на полную истинную случайность, так как она сложна для достижения в цифровых системах. Однако, его основой являются данные, которые крайне сложно предсказать. Также, данную последовательности можно использовать как «семя» для генератора псевдослучайных последовательностей, таким образом злоумышленник практически теряет возможность узнать источник генерации истинно случайного «семени». 2.2. Функциональное описание работы программы Программа начинает с импорта необходимых библиотек, таких как «requests», «BeautifulSoup» и «re». Данные библиотеки предоставляют функциональность для отправки HTTP-запросов, парсинга HTML-страниц и работы с регулярными выражениями. Функция get_website_content(url) выполняет HTTP-запрос к указанному URL и возвращает содержимое веб-страницы. Для эмуляции браузера используется заголовок User-Agent. Функция extract_from_addresses(content) принимает HTML-контент вебстраницы и использует библиотеку BeautifulSoup для парсинга HTML. Она находит таблицу с классом 'table-hover' и извлекает адреса отправителей из определенных столбцов. Получение данных с веб-страницы происходит за счет функции get_website_content, она используется для получения HTML-контента страницы с указанным URL. Чтобы извлечь адреса отправителей из полученного HTML-контента программа вызывает функцию extract_from_addresses. Полученные адреса отправителей представляют собой источник для формирования истинно случайной последовательности. Эта часть кода не предоставлена, но она была предположительно реализована в вашем коде. Программа выводит уникальные адреса отправителей, собранные из транзакций. Полный текст программы предоставлен в приложении. Заключение В ходе данной курсовой работы мы рассмотрели концепции истинно случайных и псевдослучайных последовательностей, а также представили программу, созданную для генерации истинно случайной последовательности на основе данных транзакций в блокчейне. Программа взаимодействует с вебсайтом, извлекая адреса отправителей транзакций, и использует их для формирования истинно случайной последовательности. Основными принципами работы программы являются использование блокчейна в качестве источника данных и обработка полученных адресов для создания случайной обеспечение последовательности. высококачественной Программа ориентирована на случайности, необходимой для криптографических задач и других областей, где важна непредсказуемость данных. Однако важно отметить, что, несмотря на использование блокчейна, истинная случайность в цифровых системах остается сложной задачей. Поэтому программа стоит как один из подходов к генерации случайных данных, а не как единственный источник истинно случайных последовательностей. В будущем развитие программы может включать в себя дополнительные методы обработки данных для повышения степени непредсказуемости. Также возможно внедрение дополнительных источников случайности для обеспечения еще более высокой степени случайности в создаваемых последовательностях. Список литературы 1. Панкратов С. Законы непредсказуемы // Наука и жизнь. — М.: Правда, 1988. —172 с. 2. Григорьев И.В, Бородкин Д.К., Сборник научных трудов молодых ученых и студентов. — Ангарск: АГТА, 2014. —237с. 3. Бобнев М. П. Генерирование случайных сигналов и измерение их параметров. — М.: Энергия, 1966. — 120 с. 4. Златопольский Д.М. Основы программирования на языке Python. – М.: ДМК Пресс, 2017. – 284 с. 5. Лутц М. Программирование на Python, том I, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 992 с. 6. Лутц М. Программирование на Python, том II, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 992 с. 7. Гэддис Т. Начинаем программировать на Python. – 4-е изд.: Пер. с англ. – СПб.: БХВ-Петербург, 2019. – 768 с. 8. Лучано Рамальо Python. К вершинам мастерства. – М.: ДМК Пресс, 2016. – 768 с. 9. Свейгарт, Эл. Автоматизация рутиных задач с помощью Python: практическое руководство для начинающих. Пер. с англ. — М.: 10. Вильямc, 2016. – 592 с. Рейтц К., Шлюссер Т. Автостопом по Python. – СПб.: Питер, 2017. – 336 с.: ил. – (Серия «Бестселлеры O’Reilly»). Приложение import requests from bs4 import BeautifulSoup import re def get_website_content(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } # Используем заголовок User-Agent для эмуляции браузера response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: return None def extract_from_addresses(content): soup = BeautifulSoup(content, 'html.parser') table = soup.find('table', {'class': 'table-hover'}) if table: rows = table.find_all('tr') addresses = set() # Используем множество для уникальных результатов start_index = max(0, len(rows) - 20) # Начальный индекс для последних 20 результатов for row in rows[start_index:]: cells = row.find_all('td') if len(cells) >= 4: address = cells[1].text.strip() # Используем индекс 1 для столбца "from" address_cleaned = re.sub(r'^0[xX]', '', address) # Удаляем первый символ "0x" или "0X" address_digits = re.sub(r'[^0-9]', '', address_cleaned) # Удаляем все символы, кроме цифр addresses.add(address_digits) if len(addresses) >= 5: # Если достигнуто 5 уникальных выводов, выходим из цикла break return addresses else: return None website_url = "https://polygonscan.com/txs" content = get_website_content(website_url) if content: from_addresses = extract_from_addresses(content) if from_addresses: while True: try: num_chars = int(input("Введите количество символов для вывода (от 1 до 100): ")) if num_chars < 1 or num_chars > 100: raise ValueError break except ValueError: print("Некорректный ввод. Пожалуйста, введите число от 1 до 100.") merged_output = ''.join(from_addresses) if len(merged_output) > num_chars: merged_output = merged_output[:num_chars] print(merged_output) else: print("Адреса не найдены.") else: print("Не удалось получить содержимое веб-сайта.")