Confrontare i byte della chiave
Fa parte della sezione Autenticazione e sicurezza del percorso Node.js di Coddy. Lezione 5 di 24.
Due oggetti Buffer diversi possono contenere gli stessi byte. Confrontarli con === verifica l’identità degli oggetti, non la corrispondenza del contenuto in byte. Per le chiavi segrete, usa timingSafeEqual. Un confronto byte per byte che si interrompe alla prima differenza può divulgare informazioni attraverso i tempi di esecuzione. Questa funzione usa un confronto dei byte a tempo costante; anche il resto del codice di accesso deve evitare fughe di informazioni sui tempi di esecuzione.
const same = token.length === savedToken.length
&& timingSafeEqual(token, savedToken);Il controllo della lunghezza è importante perché timingSafeEqual genera un errore se le lunghezze sono diverse. L’espressione && salta il confronto quando le lunghezze differiscono. Il codice iniziale decodifica per te le stringhe esadecimali fornite in Buffer. Concentrati sulla restituzione di un risultato booleano. Per un accesso completo con password, prima si ricava la chiave tentata, poi si esegue questo confronto.
Sfida
FacileQuesto è un piccolo progetto di esercitazione. La configurazione è già fornita; modifica solo exercise.js.
Restituisci {"same":true} quando given ed expected contengono byte uguali, altrimenti false. Invia {"given":"abcd","expected":"abcd"} con POST a /result: restituisce true. Se cambi given in abce o ab, restituisce false senza generare errori. Gli input sono esadecimali validi.
Usa il risultato di timingSafeEqual importato dopo aver verificato le lunghezze dei byte. Confrontare stringhe codificate o le identità dei Buffer non è l'operazione sicura su cui fare pratica.
Provalo tu
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 };
}
Tutte le lezioni di Autenticazione e sicurezza
1Password
Byte e testo esadecimaleDerivare una chiave dalla passwordUn nuovo saltNon memorizzare mai le passwordConfrontare i byte della chiaveVerificare una passwordRegole di registrazioneEsercitati da solo: Playground Express