Menu
CoddyTech

비밀번호 키 유도하기

Coddy Node.js 여정의 인증과 보안 섹션에 포함된 레슨. 24개 중 2번째.

비밀번호 키는 비밀번호와 솔트를 바탕으로 계산됩니다. 인코딩과 달리 이 계산은 역으로 수행할 수 있도록 설계되지 않았습니다. Scrypt는 매번 시도할 때마다 연산을 요구하여 비밀번호 추측에 많은 비용이 들게 합니다. 비밀번호, 솔트, 키 길이를 포함한 파생 설정이 같으면 같은 키를 다시 생성할 수 있습니다. 이렇게 파생된 키를 일반적으로 비밀번호 해시라고 합니다.

const key = await scryptAsync('invite 4821', 'example-only', 16);
return key.toString('hex');

세 번째 인수는 키 길이이며 단위는 바이트입니다. 제공된 도우미는 promisify를 사용해 Node의 콜백 기반 scrypt를 프로미스를 반환하는 함수로 바꿉니다. 파일 읽기처럼 await를 사용할 수 있습니다. 이 실습에 사용된 고정 솔트를 이용하면 결과를 비교할 수 있습니다. 실제 비밀번호 저장에서는 매번 새 무작위 솔트를 사용합니다.

다음 실습에서는 새 비밀번호를 저장할 때 필요한 새 무작위 솔트를 생성합니다.

challenge icon

챌린지

쉬움

이것은 간단한 연습 프로젝트입니다. 설정은 제공되어 있으니 exercise.js만 수정하세요.

함수를 완성하세요. 제공된 비밀번호와 솔트에서 32바이트 키를 파생한 다음, 16진수 문자열을 key에 담아 반환하세요. {"password":"practice","salt":"fixed-for-this-exercise"}를 /result에 두 번 POST하면 동일한 64자 키가 나타납니다. 입력값 중 하나를 바꾸면 키도 바뀝니다.

직접 해보기

import { scryptAsync } from './crypto.js';
export async function exercise({ password, salt }) {
    return { key: password };
}

인증과 보안의 모든 레슨

직접 연습해 보세요: Express 플레이그라운드