우리들의 비밀번호는 소중하기 때문에 평문으로 저장해서는 안된다.
그렇다면 이를 암호화 하기 위한 방법에는 어떤 것들이 있을까?
단방향( hashing )
양방향( encrpyt & decrypt )
복호화는 불가능한, 단방향 암호화를 위해 만들어진 해시 함수이다
단방향 암호화를 위해서 다음 3가지 개념이 필요하다
전달 받은 비밀번호에 랜덤한 데이터 값을 더해 해시 값을 계산하는 방법을 말한다.
단방향 해시 값을 계산한 값을 반복적으로 해싱하는 것을 말한다. 이는 기존 단방향 해시 알고리즘의 빠른 실행속도가 취약점이 됐던 것을 보안하기 위한 방법이다.
해싱 횟수는 cost factor
또는 work factor
라고 불리며, 이 값이 높을수록 비밀번호를 해싱하는 데 더 많은 계산 자원과 시간이 소요된다.
먼저, 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 활용하기