Menu
CoddyTech

Comparer les octets de clé

Fait partie de la section Authentification et sécurité du Journey Node.js de Coddy. Leçon 5 sur 24.

Deux objets Buffer différents peuvent contenir les mêmes octets. Les comparer avec === vérifie l’identité des objets, et non la correspondance de leur contenu en octets. Pour les clés secrètes, utilisez timingSafeEqual. Une comparaison octet par octet qui s’arrête à la première différence peut divulguer des informations par sa durée. Cette fonction effectue une comparaison des octets en temps constant ; le reste du code de connexion doit également éviter les fuites temporelles.

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

La vérification de la longueur est importante, car timingSafeEqual lève une exception lorsque les longueurs diffèrent. L’expression && ignore la comparaison lorsque les longueurs diffèrent. Le code de départ décode pour vous les chaînes hexadécimales fournies en Buffer. Concentrez-vous sur le renvoi d’un résultat booléen. Une connexion complète par mot de passe dérive d’abord la clé tentée, puis effectue cette comparaison.

challenge icon

Défi

Facile

Il s’agit d’un petit projet d’entraînement. La configuration est fournie ; modifie uniquement exercise.js.

Renvoie {"same":true} lorsque given et expected contiennent des octets identiques, sinon renvoie false. Envoyer {"given":"abcd","expected":"abcd"} avec POST à /result renvoie true. Remplacer given par abce ou ab renvoie false sans provoquer d’erreur. Les entrées sont des valeurs hexadécimales valides.

Utilise le résultat de timingSafeEqual après avoir vérifié les longueurs en octets. Comparer les chaînes encodées ou les identités des Buffer n’est pas l’opération sécurisée mise en pratique ici.

Essayez vous-même

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 };
}

Toutes les leçons de Authentification et sécurité

Entraînez-vous par vous-même : Playground Express