Membandingkan Byte Kunci
Termasuk bagian Autentikasi dan Keamanan dalam perjalanan Node.js di Coddy. Pelajaran 5 dari 24.
Dua objek Buffer yang berbeda dapat menyimpan byte yang sama. Membandingkannya dengan === memeriksa identitas objek, bukan kecocokan isi byte. Untuk kunci rahasia, gunakan timingSafeEqual. Perbandingan byte demi byte yang berhenti pada ketidakcocokan pertama dapat membocorkan informasi melalui waktu eksekusinya. Fungsi ini menggunakan perbandingan byte dengan waktu konstan, kode login lainnya juga harus menghindari kebocoran waktu.
const same = token.length === savedToken.length
&& timingSafeEqual(token, savedToken);Pemeriksaan panjang penting karena timingSafeEqual memunculkan error jika panjangnya berbeda. Ekspresi && melewatkan perbandingan jika panjangnya berbeda. Kode awal menerjemahkan string hex yang diberikan menjadi Buffer untukmu. Fokuslah untuk mengembalikan hasil boolean. Proses login kata sandi lengkap terlebih dahulu membuat kunci dari kata sandi yang dicoba, lalu melakukan perbandingan ini.
Tantangan
MudahIni adalah proyek latihan kecil. Penyiapannya sudah disediakan. Edit hanya exercise.js.
Kembalikan {"same":true} ketika given dan expected berisi byte yang sama, jika tidak kembalikan false. Mengirim POST {"given":"abcd","expected":"abcd"} ke /result akan mengembalikan true. Mengubah given menjadi abce atau ab akan mengembalikan false tanpa memunculkan error. Input berupa hex yang valid.
Gunakan hasil timingSafeEqual yang diimpor setelah memeriksa panjang byte. Membandingkan string yang dienkode atau identitas Buffer bukan operasi aman yang sedang dilatih.
Coba sendiri
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 };
}
Semua pelajaran di Autentikasi dan Keamanan
1Kata Sandi
Byte dan Teks HeksadesimalMembuat Kunci Kata SandiSalt BaruJangan Simpan Kata SandiMembandingkan Byte KunciMemeriksa Kata SandiAturan PendaftaranLatihan sendiri: Playground Express