Menu
CoddyTech

Сравнение байтов ключа

Часть раздела Аутентификация и безопасность путешествия по Node.js на Coddy. Урок 5 из 24.

Два разных объекта Buffer могут содержать одинаковые байты. Сравнение с помощью === проверяет идентичность объектов, а не совпадение содержимого байтов. Для секретных ключей используйте timingSafeEqual. Сравнение байт за байтом, которое останавливается при первом несовпадении, может раскрыть информацию через время выполнения. Эта функция выполняет сравнение байтов за постоянное время; остальной код входа в систему тоже должен избегать утечек по времени.

const same = token.length === savedToken.length
    && timingSafeEqual(token, savedToken);

Проверка длины важна, потому что timingSafeEqual выдаёт ошибку при разной длине. Выражение && пропускает сравнение, если длины различаются. В стартовом коде предоставленные шестнадцатеричные строки уже декодируются в объекты Buffer. Сосредоточьтесь на возврате логического значения. При полноценном входе по паролю сначала вычисляется предполагаемый ключ, а затем выполняется это сравнение.

challenge icon

Задание

Легко

Это небольшой учебный проект. Настройка уже выполнена; редактируй только exercise.js.

Возвращай {"same":true}, если given и expected содержат одинаковые байты, иначе возвращай false. Отправка {"given":"abcd","expected":"abcd"} методом POST на /result возвращает true. Если изменить given на abce или ab, возвращается false без выбрасывания исключения. Входные данные содержат корректные шестнадцатеричные значения.

Используй результат timingSafeEqual после проверки длины массивов байтов. Сравнение закодированных строк или идентичности объектов Buffer — не та безопасная операция, которую нужно здесь освоить.

Попробуйте сами

import { timingSafeEqual } from 'node:crypto';
export function exercise(input) {
    const given = Buffer.from(input.given, 'hex');
    const expected = Buffer.from(input.expected, 'hex');
    return { same: given === expected };
}

Все уроки раздела Аутентификация и безопасность

Потренируйтесь самостоятельно: Песочница Express