Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- axios mock
- 미라클모닝
- JavaScript
- 도커
- TDD
- docker commands
- 라우팅테이블
- 단위테스트
- subnet
- nestjs
- 리스코프치환원칙
- 인터넷게이트웨이
- forbetterme
- test code
- docker
- mock함수
- IPv4
- 서브넷
- mock객체
- TypeScript
- VPC
- parameter group
- jest
- AWS
- jest.fn
- javascript unit test
- Unit Test
- 의존관계역전원칙
- 테스트코드
- axios-mock-adaptor
Archives
- Today
- Total
My Dream Being Visualized
유저 비밀번호 암호화 (feat. bcryptjs) 본문
728x90
※ 개인 공부를 위한 공간입니다. 틀린 부분 지적해주시면 감사하겠습니다 (_ _)
곧 런칭 준비중인 프로그램을 미리 쓰고 계시는 직장동료가 물었다.
"회원가입하면, 제 비밀번호도 알 수 있어요?"
처음 회원가입 및 로그인 기능을 만들 때, 당연히 암호화를 해야 된다고 봐왔고
그렇게 했지만, 마음만 먹으면 몰래 저장하고 볼 수 있다는 생각이 머리를 스쳤다.
평범한 사람이 되거나, 나쁜 사람이 되는 건 한끗 차이인 것 같다.
"클라이언트에서 요청이 SSL 인증서를 타고 https화 되서 서버에서 해쉬 알고리즘을 거쳐서 데이터베이스에 저장돼요." 라고 말하면 앞으로 아무 질문도 안 할것 같아서
"암호화 되서 뭔지 저도 알 수가 없어요!"
라고 간단하게 말씀드렸다.
다시 한번 회원가입 및 로그인 서비스를 만드는 토이프로젝트를 하며, 암호화에 대해서 아주 간단하게 정리해보려고 한다. 서두가 너무 길었다..
빠르게, 보안도 신경썼다는 티를 내면서 구현하기 위해서 bcrypt 를 사용할 것이다.
npm install bcryptjs --save
- 우리가 사용할 모듈을 설치한다.
// password를 할당 받았다고 가정하자.
// const password = '12345'
const salts = await bcrypt.genSalt();
const hashedPassword = await bcrpyt.hash(password, salts);
- genSalt() 비동기 함수
- 예를들어, 유저 비밀번호를 암호화 함에 특정 알고리즘만으로 암호화한다면 복호화가 가능하다.
- 그렇다면, 암호화시 서버키를 넣는다면? 서버키를 도난당하면 무용지물..
- 그럼 양방향 암호화가 아닌 단방향 암호화만 할 수 있는 알고리즘을 쓴다면? 레인보우 테이블이라고 유저들이 비슷한 암호를 사용한다고 가정하여 나름의 딕셔너리를 만드는거다.. 그래서 보안상 좋지 않음.
- 그리하여, 솔트 + 비밀번호를 해시로 암호화하는 방법론이 나오게 되었다! 그 때 필요한 salt를 추출하는 함수가 genSalt()! default는 10이다. (높으면 높을 수록 salt를 generating하는데 오래걸림) > 특정 문자열을 추출
- hash(비밀번호, 솔트) 비동기 함수
- 비밀번호와 솔트를 활용하여 비밀번호를 암호화 한다.
- 암호화된 비밀번호는, 솔트 정보와 비밀번호 정보가 같이 담겨있다. (로그인 시 compare(비밀번호, 해쉬비밀번호)로 활용)
'Backend > NestJS' 카테고리의 다른 글
NestJS 새로운 모듈 추가 (feat. auth) (0) | 2021.11.06 |
---|---|
TypeORM 이란? (0) | 2021.11.06 |
NestJS 프로젝트 시작 전 설정 (0) | 2021.10.30 |
NestJS에 대하여 (0) | 2021.10.30 |