티스토리 뷰

기존의 로그인 시스템에서 이슈가 생겨서 비밀번호 보안을 강화시키는 작업을 진행했고, 이 페이지는 그에 대한 설명하고 있다.
기존의 시스템은 웹 화면쪽에서 입력된 값을 패킷으로 바로 전송하여 bcrypt를 이용했는데, 이 과정에서 정보가 유출될 수 있어서 수정 보완하기로 한다.

암호화에는 크게 단방향 암호화와 양방향 암호화 두 가지가 있다.
단방향 암호화는 복호화할 수 없는 암호화 방법이며, 복호화란 암호화된 문자열을 다시 원래 문자열로 해독하는것을 의미한다.
단방향 암호화가 복호화 할 수 없다고 설명했지만, 최근 MD5나 SHA1 방식 등은 쉽게 해독이 가능하니 사용하지 않는것이 좋다. 자세한 내용은 MD5 파트에서 설명하고 있다.

 


# bcrypt

1) 설치

npm install bcrypt-nodejs

 

2) 코드

const bcrypt = require(‘bcrypt-nodejs’); 

// 로그인할 때에는 hash된 값과 입력된 값을 비교하는 작업이 필요하다. 
bcrypt.compareSync(data, encrypted) //bcrypt.compareSync(입력값, 비교값 hash) 

위의 코드는 입력값을 hash한 후 값이 일치하는지 비교하는 로직이다.

bcrypt는 패스워드 저장 목적으로 설계되어, 현재까지는 강력한 암호화 방식 중 하나지만,

입력 값으로 72bytes character 사용해야 한다는 제약이 있다.

 


# md5

초반부에 단방향 암호화 방식 중 하나인 MD5가 쉽게 해독이 가능하다고 설명했는데, 이는 아래 사이트에 들어가보면 안다.

https://crackstation.net

 

CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.

Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults How Crack

crackstation.net

22c14f311a60486b36f79f3bc962be66 해시값을 입력하면 md5방식이며, a1b2c3d4 라는 값을 쉽게 얻을 수 있다. 
이 사이트에서 사용하고 있는 방식은 레인보우 테이블에서 비교하여 찾는 것이다. 레인보우 테이블이란, 해시된 값을 미리 변환해둔 테이블이다. 모든 값은 아니지만 엄청나게 많은 데이터들을 가지고 있기 때문에 해독이 쉽다. 

굳이 사용한다고 하면, 아래 코드를 이용한다.

 

1) 설치

npm install md5

 

2) 코드

const md5 = require(‘md5’); 
const security = md5(pw);



# salt

단방향 암호화 방식을 어떻게 더 안전하게 할 수 있을까? 
해커가 레인보우 테이블을 사용하지 못하게 하고 오랜시간을 들여야만 해독할 수 있게 하는 방법이 필요하다.
소금을 뿌려주는 일인데, salt라는 특수한 값을 이용해 단방향 암호화한 값을 변형시키는 것이다. salt는 보통 랜덤 문자열을 생성해서 비밀번호와 같이 DB에 저장한다.

같은 password를 사용하는 유저가 있다면 유출 시 다른 유저의 비밀번호 또한 유출될 수 있기때문에, 유저마다 다른 salt를 설정해야한다. 

그래서 사용한 salt의 값은 아래와 같다. 오늘 날짜에 랜덤한 값을 곱하여 만든 랜덤랜덤한 값이다.

const salt = `${Math.round(new Date().valueOf() * Math.random())}`; 
bcrypt.hashSync(pw + salt); 

random 메소드는 매번 다른 값을 반환하기 때문에 암호화 결과가 매번 달라지기때문에, 꼭 비밀번호와 함께 저장해두어야한다.

salt를 추가해도 시간을 들인다면 cracking 할 수 있겠지만, 오랜시간이 걸린다. 만약 더 좋은 방식이 나온다면 변경하도록하자.

 

댓글
최근에 올라온 글
«   2024/10   »
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 31
Total
Today
Yesterday