| 용어 | 설명 |
|---|---|
| 평문(Plain Text) | 암호화되기 전의 원래 데이터 |
| 암호문(Cipher Text) | 암호화된 데이터 |
| 암호화(Encryption) | 평문을 암호문으로 변환하는 과정 |
| 복호화(Decryption) | 암호문을 다시 평문으로 변환하는 과정 |
| 단방향 암호화(One-way) | 복호화가 불가능한 암호화 (예: 해시함수 기반) |
| 양방향 암호화(Two-way) | 암호화 후 복호화가 가능한 방식 (예: 대칭키 암호화) |
| 해시함수(Hash Function) | 입력값을 고정된 길이로 변환하는 함수 (복호화 불가) |
| 솔트(Salt) | 같은 평문이라도 다른 결과를 만들기 위한 랜덤값 |
| 알고리즘 | 유형 | 특징 | 사용처 |
|---|---|---|---|
| BCrypt | 단방향 | 해시 기반 암호화, 솔트 자동 포함 | 비밀번호 저장 |
| SHA-256 | 단방향 | 256비트 해시 알고리즘 | 파일 무결성, 전자서명 |
| TLS | 양방향 | 통신 데이터 암호화 | HTTPS, 네트워크 통신 |
| 번호 | 설명 |
|---|---|
| 1 | 솔트를 사용해 같은 평문도 다른 암호문 생성 |
| 2 | 반복 연산으로 검증 속도를 느리게 하여 보안 강화 |
| 3 | 단방향 암호화 — 복호화 불가능 |
| 4 | 평문 비교가 아닌 암호문 비교로 검증 수행 |
$2a$10$69bMrChodVYxOcvM/cUo7evsho3hw6YBJT9yepHudwBlIvi7KlV0.
| 구분 | 내용 | 설명 |
|---|---|---|
$2a | 버전 정보 | BCrypt 알고리즘 버전 |
$10 | 반복 연산 수 | 2의 제곱근(=1024번 반복) |
69bMrChodVYxOcvM/cUo7e | 솔트 (22자) | 무작위 랜덤 문자열 |
vsho3hw6YBJT9yepHudwBlIvi7KlV0. | 해시값 (31자) | 암호화 결과 |
| 단계 | 코드 예시 | 설명 |
|---|---|---|
| 1️⃣ | implementation 'org.springframework.security:spring-security-crypto:6.4.4' | Gradle 의존성 추가 |
| 2️⃣ | private final BCryptPasswordEncoder bCrypt = new BCryptPasswordEncoder(); | BCrypt 객체 생성 |
| 3️⃣ | String encoded = bCrypt.encode(plain); | 평문 암호화 |
| 4️⃣ | boolean match = bCrypt.matches(plain, encoded); | 평문 vs 암호문 비교 (검증) |
| 구분 | 저장 위치 | 유효기간 | 보안 | 서버 과부하 가능성 | 예시 |
|---|---|---|---|---|---|
| 세션(Session) | 서버 | 서버 종료 시 삭제 | 비교적 안전 | 비교적 높음 | 로그인 정보 |
| 쿠키(Cookie) | 클라이언트 | 설정된 기간 동안 유지 | 비교적 취약 | 비교적 낮음 | 장바구니, 자동로그인 |
| 항목 | 설명 |
|---|---|
| 민감한 정보 저장 금지 | 비밀번호 등 개인 정보는 절대 저장하지 않음 |
| 보안 설정 필수 | 쿠키는 클라이언트 저장이므로 공격 위험 존재 |
| 설정 항목 | 코드 | 설명 |
|---|---|---|
| JS 접근 차단 | .setHttpOnly(true) | JavaScript에서 접근 불가 |
| HTTPS 전용 전송 | .setSecure(true) | HTTPS 환경에서만 쿠키 송수신 |
| 유효기간 설정 | .setMaxAge(초) | 쿠키의 만료 시간 지정 |
| 접근 경로 지정 | .setPath("/") | 특정 경로에서만 접근 가능 |
| 단계 | 코드 예시 | 설명 |
|---|---|---|
| 1️⃣ | Cookie cookie = new Cookie("쿠키명", 값); | 쿠키 객체 생성 |
| 2️⃣ | cookie.setHttpOnly(true); 등 | 보안 설정 적용 |
| 3️⃣ | response.addCookie(cookie); | 쿠키를 클라이언트로 전송 |
| 4️⃣ | @CookieValue 또는 request.getCookies() | 쿠키 읽기 |
| 5️⃣ | cookie.setMaxAge(0); response.addCookie(cookie); | 쿠키 삭제 |