내 비밀번호 나도 모르게 만드는 법 bcrypt
목차
1. bcrypto
2. 해시로 암호 만들기
3. 내 암호가 맞는지 확인하는 방법
1. bcrypto
- 복호화가 불가능한 단방향 해시 알고리즘
예전에는 어떤 사이트에서 비밀번호를 잊어버려 찾을 때 인증을 거치고 저장된 비밀번호를 알려주었다. 하지만 언젠가부터 비밀번호를 찾는 것 대시 새로운 비밀번호로 변경하는 방식들이 사용되었다. 그 이유는 패스워드를 암호화하여 저장하기 때문에 서버도 알지 못하게 때문에 패스워드를 변경해야만 인증이 가능하기 때문이다.
이러한 방식은 인증정보를 탈취하여 권한을 사칭하는 공격방법을 방지하기 위해 사용되었다.
단방향 해시알고리즘을 통해 비밀번호를 암호화하게 되면 복호화가 불가능하기 때문에 탈취가 되더라도 공격자는 함부로 사용할 수 없다.
2. 해시로 암호 만들기
그렇다면 암호화 알고리즘을 사용하여 입력한 값을 해시값으로 바꿔보자.
bcrypt는 외부 모듈이기 때문에 npm을 통해 별로로 설치하고 코드 내에서 사용할 수 있도록 가져와야 한다.
npm install bcrypt
그리고 해시 값으로 변환하기 위해 hash라는 메서드를 사용하면 되는데 주의할 점은 해당 메서드는 promise를 반환하기 때문에 작업이 완료될 때까지 기다리기 위해 async / await를 사용하는 것이 좋다.
const bcrypt = require("bcrypt");
const createHash = () => {
return new Promise((res, rej) => {
bcrypt.hash("암호화할 데이터", hash반복 회수, (err, result) => {
res(result)
})
})
}
3. 내 암호가 맞는지 확인하는 방법
bcypte로 암호화는 돼도 복호화가 불가능하다고 하였다. 그렇다면 입력한 비밀번호가 맞는지 어떻게 확인할 수 있을까?
다행히도 해시암호와 내가 입력한 비밀번호를 비교하여 해시암호가 입력한 비밀번호를 만들어진 것인지 판단을 해주는 메서드를 제공한다.
비교를 해주는 메서드는 compare()로 hash메서드와 마찬가지로 promise를 반환하기 때문에 작업이 완료될 때까지 기다리기 위해 async / await를 사용하는 것이 좋다.
const compareHash = (e) => {
return new Promise((res, rej) => {
bcrypt.compare("암호화할 데이터", "암호화한 데이터", (err, result) => {
res(result);
});
})
}
// 맞으면 true
// 아니면 false