NodeJs

[Node JS] sha256를 이용해서 비밀번호 암호화 하기

dbsxo4083 2024. 7. 29. 09:42

2024.07.24 - [NodeJs] - [Node JS] 회원가입 기능 구현(1)

 

[Node JS] 회원가입 기능 구현(1)

npm i express npm i mysql2 필요한 모듈들을 npm i로 install 해주었습니다.const express = require('express');const mysql = require('mysql2/promise');const app = express();app.use(express.json())app.use(express.urlencoded({extended:false}))con

dbsxo4083.tistory.com

회원가입시 입력된 비밀번호를 sha256함수를 통해서 암호화 하는 기능을 구현해보겠습니다. 회원가입 기능 구현은 이전 포스팅을 참고해주시기 바랍니다.

 

npm i sha256

 

우선 필요한 sha256 라이브러리를 설치해줍니다.

 

🔎 sha256이란?

SHA-256(Secure Hash Algorithm 256-bit)은 암호학적으로 안전한 해시 함수의 한 종류로, 256비트(32바이트) 길이의 해시 값을 생성합니다. SHA-256은 SHA-2(Secure Hash Algorithm 2) 패밀리의 일부로, SHA-1의 후속 버전입니다. SHA-2 패밀리는 SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256 등의 다양한 비트 길이의 해시 함수를 포함합니다.

 

🔎 왜 비밀번호 암호화를 진행하나요?


1. 비밀번호 저장의 안전성: 비밀번호를 평문(plain text)으로 저장하는 것은 매우 위험합니다. 데이터베이스가 유출될 경우 사용자들의 비밀번호가 그대로 노출되기 때문입니다. 해시 함수를 사용하면, 비밀번호가 해시된 형태로 저장되므로 유출되더라도 원래 비밀번호를 알아내기 어렵습니다.

2. 일방향 해시 함수: SHA-256은 일방향 해시 함수입니다. 즉, 해시 값을 통해 원래의 비밀번호를 역산하는 것이 실질적으로 불가능합니다. 이는 비밀번호를 안전하게 저장하고, 인증 과정에서만 사용하도록 합니다.

3. 무결성 보장: 해시 함수는 동일한 입력에 대해 항상 동일한 해시 값을 생성합니다. 이는 저장된 해시 값과 사용자가 입력한 비밀번호를 해시하여 비교할 때 유용합니다. 두 해시 값이 일치하면, 원래의 비밀번호도 일치하는 것으로 간주할 수 있습니다.

4. 충돌 저항성: SHA-256은 충돌 저항성을 갖고 있습니다. 즉, 서로 다른 두 입력이 동일한 해시 값을 갖는 확률이 매우 낮습니다. 이는 비밀번호 해싱에서 매우 중요한 특성입니다.

5. 데이터베이스 유출 시 보호: 만약 데이터베이스가 해킹되더라도, 해시된 비밀번호는 즉각적으로 사용할 수 없기 때문에 추가적인 보호층이 됩니다. 해시 함수는 비밀번호를 즉시 사용 불가능한 형태로 만들기 때문에, 해커가 비밀번호를 유추하기 위해서는 추가적인 계산이 필요합니다.

 

USE auth;

ALTER TABLE user MODIFY COLUMN password VARCHAR(255);

 

우선 지난번에 데이터베이스를 기획할때 password라는 컬럼이 VARCHAR(20) 으로 되어있었는데 해시 함수 사용시 문자열이 길어지기 때문에 VARCHAR(255)로 바꾸는 SQL문을 DB에 보내주었습니다.

 

config/hashing.js

 

module.exports = {
    enc : (pw, salt) =>{
        const sha256 = require('sha256')
        
        return sha256(pw+salt)
    },
    salt  : "rheenltlaolwtoorolld2626"
}

 

enc 함수:입력 인자:pw: 사용자가 입력한 비밀번호.salt: 해시 함수를 위한 추가 문자열

salt:require('sha256'): sha256 라이브러리를 불러옵니다. 이 라이브러리는 SHA-256 해싱 알고리즘을 구현한 것입니다.sha256(pw + salt): 비밀번호(pw)와 솔트(salt)를 결합하여 SHA-256 해시를 생성합니다. 결합된 문자열을 해시한 결과 값을 반환합니다.salt 문자열:"rheenltlaolwtoorolld2626": 솔트 문자열은 해싱 과정에서 추가되는 임의의 데이터입니다. 이는 동일한 비밀번호라도 서로 다른 솔트를 사용하면 다른 해시 값을 생성하게 하여 보안을 강화합니다.

동작 방식: enc 함수는 비밀번호와 솔트를 결합한 후, SHA-256 해싱 알고리즘을 사용하여 해시 값을 반환합니다.솔트(salt)는 모듈 내에서 하드코딩된 문자열로, enc 함수에서 사용됩니다.