jm_p_op
DB 보안 - 해시 함수,hash 공격,salt,password 암호화 본문
해시 함수
- 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 |