학습 - 비밀번호 암호화 : bcrypt

YoonSuk Choi·2025년 1월 7일

7주차

목록 보기
9/10

암호화 bcrypt

  • bcrypt는 비밀번호 암호화에 자주 사용되는 라이브러리
  • 해시 함수를 활용하여 강력한 보안을 제공한다.
  • 중요한 요소
    • 단방향 암호화를 사용하여 저장된 비밀번호를 보호하고, 해시값 비교를 통해 비밀번호 검증을 수행한다.

bcrypt란?

  • bcryptBlowfish암호화 알고리즘 기반의 단방향 암호화 라이브러리
  • 특히 bcrypt는 실제 애플리케이션에서 쉽게 구현할 수 있으며, 보안 강화를 위한 필수적인 도구로 사용하고 있다.

과정

  • 보안성이 높은 해시 함수로, 솔트(Salt)를 적용하여 무작위 해시값을 생성 -> 반복 연산을 통해 해시 생성 속도를 조절 = 결과적으로 해킹을 어렵게 만들어 준다.

bcrypt 구성

  1. 비밀번호 해싱
    • hashSync: 비밀번호를 해시화
  2. 비밀번호 검증
    • compareSync: 입력한 비밀번호와 저장된 해시값을 비교하여 일치 여부를 검증

사용한 코드

bcrypt 코드 예제

const bcrypt = require("bcrypt");

const saltRounds = 10; // 솔트 라운드 설정

// 비밀번호 해싱 함수
// 설명: 입력된 비밀번호를 솔트를 포함하여 해시화합니다.
function hashPw(pw) {
  return bcrypt.hashSync(pw, saltRounds);
}

// 비밀번호 검증 함수
// 설명: 입력된 비밀번호와 저장된 해시값을 비교합니다.
function comparePw(inputPw, hashedPw) {
  return bcrypt.compareSync(inputPw, hashedPw); // true 또는 false 반환
}

// 테스트용 코드
const originalPw = "1234"; // 원본 비밀번호
const hashedPw = hashPw(originalPw); // 해시화된 비밀번호
console.log("암호화된 비밀번호", hashedPw);

// 비밀번호 검증
const isMatch = comparePw("1234", hashedPw); // 올바른 비밀번호
const isMatch2 = comparePw("12345", hashedPw); // 틀린 비밀번호

console.log("비밀번호 일치? >>", isMatch); // true
console.log("비밀번호 일치? >>", isMatch2); // false

코드 설명

  1. 비밀번호 해싱:
    • hashSync(pw, saltRounds): 비밀번호를 입력받아 솔트 라운드를 적용하여 해시값을 생성
    • 솔트 라운드가 높을수록 해시값 생성 시간이 증가 -> 보안 수준 강화
  2. 비밀번호 검증:
    • compareSync(inputPw, hashedPw): 사용자가 입력한 비밀번호를 해시화한 후 저장된 해시값과 비교하여 일치 여부를 반환
    • 올바른 비밀번호는 true를 반환
    • 잘못된 비밀번호는 false를 반환

결론

  • bcrypt 모듈을 활용한 암호화 학습

핵심 요약

  1. 단방향 암호화를 통해 복호화가 불가능한 강력한 해시값을 생성
  2. 솔트와 반복 연산을 사용하여 외부 공격을 어렵게 만든다.
  3. 비밀번호 검증 기능을 제공하여 안전하게 로그인 프로세스를 구현할 수 있다.
profile
Name : 최윤석(YoonSuk Choi)

0개의 댓글