Created date: Dec 11 2024 Wednesday, 50th 08:23 #SLTMNG SUA USGM
연관 문서
개요
- USGM 서비스 구조 상, 테이블에 GIT 계정 저장 필요
- 테이블에 평문으로 저장하는게 아닌 암호화하여 저장 필요
비밀번호 보안 저장을 위한 주요 방법
비밀번호를 보안 문제 없이 저장하려면 평문 저장을 절대 금지하고, 대신 해시 함수를 이용해 비밀번호를 변환한 후 저장해야 합니다. 해시 함수는 입력값을 고정된 길이의 암호화된 데이터로 변환하며, 복호화가 불가능합니다.
-
해싱(Hashing)
- 비밀번호는
SHA-256,bcrypt,PBKDF2,Argon2같은 알고리즘을 사용해 해시로 변환합니다. - 해시는 복호화가 불가능하기 때문에 데이터 유출 시에도 안전합니다.
- 비밀번호는
-
Salt 추가
- 해시 함수에
Salt(랜덤 문자열)를 추가해 동일한 비밀번호도 다른 해시 값을 생성합니다. - 무작위 대입 공격(Brute-force)과 레인보우 테이블 공격을 방어할 수 있습니다.
- 해시 함수에
-
알고리즘 선택
bcrypt: 강력한 보안을 제공하며, Java에서는BCrypt라이브러리를 사용.Argon2: 최신 알고리즘으로 메모리와 연산 비용을 조절 가능.PBKDF2: 적절한 반복 횟수 설정을 통해 안전성 확보.
비밀번호 저장 예시 (Java로 해싱 및 Salt 적용)
Maven 의존성 추가
xml
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId> <version>6.1.2</version> <!-- 최신 버전으로 대체 --> </dependency>
Java 코드
java
import org.springframework.security.crypto.bcrypt.BCrypt; import java.util.UUID; public class PasswordSecurity { public static void main(String[] args) { // 사용자 비밀번호 String plainPassword = "mySecurePassword"; // 1. Salt 생성 String salt = UUID.randomUUID().toString(); // 2. 비밀번호 해싱 String hashedPassword = BCrypt.hashpw(plainPassword + salt, BCrypt.gensalt()); // 3. 저장할 값 출력 System.out.println("Salt: " + salt); System.out.println("Hashed Password: " + hashedPassword); // 비밀번호 검증 boolean isPasswordMatch = BCrypt.checkpw(plainPassword + salt, hashedPassword); System.out.println("비밀번호 일치 여부: " + isPasswordMatch); } }
설명
-
Salt 생성
UUID.randomUUID()를 이용해 랜덤 문자열 생성.- 비밀번호마다 고유한 Salt를 적용해 보안 강화.
-
해싱
BCrypt.hashpw()를 이용해 비밀번호 + Salt 조합을 해싱.
-
비밀번호 검증
BCrypt.checkpw()를 이용해 사용자가 입력한 비밀번호와 해시를 검증.
샘플 데이터 삽입
비밀번호를 “mySecurePassword”로 해싱했다고 가정:
sql
코드 복사
INSERT INTO users (user_id, user_name, email, password_hash, salt, created_at) VALUES ( 'user_01', 'David Kim', 'david.kim@example.com', '$2a$10$0fIjhOP93MzIjQhE.zq6OuNWnJd8xppTfM5Mz8knF.pj/V/rBX3Qe', -- 해시 값 '123e4567-e89b-12d3-a456-426614174000', -- Salt 값 '2024-12-11 10:00' );
보안 팁
-
Salt 저장
- Salt는 같은 테이블에 저장해도 문제가 없으므로 해시와 함께 관리.
-
해싱 알고리즘 유지
- 오래된 해시 알고리즘(MD5, SHA1 등)을 사용하지 말고 최신 알고리즘으로 교체.
-
비밀번호 검증
- 사용자가 입력한 비밀번호를 동일한 방식으로 해싱해 데이터베이스의 해시와 비교.
이 방식으로 비밀번호를 안전하게 저장하고 관리할 수 있습니다. 😊
연관 메일