본문 바로가기
개발정리 (nodeJS)

[nodeJS] Node.js에서 Bcrypt를 사용한 비밀번호 해싱 및 검증하기

by 할리갈리0 2024. 11. 21.

비밀번호 보안은 웹 애플리케이션에서 매우 중요한 요소입니다. 사용자 비밀번호를 안전하게 저장하기 위해서는 해싱(Hashing) 기법을 사용해야 합니다. Bcrypt는 비밀번호 해싱에 널리 사용되는 라이브러리로, 강력한 암호화 기능과 사용의 편리성을 제공합니다.

 

 

1. Bcrypt란

[Bcrypt의 개요]

  • Bcrypt는 비밀번호를 안전하게 해싱하기 위해 설계된 암호화 알고리즘
  • Bcrypt는 해싱된 결과를 생성할 때 Salt를 추가하여 동일한 비밀번호라도 서로 다른 해시 값 생성 가능

[Bcrypt의 특징]

  • Salt를 통한 보안 강화: Bcrypt는 비밀번호 해싱 시 임의의 Salt 값을 추가하여 보안 강화
  • 반복적인 해싱: 해싱 과정에서 여러 번 반복 연산을 수행하므로, 무차별 대입 공격(Brute Force Attack)에 대한 저항력 향상

 

2. Bcrypt 설치 및 기본 설정

[Bcrypt 설치]

npm install bcrypt

 

[Bcrypt 불러오기]

// app.js
const bcrypt = require('bcrypt');

 

3. 비밀번호 해싱하기

  • 비밀번호 해싱은 사용자의 비밀번호를 해싱된 문자열로 변환하여 데이터베이스에 저장하는 과정
  • 해싱된 비밀번호는 되돌릴 수 없으므로, 비밀번호를 안전하게 보호 가능
const bcrypt = require('bcrypt');

async function hashPassword(password) {
  const saltRounds = 10; // 해싱을 반복하는 횟수 (보안과 성능의 균형을 고려하여 설정)
  const hashedPassword = await bcrypt.hash(password, saltRounds); // 비밀번호를 해싱하는 함수
  console.log('해싱된 비밀번호:', hashedPassword);
  return hashedPassword;
}

// 예제 실행
hashPassword('my_secure_password');

 

4. 해싱된 비밀번호 검증하기

사용자가 로그인할 때, 입력한 비밀번호와 데이터베이스에 저장된 해싱된 비밀번호 비교

const bcrypt = require('bcrypt');

async function verifyPassword(inputPassword, storedHashedPassword) {
  const isMatch = await bcrypt.compare(inputPassword, storedHashedPassword); // 입력된 비밀번호와 해싱된 비밀번호를 비교하는 함수
  if (isMatch) {
    console.log('비밀번호가 일치합니다.');
  } else {
    console.log('비밀번호가 일치하지 않습니다.');
  }
}

// 예제 실행
const hashedPassword = '$2b$10$y...'; // 데이터베이스에서 가져온 해싱된 비밀번호
verifyPassword('my_secure_password', hashedPassword);

 

5. Bcrypt 사용 시 고려할 보안 팁

  1. 적절한 Salt Rounds 설정: 높은 saltRounds 값은 보안을 강화하지만, 성능에 영향을 줄 수 있음. 일반적으로 10~12 정도의 값 권장
  2. 비밀번호 해싱은 반드시 비동기로 처리: Bcrypt의 해싱 및 검증 작업은 시간이 오래 걸릴 수 있으므로, 비동기 방식으로 처리하여 서버의 응답 속도 유지 필요
  3. 비밀번호 정책 적용: 사용자가 강력한 비밀번호를 사용하도록 정책을 적용 필요. 최소 길이, 대소문자, 특수 문자를 포함하도록 요구.
  4. HTTPS 사용: 네트워크 전송 중에 비밀번호가 노출되지 않도록 HTTPS를 사용하여 암호화된 연결 유지 필요.
  5. 정기적인 보안 업데이트: Bcrypt 및 관련 라이브러리를 정기적으로 업데이트하여 최신 보안 패치 적용 필요.

 

 

Bcrypt는 비밀번호 해싱을 위한 강력하고 신뢰할 수 있는 암호화 도구입니다. Node.js에서 Bcrypt를 사용하여 비밀번호를 안전하게 해싱하고 검증하는 방법을 배웠습니다. Bcrypt를 올바르게 활용하면 사용자 데이터를 안전하게 보호하고 보안을 강화할 수 있습니다.

반응형