반응형
현대 보안 시스템은 사실상 아래 3개 축으로 이루어진다.
| 개념 | 역할 |
| 대칭키 암호화 | 빠른 데이터 암호화 |
| 공개키 암호화 | 안전한 키 교환/신원 확인 |
| 해시 | 비밀번호 검증/무결성 확인 |
즉:
"숨기기"
"신뢰하기"
"검증하기"
를 각각 담당한다.
목적
[해시]
= 복원 불가 검증
[대칭키]
= 빠른 양방향 암호화
[공개키/개인키]
= 안전한 키 교환 + 서명
사용예
서버 공개키 공개
↓
클라이언트가 AES 세션키 암호화
↓
공개키 기반 세션키를 서버에게 전달
↓
서버 개인키로 복호화 (공개키 암호암호는 처음 안전한 연결을 만들 때 사용)
대칭키 ↔ 양방향 암호화 (암호화키 = 복호화키) ex. AES / 특징: 빠름 -> HTTPS실데이터, 파일암호화, VPN, 메신저 / 의문: 이 내용을 어떻게 전달할 것인가 -> 공개키 개인키 안전한 키 교환
공개키는 암호화만을 위한거니까 비대칭키 암호이고 개인키와 쌍을 이룸 (공개키로 암호화, 개인키로 복호화) ex. RSA ECC / 특징: 엄청느림 -> 공개키는 키교환 전용이고, AES는 실제 데이터 처리에 사용
해시는 "검증" ↔ 단방향 해시 (해시는 암호화가 아니므로 복호화 개념 자체가 없음) 같은 값인지 비교 검증은 가능 ex. 비밀번호 저장방식, 무결성검증 - 파일checksum, 전자서명, Git commit hash (*salt같이사용 표준) ex.SHA-256 bcrypt Argon2
라고 이해하는 게 가장 정확하다.
| 대칭키 | 공개키 (비대칭키) | 해시 | |
| 암호화키와 복호화키가 동일 (양방향암호화/복호가능) |
공개키가 암호화키 개인키가 복호화키 |
암호화개념이 아님. 검증가능 (단방향/복호화불가능) |
|
| 빠르지만 안전하지 않음 | 느림 안전 | ||
| AES | RSA ECC | SHA-256 bcrypt Argon2 | |
| HTTPS실데이터, 파일, VPN, 메신저 | 키교환 전용 | 비밀번호 저장방식 무결성검증 - 파일checksum, 전자서명, Git commit hash |
헷갈리는 이유
공개키 암호가 대칭키를 전달하는 역할을 함(중요)
공개키와 해시가 합쳐지면 나오는 개념
전자서명
먼저 용어를 정확히 구분해야 함
| 개념 | 목적 |
| 암호화(Encryption) | 다시 복원 가능 |
| 해시(Hash) | 원래 값 복원 불가. 검증만 가능 |
1. 대칭키 암호화 = 양방향
대표:
- Advanced Encryption Standard
특징:
암호화 가능
복호화 가능
즉:
원본 → 암호문 → 원본
복원이 가능하다.
왜냐면 목적이:
데이터를 숨긴 뒤 나중에 다시 사용
이기 때문이다.
예:
- HTTPS
- 파일 암호화
- 메신저
- DB 컬럼 암호화
예시
주민번호
↓ AES 암호화
X8A2...
↓ 복호화
주민번호 원복
즉 “되돌릴 수 있어야” 한다.
2. 비밀번호 저장은 완전히 다름
비밀번호는 원래:
복호화하면 안 된다
가 핵심이다.
왜냐면 서버가 사용자 비밀번호를 알 필요가 없기 때문이다.
그래서 해시(Hash)를 사용
대표:
- bcrypt
- Argon2
- PBKDF2
해시는 단방향
H(x)H(x)
즉:
비밀번호
↓
해시값
은 가능하지만,
해시값
↓
원래 비밀번호
는 원칙적으로 불가능하다.
실제 로그인 구조
회원가입:
mypassword123
↓
bcrypt
↓
$2a$10$......
DB에는 해시만 저장한다.
로그인:
입력 비밀번호
↓
같은 해시 함수 적용
↓
DB 해시와 비교
한다.
서버도 원래 비밀번호를 모름
이게 핵심이다.
즉:
운영자도 원래 비밀번호를 몰라야 정상
이다.
그래서:
"비밀번호 찾기"
에서 원래 비밀번호 보여주면 위험 신호다.
정상 시스템은:
비밀번호 재설정
만 가능해야 한다.
왜 비밀번호를 AES로 저장하면 위험할까?
예:
비밀번호
↓ AES 암호화
암호문 저장
이면 서버가 AES 키를 갖고 있다.
즉:
키 유출
=
전체 비밀번호 원복 가능
이다.
그래서 비밀번호 저장에는 암호화보다 해시를 사용한다.
단방향이지만 “검증”은 가능
재밌는 점은:
복호화는 안 되는데,
같은 값인지 비교는 가능
하다.
예:
입력:
hello123
해시:
ABCDEF
로그인 시 다시:
hello123
→ ABCDEF
가 나오면 같은 비밀번호라고 판단한다.
그런데 SHA-256만 쓰면 위험
왜냐면 GPU로 너무 빠르게 대입 가능하다.
그래서 비밀번호 저장은 일부러 느린:
- bcrypt
- Argon2
같은 걸 사용한다.
bcrypt/Argon2 특징
일부러:
- 느리게
- 메모리 많이 쓰게
- 병렬화 어렵게
설계했다.
즉 공격자가:
수십억 개 대입
하기 어렵게 만든다.
그래서 실무에서는 목적이 다름
| 목적 | 방식 |
| 데이터 보호 후 복원 필요 | AES 암호화 |
| 비밀번호 검증만 필요 | 해시(bcrypt/Argon2) |
쉽게 비유하면
AES
자물쇠
같다.
열쇠 있으면 다시 연다.
해시
믹서기로 갈아버리는 느낌
이다.
원래 재료 복원이 사실상 불가능하다.
핵심 정리
네 표현을 조금 더 정확히 다듬으면:
대칭키 암호화는 "양방향 복원 가능한 보호"
비밀번호 저장은 "단방향 검증용 해시"
라고 이해하면 가장 정확하다.
반응형
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| 공개키 암호화는 어떻게 가능한가 (0) | 2026.05.14 |
|---|---|
| DB 컬럼 암호화 방식 (0) | 2026.05.14 |
| 파일 암호화 구조 (0) | 2026.05.14 |
| 스트림 암호 vs 블록 암호 (0) | 2026.05.14 |
| IV는 왜 필요한가 (0) | 2026.05.14 |
댓글