node에서 비밀번호를 암호화하기 위해 md5, sha256, pbkdf2 등의 모듈을 사용할 수 있습니다.
1. MD5(wiki 보러가기)
- md5 hashing 알고리즘을 통해 데이터를 암호화합니다.
(1) MD5 사용법
npm install md5
var md5 = require('md5'); var securePassword = md5('password');
문제점
인터넷에 검색만 해봐도 쉽게 Cracking이 가능한 문제점이 있습니다.
- 이를 보완하기 위해 salt값을 추가하는 방법이 있습니다.
(2) MD5 + salt값 추가
var md5 = require('md5'); var salt = '!%@#%asdg1613'; var securePassword = md5('password + salt');
문제점
salt값을 추가함으로써 보안이 향상되지만 여전히 시간을 들여 Cracking이 가능합니다.
같은 password를 사용하는 유저가 있다면 한 명의 정보가 유출될 시 모든 유저의 정보 또한 유출될 수 있습니다.
- 유저마다 salt 값을 다르게 설정함으로써 해결이 가능합니다.
현재 md5는 설계상의 결함들이 발견되었기 때문에 md5를 암호화로 사용하지 않는다고 합니다.
2. SHA(wiki 보러가기)
- md5보다 강력한 암호를 만들 수 있습니다.
(1) SHA-256 사용법
npm install sha256
var sha256 = require('sha256'); var securePassword = sha256(password+salt);
3. PBKDF2(영문 wiki 보러가기)
- salt값을 추가한 hashing을 원하는 횟수만큼 수행하여 암호화 강도를 높일 수 있습니다.
(1) pbkdf2-password 사용한 회원가입 및 로그인 모듈
npm install pbkdf2-password
route/index.js
// PBKDF2 - secure password var pbkdf2Password = require('pbkdf2-password'); var hasher = pbkdf2Password(); router.get('/regist', function (req, res) { res.render('regist', { title: '36.5 Arts' }); }); router.post('/regist', function (req, res) { hasher({password: req.body.password}, function (err, pass, salt, hash) { var user = new User(); user.email = req.body.email; user.password = hash; user.salt = salt; user.type = req.body.type; user.major = req.body.major; user.save(function (err) { if(err){ console.log(err); res.redirect('/'); } req.session.email = user.email; res.redirect('/'); }) }); }); router.post('/login', function (req, res) { var inputEmail = req.body.email; User.findOne({email: inputEmail}, function (err, user) { if(err) return res.status(500).send({error: 'database find failure'}); if(!user) return res.status(404).send({error: 'user not found'}); var inputPassword = req.body.password; hasher({password:inputPassword, salt:user.salt}, function (err, pass, salt, hash) { if(hash === user.password){ req.session.email = user.email; res.redirect('/'); }else{ res.redirect('/auth/login'); } }); }) });
'Web > Node.js' 카테고리의 다른 글
Node.js multiparty 이용해 File upload - ajax (2) | 2017.07.09 |
---|---|
Mongoose로 Node.js와 연결 시 DeprecationWarning (0) | 2017.07.06 |
MongoDB를 통해 Node.js에서 간단한 REST API 구현 (0) | 2017.07.06 |
Node.js 모듈 (0) | 2017.06.23 |
Node.js 에 대해서 (0) | 2017.06.23 |