본문 바로가기
Backend2026년 6월 11일3분 읽기

비밀번호 해싱, bcrypt와 argon2 중 무엇을

YS
김영삼
조회 347
비밀번호 해싱, bcrypt와 argon2 중 무엇을

핵심 요약

비밀번호는 느린 해시 함수로 저장해야 한다. argon2id가 현대적 권장(메모리-하드)이고, bcrypt는 오래 검증된 안전한 선택이다. SHA-256·MD5는 너무 빨라 무차별 대입에 취약하니 절대 쓰지 마라. 솔트는 두 라이브러리가 자동 처리한다.

1. 권장과 파라미터

알고리즘핵심 파라미터비고
argon2idmemory·time·parallelismOWASP 1순위
bcryptcost(라운드) 10~1272바이트 제한 주의

2. 사용 예

// bcrypt
const hash = await bcrypt.hash(password, 12)
const ok = await bcrypt.compare(input, hash)

// argon2
const hash = await argon2.hash(password)   // argon2id 기본
const ok = await argon2.verify(hash, input)

3. 함정

  • bcrypt는 72바이트 이후를 잘라낸다 — 매우 긴 비번/사전 해시 조합 주의
  • cost를 너무 낮추면 보안 약화, 너무 높이면 로그인 지연 — 서버에서 ~100ms 목표로 조정
  • 해시 비교는 반드시 라이브러리 compare/verify로(타이밍 공격 방지)

자주 묻는 질문

SHA-256으로 해시하면 안전하지 않나요?

SHA 계열은 빠르게 설계돼 GPU로 초당 수십억 번 시도가 가능합니다. 비밀번호엔 의도적으로 느린 bcrypt/argon2를 써야 합니다.

솔트를 직접 만들어야 하나요?

아니요. bcrypt/argon2는 솔트를 자동 생성해 해시 문자열에 포함합니다. 별도 컬럼이 필요 없습니다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록