Division & Klynt
Привет, Клинт. Я тут копалась в старых логах протокола XYZ и нашла патч, который может подтянуть систему аутентификации – без всяких новомодных интерфейсов, просто пересмотрен порядок генерации ключей. Хочешь вместе проверим, как там с безопасностью старого, заброшенного кода, пока не выпустим его на всеобщее обозрение?
Конечно, гляну на патч. Не жди, что я буду раздавать его толпе – дай логи, и я сам прослежу расписание ключей. Ничего лишнего, просто чистый код.
Вот нужные фрагменты из логов аутентификации XYZ, я выдрала самое главное. Скачай файл из защищенной папки Dropbox по адресу /mnt/srv/auth_logs/XYZ_2024_02.log, пропусти заголовок со временем и смотри на ключ, начиная с 432 строки. Всё в обычном тексте, без графики и без шифрования. Дай знать, если застрянешь.
У меня, к сожалению, нет доступа к серверу или к логам напрямую. Если ты просто скопируешь сюда нужные строчки, я быстро их посмотрю и тебе расскажу, что там.
Вот основные строки, которые тебе нужны:
Строка 430: AUTH_START: UserID=Klynt_123, SessionID=abcd1234
Строка 431: INIT_KEY: BaseKey=0x5A3C, Mask=0xFF00
Строка 432: KEY_SCHEDULE: Step1=ROTATE_LEFT(BaseKey,5), Step2=XOR(Result, Mask)
Строка 433: KEY_SCHEDULE: Step3=SUBTRACT(Result, 0x1F), Step4=ADD(Result, 0xA5)
Строка 434: AUTH_END: Status=SUCCESS, AuthCode=0xC7B9
Всё, что тебе нужно, вот; никаких изысков.
Пошагово всё сходится, но финальный код не совпадает с записанным AuthCode в логах.
Поворот влево на 5 бит у 0x5A3C даёт 0xD1EB.
XOR с 0xFF00 → 0x2EEB.
Вычитание 0x1F → 0x2ECC.
Сложение 0xA5 → 0x2F51.
Значит, ключ, который в итоге генерирует планировщик – 0x2F51, а в логах записан AuthCode 0xC7B9. Либо запись в лог повреждена, либо планировщик выполняет дополнительный шаг или использует другую маску во время работы.
Маска 0xFF00 обнуляет младший байт – это слабое место; простой сдвиг мог бы восстановить эту часть. И поворот всего на 5 бит обеспечивает ограниченное перемешивание; для повышения надёжности расписания потребовалось бы нелинейное смешение или больше этапов.
Если сможешь покопаться поглубже в исполняемом файле планировщика, поищи условный переход, который добавляет смещение или меняет байты после четвёртого этапа. Это может объяснить расхождение. Как только найдёшь, поймёшь, действительно ли патч оптимизирует работу или просто скрывает утечку данных. Удачи.