Menu
CoddyTech

Comparar bytes de clave

Parte de la sección Autenticación y seguridad del Journey de Node.js de Coddy. Lección 5 de 24.

Dos objetos Buffer diferentes pueden contener los mismos bytes. Compararlos con === comprueba la identidad de los objetos, no si el contenido de bytes coincide. Para las claves secretas, usa timingSafeEqual. Una comparación byte a byte que se detiene ante la primera discrepancia puede filtrar información a través del tiempo que tarda. Esta función usa una comparación de bytes en tiempo constante; el resto del código de inicio de sesión también debe evitar las filtraciones de tiempo.

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

La comprobación de la longitud es importante porque timingSafeEqual genera una excepción si las longitudes son diferentes. La expresión && omite la comparación cuando las longitudes difieren. El código inicial decodifica por ti las cadenas hexadecimales proporcionadas en objetos Buffer. Concéntrate en devolver un resultado booleano. Para iniciar sesión con una contraseña, primero se deriva la clave que se está probando y después se realiza esta comparación.

challenge icon

Desafío

Fácil

Este es un pequeño proyecto de práctica. Se proporciona su configuración; edita solo exercise.js.

Devuelve {"same":true} cuando given y expected contengan los mismos bytes; de lo contrario, devuelve false. Enviar POST {"given":"abcd","expected":"abcd"} a /result devuelve true. Cambiar given a abce o ab devuelve false sin lanzar una excepción. Las entradas son hexadecimales válidas.

Usa el resultado importado de timingSafeEqual después de comprobar las longitudes en bytes. Comparar cadenas codificadas o las identidades de los Buffer no es la operación segura que se está practicando.

Pruébalo tú mismo

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

Todas las lecciones de Autenticación y seguridad

Practica por tu cuenta: Playground de Express