커뮤니티 프로젝트에서 비밀번호에 암호화를 적용하지 않았던 문제를 해결하기 위해, 암호화에 대해 학습하고 bcrypt를 활용하여 암호화를 적용한 경험을 정리해 보았습니다. 🙂
암호화란?
암호화란, 특별한 지식을 가진 사람만 데이터를 읽을 수 있도록 정보를 변환하는 과정입니다. 이는 데이터를 보호하기 위해 사용되며, 알고리즘을 이용하여 암호문으로 변환합니다.
- 알고리즘: 문제를 해결하기 위해 필요한 단계적인 절차나 방법을 뜻합니다.
- 예를 들어, 로그인 프로세스의 알고리즘은 다음과 같습니다:
- 사용자 입력 → 2. DB에서 비교 → 3. 결과 출력.
- 이 순서를 잘못하면 원하는 결과를 얻을 수 없습니다. 순서는 알고리즘에서 매우 중요합니다.
- 예를 들어, 로그인 프로세스의 알고리즘은 다음과 같습니다:
암호화의 종류
암호화는 사용 목적과 방식에 따라 3가지로 나뉩니다.
특징 | 단방향 암호화 | 비밀키 암호화 (대칭키) | 공개키 암호화 (비대칭키) |
키 개수 | 없음 | 1개 (비밀키) | 2개 (공개키/개인키) |
암호화/복호화 | 암호화만 가능 | 암호화 및 복호화 가능 | 암호화 및 복호화 가능 |
속도 | 빠름 | 빠름 | 느림 |
보안성 | 매우 높음 | 키 관리가 어렵다면 취약 | 매우 높음 (개인키 유출 방지 필요) |
사용 사례 | 비밀번호 저장, 무결성 확인 | 파일 암호화, 데이터 전송 | SSL/TLS, 디지털 서명 |
bcrypt: 비밀번호를 위한 단방향 암호화
bcrypt란?
- bcrypt는 단방향 암호화 알고리즘을 사용하여 비밀번호를 안전하게 저장하기 위한 라이브러리입니다.
- 주요 특징:
- 복호화 불가: bcrypt로 암호화된 데이터는 원래 상태로 되돌릴 수 없습니다.
- 해싱(Hashing): 입력된 데이터를 고정된 길이의 문자열로 변환.
설치 및 사용
- 설치
npm install bcrypt
- 암호화
- 비밀번호를 해싱하는 방법:
const bcrypt = require('bcrypt'); const plainPassword = 'user-password'; // 사용자 비밀번호 const saltRounds = 10; // 해싱 강도 bcrypt.hash(plainPassword, saltRounds, (err, hash) => { if (err) { console.error('Error hashing password:', err); } else { console.log('Hashed password:', hash); } });
- 비밀번호를 해싱하는 방법:
- 비교
- 사용자가 입력한 비밀번호와 저장된 해시값 비교:
const inputPassword = 'user-password'; // 사용자 입력 비밀번호 const storedHash = '해싱된 비밀번호'; bcrypt.compare(inputPassword, storedHash, (err, result) => { if (result) { console.log('비밀번호 일치!'); } else { console.log('비밀번호 불일치!'); } });
- 사용자가 입력한 비밀번호와 저장된 해시값 비교:
bcrypt의 장점
- 보안성:
- 복호화 불가한 단방향 암호화로 비밀번호 유출 위험 감소.
- 해시와 소금(Salt) 적용으로 무작위 대입 공격(Brute Force Attack) 방지.
- 해싱 알고리즘의 유연성:
- saltRounds 값을 높여 암호화 복잡도를 조정 가능 (높을수록 더 안전).
해싱과 암호화의 차이
- 암호화: 복호화를 통해 원본 데이터를 복원 가능.
- 해싱: 원본 데이터를 복원할 수 없는 고정된 값으로 변환.
bcrypt를 사용하는 이유
- 기존의 비밀번호를 단방향 암호화로 안전하게 저장.
- 복잡한 알고리즘으로 해킹 시도를 어렵게 함.
- 비밀번호 유출 방지 및 사용자 데이터 보호.
암호화는 데이터 보안의 핵심이며, 특히 비밀번호와 같은 민감한 정보를 안전하게 저장하기 위해 필수적입니다. bcrypt는 단방향 암호화를 활용해 비밀번호 보안을 강화하는 대표적인 도구입니다. 앞으로 프로젝트에 적용하며 실습한 내용을 지속적으로 기록하고 공유해 나가겠습니다! 😊
'카카오 부트캠프 > 내용 정리' 카테고리의 다른 글
Express 서버와 Nginx를 이용한 Blue-Green 배포 설정 (0) | 2024.12.02 |
---|---|
네트워크 기초 개념 정리하기 (0) | 2024.12.02 |
모듈 환경에서 전역 스크립트 사용 문제 해결하기: bcrypt.js를 활용한 비밀번호 암호화 (1) | 2024.11.28 |
AWS EC2 중지 후 재시작, DB 연결이 갑자기 안 되는 이유 (0) | 2024.11.26 |
AWS EC2 외부 접속 문제 해결기: 결국 문제는 와이파이였다 (0) | 2024.11.25 |