개발/기록
NIST 패스워드 가이드라인 2024 업데이트
LeeHyoGeun
2025. 1. 9. 12:37
NIST 패스워드 가이드라인 2024 업데이트
핵심 요약
- 최소 8자 이상의 패스워드
- 특수문자 요구사항 없음
- 정기적인 강제 변경 불필요
- 패스워드 힌트 기능 제공 금지
- 취약 패스워드 차단
상세 가이드라인
1. 길이 요구사항
- 최소 8자 이상
- 최대 64자까지 허용
- 권장 길이: 15자 이상
2. 복잡성 규칙 완화
- 대소문자 혼용 강제 없음
- 특수문자 강제 없음
- 숫자 포함 강제 없음
3. 보안 강화 방안
- 취약 패스워드 목록 관리
- 무차별 대입 공격 방지
- 암호화된 저장 필수
구현 예시
function validatePassword(password) {
// 기본 검증
if (password.length < 8) {
return { valid: false, message: '비밀번호는 최소 8자 이상이어야 합니다.' };
}
if (password.length > 64) {
return { valid: false, message: '비밀번호는 최대 64자까지 가능합니다.' };
}
// 취약 패스워드 검사
const commonPasswords = ['password123', '12345678', 'qwerty123'];
if (commonPasswords.includes(password)) {
return { valid: false, message: '취약한 비밀번호입니다.' };
}
// 연속된 문자 검사
if (/(.)\1{2,}/.test(password)) {
return { valid: false, message: '동일한 문자를 3번 이상 연속 사용할 수 없습니다.' };
}
return { valid: true, message: '사용 가능한 비밀번호입니다.' };
}
import bcrypt from 'bcrypt';
async function hashPassword(password) {
const saltRounds = 12;
return await bcrypt.hash(password, saltRounds);
}
async function verifyPassword(password, hashedPassword) {
return await bcrypt.compare(password, hashedPassword);
}
권장 구현 사항
- 비밀번호 강도 측정기 제공
- 2단계 인증(2FA) 옵션 제공
- 로그인 시도 제한
- 해시된 비밀번호 저장
유용한 라이브러리
zxcvbn: 패스워드 보안을 단계로 검증해줌 0~4단계 있는데 3단계 이상 안전
npm i --save-dev @types/zxcvbn
https://www.npmjs.com/package/@types/zxcvbn
결론
새로운 NIST 가이드라인은 사용자 경험과 보안의 균형을 맞추는데 중점을 두고 있습니다. 복잡한 규칙보다는 길이와 취약성 검사에 집중하는 것이 더 효과적입니다.