생각보다 리액트 프로젝트를 엄청 fancy하게 마무리하지는 못하고,
bcrypt와 관련한 부분에 대해서 공부하는 시간이 되었다.
이제 Nest.js에서 로그인과 관련한 기능을 만들 때, 아무래도 우리는 보안성에 대해서 생각을 해볼 수 밖에 없다.
로그인 인증과 같이 유저의 패스워드가 사용되는 데에 있어서 암호화 과정은 필수적이라 볼 수 있는데,
사용자의 비밀번호를 데이터베이스에 저장할 때에는 단방향 암호화를 이용한다.
단방향 암호화란 암호화된 비밀번호를 원상태로 복구하는 복호화 과정이 불가능한 방식이다.
대표적으로 많이 사용되는 알고리즘은 단방향 해시를 이용한 SHA-256 알고리즘이 있다.
SHA-256은 현재 가장 많은 분야에서 채택하여 사용되고 있는 방식으로, 임의의 길이 메세지를 256 bits의 축약된 메세지로 만들어 2^256의 경우의 수를 통해 무차별 대입을 통한 공격에 안전한 편이다.
빠른 속도도 장점으로, 현재 인증서, 블록체인 등에 상용화되어 사용되고 있다.
나의 프로젝트에서는 임의의 이미 설정된 유저 정보를 통해 로그인을 하지만, 현재는 bcrypt를 통해 랜덤 salt를 적용하는 방식으로 유저 생성 기능을 만들어 보았다.
// bcrypt를 통한 암호화
async createUser(username: string, password: string): Promise<User> {
const salt = await bcrypt.genSalt();
const hashed = await bcrypt.hash(password, salt);
const newUser = this.usersRepository.create({
username,
password: hashed,
});
return this.usersRepository.save(newUser);
}