개발/기록

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

권장 구현 사항

  1. 비밀번호 강도 측정기 제공
  2. 2단계 인증(2FA) 옵션 제공
  3. 로그인 시도 제한
  4. 해시된 비밀번호 저장

유용한 라이브러리 

zxcvbn: 패스워드 보안을 단계로 검증해줌 0~4단계 있는데 3단계 이상 안전

npm i --save-dev @types/zxcvbn

 

https://www.npmjs.com/package/@types/zxcvbn

결론

새로운 NIST 가이드라인은 사용자 경험과 보안의 균형을 맞추는데 중점을 두고 있습니다. 복잡한 규칙보다는 길이와 취약성 검사에 집중하는 것이 더 효과적입니다.

 

https://sprinto.com/blog/nist-password-guidelines/