비밀번호를 안전하게 저장하기

Younghwan Cha·2024년 2월 13일
0

Auth

목록 보기
6/7
post-thumbnail

우리들의 비밀번호는 소중하기 때문에 평문으로 저장해서는 안된다.
그렇다면 이를 암호화 하기 위한 방법에는 어떤 것들이 있을까?

단방향과 양방향


단방향( hashing )

  • bcrypt
  • argon2

양방향( encrpyt & decrypt )

  • aes-256

bcrypt란?

복호화는 불가능한, 단방향 암호화를 위해 만들어진 해시 함수이다

단방향 암호화를 위해서 다음 3가지 개념이 필요하다

  1. hasg
  2. salt
  3. key stretching

salt

전달 받은 비밀번호에 랜덤한 데이터 값을 더해 해시 값을 계산하는 방법을 말한다.

key stretching

단방향 해시 값을 계산한 값을 반복적으로 해싱하는 것을 말한다. 이는 기존 단방향 해시 알고리즘의 빠른 실행속도가 취약점이 됐던 것을 보안하기 위한 방법이다.
해싱 횟수는 cost factor 또는 work factor 라고 불리며, 이 값이 높을수록 비밀번호를 해싱하는 데 더 많은 계산 자원과 시간이 소요된다.

bcrypt 를 사용한 단방향 암호화


먼저, bcrypt 모듈을 설치한다

$ bun i bcrypt
$ bun i -D @types/bcrypt
// Bcrypt를 사용한 예시
import * as bcrypt from 'bcrypt';

async function hashPassword(password: string): Promise<string> {
  const salt = await bcrypt.genSalt();
  return bcrypt.hash(password, salt);
}

async function checkPassword(password: string, hash: string): Promise<boolean> {
  return bcrypt.compare(password, hash);
}

npm-bcrypt
왜 비밀번호 암호화에 bcrypt 를 사용해야 하는가?
Nest.js 에서 bcrypt 도입
bcrypt 활용하기

profile
개발 기록

0개의 댓글