2023 [11] Хеш-пароль
Система аутентификации проверяет корректность введенного пароля, сравнивая вычисленное хеш-значение. Инженеру Павлу удалось перехватить несколько запросов(паролей) и вычисленных хеш-значений (см. таблицу).
Пароль
|
Хеш-значение (в 16-ом формате)
|
dragon
|
6F 0D 14 28
|
monkey
|
65 1A 28 27
|
strongestpassword
|
6E 36 21 2B
|
password
|
77 2E 2C 1E
|
Павлу удалось частично восстановить программный код генератора хеш-значений
(см. листинги 1, 2).
Листинг 1 – Функция нормирования длины пароля
Листинг 2 – Функция получения одного хеш-значения строки
Павлу удалось определить, что все пароли перед вычислением хеш-значений, нормируются по длине к 9 символам. Также стало известно, что для каждого байта хеш значения используется свой массив коэффициентов из 0 и 1 (маска), то есть для вычисления первого байта хеш значения применяется маска1, для второго байта – маска2 и так далее.
Помогите Павлу и определите значение масок и правильное хеш-значение для пароля:
superman
К задаче прилагается:
«listing.cpp» – листинг функция на языке программирования C++,
«listing.py» – листинг функция на языке программирования Python.
Показать подсказку
Каждый первый хеш-байт паролей получен с использованием одинаковой маски.
Показать решение
Для решения задачи необходимо перебрать все значения масок и сравнить результат вычисления хеш-значений на известных примерах из таблицы.
Если нормированная строка имеет длину 9 символов, то и размер маски так же равен 9 числам. Числа в маске могут принимать значение 0 или 1.
Алгоритм решения:
1) Нормируем длину известных паролей (используем функцию normalizeDataLen с параметром size=9).
2) Перебираем значение маски от {0,0,0,0,0,0,0,0,0} до {1,1,1,1,1,1,1,1,1} и вычисляем первый байт хеш-значения. Находим такую маску, при которой хеш-значение первого байта совпадает во всех четырех примерах. При этом значение маски должно быть одинаково во всех четырех примерах.
3) Выполняем п.2) для 2-го, 3-го и 4-го байта хеш-значений. Формируем 4 маски.
4) Используем сформированные в п.3) маски для вычисления 4-х байт хеш-значения для пароля “superman”. Предварительно строку необходимо нормализовать до длины 9 символов (supermans).
Показать ответ
Хеш-значение – 72 2F 21 27.
Маски: {0,0,0,0,1,0,0,0,0},
{1,1,1,1,1,0,0,0,0},
{0,0,0,0,1,1,1,1,1},
{0,1,0,1,1,1,0,1,0}.
<< Назад в раздел (Все задания)