- •Федеральное агенство воздушного транспорта (росавиация)
- •1. Моделирование функции хэширования на основе алгоритма симметричного блочного шифрования.
- •2. Исследование функции хэширования по гост р 34.11-94
- •3. Исследование электронной цифровой подписи по алгоритму Эль-Гамаля (egsa)
- •4. Исследование электронной цифровой подписи по гост р 34.10-94 (гост р 34.10-01)
- •Сравнительный анализ алгоритмов эцп:
Федеральное агенство воздушного транспорта (росавиация)
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)
Кафедра вычислительных машин, комплексов, сетей и систем.
Лабораторная работа защищена с оценкой ____________________
____________________
(подпись преподавателя, дата)
ЛАБОРАТОРНАЯ РАБОТА №3
по дисциплине «Основы информационной безопасности».
Тема: «КРИПТОГРАФИЧЕСКИЕ МЕТОДЫ ОБЕСПЕЧЕНИЯ ПОДЛИННОСТИ И ЦЕЛОСТНОСТИ ЭЛЕКТРОННЫХ ДОКУМЕНТОВ. ЭЛЕКТРОННАЯ ЦИФРОВАЯ ПОДПИСЬ»
Выполнила студент группы ИС221
Магальник Екатерина Борисовна
Руководитель: Терентьев Андрей Иванович
МОСКВА – 2025
Цель работы.
Изучение современных принципов обеспечения подлинности и целостности электронных документов с использованием методов криптографического преобразования информации. Построение функций хэширования на основе блочных шифраторов с секретным ключом. Исследование и апробирование функции хэширования по ГОСТ Р 34.11–94 и алгоритмов электронной цифровой подписи EGSA (Эль-Гамаля), ГОСТ Р 34.10–94 и ГОСТ Р 34.10–01.
Порядок выполнения работы.
Моделирование функции хэширования на основе алгоритма симметричного блочного шифрования
Исследование функции хэширования по ГОСТ Р 34.11-94
Исследование электронной цифровой подписи по алгоритму Эль-Гамаля (EGSA)
Исследование электронной цифровой подписи по ГОСТ Р 34.10-94 (ГОСТ Р 34.10-01)
Ход работы.
1. Моделирование функции хэширования на основе алгоритма симметричного блочного шифрования.
Функция
хэширования:
Текст, подлежащий хэшированию: ИМИТОВСТАВКА.
Начальное хэш-значение z0: 923F82A4AF194F9B.
Стандарт симметричного шифрования: ГОСТ 28147-89.
Листинг.
# S-блоки CryptoPro A SBOX = ( (4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3), (14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9), (5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11), (7, 13, 14, 3, 0, 6, 9, 10, 1, 15, 11, 8, 12, 5, 2, 4), (6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2), (4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14), (13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12), (1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12), ) def gost_encrypt(block: bytes, key: bytes) -> bytes: if len(block) != 8: raise ValueError("Block must be 8 bytes") if len(key) == 8: key = key * 4 # повторяем до 32 байт elif len(key) != 32: raise ValueError("Key must be 8 or 32 bytes") n1 = int.from_bytes(block[4:], 'little') n2 = int.from_bytes(block[:4], 'little') round_keys = [] for i in range(8): k_part = key[i * 4:(i + 1) * 4] k_int = int.from_bytes(k_part, 'little') round_keys.append(k_int) all_keys = (round_keys * 3) + round_keys[::-1] for i in range(32): temp = (n1 + all_keys[i]) & 0xFFFFFFFF result = 0 for j in range(8): sbox_val = SBOX[j][(temp >> (4 * j)) & 0xF] result |= (sbox_val << (4 * j)) result = ((result << 11) | (result >> 21)) & 0xFFFFFFFF n1, n2 = n2 ^ result, n1 return n1.to_bytes(4, 'little') + n2.to_bytes(4, 'little') def pad_to_8(data): pad_len = (8 - len(data) % 8) % 8 return data + b'\x00' * pad_len def split_blocks(data): return [data[i:i + 8] for i in range(0, len(data), 8)] def custom_hash(message_bytes, z0): blocks = split_blocks(pad_to_8(message_bytes)) z_prev = z0 for block in blocks: block = block.ljust(8, b'\x00') mi = block mi_int = int.from_bytes(mi, 'big') z_prev_int = int.from_bytes(z_prev, 'big') xor_val = (mi_int ^ z_prev_int).to_bytes(8, 'big') encrypted = gost_encrypt(xor_val, mi) enc_int = int.from_bytes(encrypted, 'big') zi_int = enc_int ^ mi_int ^ z_prev_int z_prev = zi_int.to_bytes(8, 'big') return z_prev # === Основная часть === z0 = bytes.fromhex("923F82A4AF194F9B") original_text = "ИМИТОВСТАВКА" mod_text = "ИМИТОВСТАВКБ" orig_bytes = original_text.encode('cp1251') mod_bytes = mod_text.encode('cp1251') orig_hash = custom_hash(orig_bytes, z0) mod_hash = custom_hash(mod_bytes, z0) print("Исходный текст:", original_text) print("Хэш (hex):", orig_hash.hex().upper()) print("\nМодифицированный текст:", mod_text) print("Хэш (hex):", mod_hash.hex().upper()) # Двоичное представление модифицированного текста mod_bin = ''.join(f"{b:08b}" for b in mod_bytes) print("\nДвоичное представление модифицированного текста:") print(mod_bin) # Хэш в двоичном и hex mod_hash_hex = mod_hash.hex().upper() mod_hash_bin = ''.join(f"{b:08b}" for b in mod_hash) print("\nХэш модифицированного текста:") print("Hex:", mod_hash_hex) print("Bin:", mod_hash_bin) print("\nХэши совпадают?", orig_hash == mod_hash) |
Демонстрация работы программы.
Рис. 1. Результат работы программы.
