살아가다보면 한번쯤은 회원가입을 해본 경험이 있을텐데,
회원가입을 하게 되면 내 개인 정보가 어떻게 처리되는걸까?
회원가입을 하게 되면 유저의 정보를 DB에 저장하게 되는데, 이때 비밀번호도 저장하게 된다. 만약 누군가가 나쁜 마음을 먹고 DB를 해킹하게 된다면 DB에 저장되어 있는 개인정보는 물론, 비밀번호까지 노출될 것이다.
이를 방지하기 위해, 비밀번호를 암호화하여 데이터 베이스에 저장을 하게 되는데, 암호화의 방식에는 두가지가 있다.
단방향 암호화 그리고 양방향 암호화 이렇게 두가지 방식이 존재한다.
: 암호화와 복호화 과정을 통해 송 ・ 수신 간 주고받는 메시지를 안전하게 암호화하고 평문으로 복호화하는 과정을 의미한다.
: 쉽게 말해 기존의 비밀번호를 암호화도 가능하고, 암호화된 암호문을 복호화도 할 수 있다는 의미이다.
: 대표적으로 대칭키(비공개키) 방식과 비대칭키(공개키) 방식이 있다.
: 해싱(Hashing) 을 이용한 암호화 방식으로 양방향과는 다른 개념으로, 평문을 암호문으로 암호화는 가능하지만 암호문을 평문으로 복호화 하는 것은 불가능.
: 양방향 암호화와는 반대로 단방향 암호화는 암호화는 수행하지만 복호화가 불가능하다.
단방향 해시 함수는 어떤 수학적 연산(또는 알고리즘)에 의해 원본 데이터를 매핑 시켜 완전히 다른 암호화된 데이터로 변환시키는 것을 의미한다.
이 변환을 해시라고 하며, 해시에 의해 암호화된 데이터를 다이제스트(digest)라고 함!
하지만 해시를 통해 만들어진 암호가 절대적으로 안전하다고 할 수는 없다. 복호화가 완전히 불가능한 건 아니기 때문이다. 예를 들어 해시과정을 한번만 했다고 가정을 하면, 해커들이 마음먹고 레인보우 테이블에서 무차별 대입 공격(brute force attack)을 했을 때 하나씩 얻어걸리는 경우가 있기 때문이다. 그래서 더욱 안전하게 암호화를 하기 위해 해시를 여러번을 하게 된다.
복호화를 더욱 어렵게 만들기 위해서 소금을 첨가하듯 원문에 임의열 문자열을 붙여주는 salt라는 과정을 한번 거치고 해시! 또 salt 거치고 해시! 이렇게 암호화를 여러번 걸쳐서 해주는데 이걸 key streching이라고 한다.
위와 같은 과정을 거치게 되면 다이제스트를 알아낸다 하더라도 password 를 알아내기 더욱 어려워지며, 사용자마다 다른 Salt 를 사용한다면 설령 같은 비밀번호더라도 다이제스트의 값은 다 달라지기 때문에 한 명의 패스워드가 유출되더라도 같은 비밀번호를 사용하는 다른 사용자는 비교적 안전하다.
bcrypt 라이브러리를 이용해서 키 스트레칭 할 수 있음!!
bcrypt 설치
- yarn add bcrypt
- yarn add --dev @types/bcrypt
import 방법