Porównywanie bajtów klucza
Część sekcji Uwierzytelnianie i bezpieczeństwo ścieżki Node.js w Coddy. Lekcja 5 z 24.
Dwa różne obiekty Buffer mogą zawierać te same bajty. Porównanie ich za pomocą === sprawdza tożsamość obiektów, a nie zgodność zawartości bajtów. W przypadku kluczy tajnych użyj timingSafeEqual. Porównanie bajt po bajcie, które kończy się przy pierwszej niezgodności, może ujawnić informacje poprzez czas działania. Ta funkcja używa porównania bajtów o stałym czasie działania; pozostała część kodu logowania również musi unikać wycieków informacji przez czas działania.
const same = token.length === savedToken.length
&& timingSafeEqual(token, savedToken);Sprawdzenie długości jest ważne, ponieważ timingSafeEqual zgłasza błąd dla różnych długości. Wyrażenie && pomija porównanie, gdy długości się różnią. Kod początkowy dekoduje za Ciebie podane ciągi szesnastkowe do obiektów Buffer. Skup się na zwróceniu wartości logicznej. Pełne logowanie za pomocą hasła najpierw wyprowadza próbny klucz, a następnie wykonuje to porównanie.
Wyzwanie
ŁatwyTo niewielki projekt ćwiczeniowy. Konfiguracja jest już przygotowana; edytuj tylko exercise.js.
Zwróć {"same":true}, gdy given i expected zawierają identyczne bajty, a w przeciwnym razie false. Wysłanie POST z danymi {"given":"abcd","expected":"abcd"} do /result zwraca true. Zmiana given na abce lub ab powoduje zwrócenie false bez zgłaszania wyjątku. Dane wejściowe są poprawnymi wartościami szesnastkowymi.
Po sprawdzeniu długości bajtów użyj wyniku zaimportowanej funkcji timingSafeEqual. Porównywanie zakodowanych ciągów znaków lub tożsamości obiektów Buffer nie jest bezpieczną operacją, którą ćwiczysz.
Spróbuj swoich sił
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 };
}
Wszystkie lekcje w sekcji Uwierzytelnianie i bezpieczeństwo
1Hasła
Bajty i zapis szesnastkowyWyprowadzanie klucza z hasłaNowa sólNigdy nie przechowuj hasełPorównywanie bajtów kluczaSprawdzanie hasłaZasady rejestracjiPoćwicz samodzielnie: Edytor online Express