비밀번호 해시에 취약한 알고리즘 사용
Use of Password Hash with Insufficient Computational Effort
Last updated
Use of Password Hash with Insufficient Computational Effort
Last updated
// 취약: 빠른 범용 해시(MD5/SHA-1)로 비밀번호 저장
const crypto = require("crypto");
async function saveUserWeak(username, plainPassword, db) {
const digest = crypto
.createHash("md5")
.update(plainPassword, "utf8")
.digest("hex");
await db.users.insert({ username, passwordHash: digest });
}// 안전: bcrypt로 고유 솔트 + 충분한 cost 사용
const bcrypt = require("bcrypt");
async function saveUserSecure(username, plainPassword, db) {
const cost = 12; // 코스트 팩터 (환경과 성능에 맞게 10~14 권장)
const hash = await bcrypt.hash(plainPassword, cost); // 내부적으로 랜덤 솔트 포함
await db.users.insert({ username, passwordHash: hash });
}
async function verifyLogin(username, inputPassword, db) {
const user = await db.users.findOne({ username });
if (!user) return false;
return bcrypt.compare(inputPassword, user.passwordHash);
}