jm_p_op

DB 보안 - 해시 함수,hash 공격,salt,password 암호화 본문

Node.js/Express

DB 보안 - 해시 함수,hash 공격,salt,password 암호화

jm_p_op 2024. 4. 22. 14:22

해시 함수

  • f(A)=B인 함수이고, B의 길이가 정해져 있어서 B를 사용하여 A 추측할수가 없다.
  • MD5,SHA,CRC 등등 여러가지 종류를 가지고 있다.
  • hash collision 다른 값으로 같은 해쉬값 존재

hash 공격

  • 같은 a값에 대하여 f(a)=b 같은 b가 나옴으로, 특정 값에 대한 결과값을 알수가 있다.
  • 모든 경우의 수를 때려 박고 추측가능
  • 자주 사용하는 비밀번호, 생년월일등으로 범위 좁혀서 공격

salt

  • a값에 salt를 추가함으로 b값을 다르게 만든다.
  • 주로 DB에 random값으로 salt를 저장해서 사용된다.
  • ramdom 경우의 수만큼 탐색하는데 시간복잡도가 증가
  • DB메모리 할당 필요,
  • 같은 비밀번호에서 같은 값이 나올 가능성이 존재

password 암호화

const crypto = require('crypto');
let hashpassword = crypto.pbkdf2Sync(body.password,
        process.env.PASSWORD_SECRET_STRING + body.id + process.env.PASSWORD_SECRET_STRING,
        Number(process.env.PASSWORD_SECRET), 64, 'sha512').toString('hex');
  • id값은 unique함으로 앞뒤에 특정문자를 넣어준다면 패스워드랑 합쳐질때, 동일할 가능성이 현저하게 줄어든다.
  • password를 털렸다면 salt 값도 털렸을 가능성이 높음
  • pbkdf2Sync는 sha512를 Number(...)만큼 돌려줌으로, 횟수를 추측하기 힘들게 한다.
  • 비밀번호 *PASSWORD_SECRET_STRING * PASSWORD_SECRET 만큼 탐색하는데 시간복잡도가 늘어난다.
  • 하나의 데이터로 횟수랑 salt값을 추정할수 없도록, 패스워드 수정 횟수를 정해주거나, 자주 하는 사람을 미리 예의주시하자.

 

'Node.js > Express' 카테고리의 다른 글

jsonwebtoken - JWT  (0) 2024.04.23
DB - attributes 데이터 한정하기,보안  (0) 2024.04.23
CRUD  (0) 2024.04.18
DB - sequelize-cli : DB-update  (0) 2024.04.14
DB - sequelize:up,down  (0) 2024.04.14