공개키/개인키 자체는 같은 개념인데
“누가 키쌍을 만들었느냐”,
“무엇을 증명하려 하느냐” 에 따라
사용 방식(용도), 목적이 달라진다.
먼저 가장 중요한 핵심
공개키 암호는 기본적으로:
공개키로 암호화 → 개인키로 복호화
또는
개인키로 서명 → 공개키로 검증
이라는 두 기능이 있어.
그래서 용도가 2개로 갈라짐 : 1. 암호화 목적 vs. 2. 서명(인증) 목적
1. 암호화 용도
대표:
- HTTPS 초기 키교환
- PGP 암호화
- 공개키로 비밀 전달
이 경우
서버가 키쌍 생성
SERVER_PUBLIC_KEY
SERVER_PRIVATE_KEY
공개키는 공개
왜냐면:
누구든 서버에게 안전하게 암호 보내게 하려고
.
예시
클라이언트가:
AES 세션키
를 서버 공개키로 암호화.
그러면
서버 개인키 가진 서버만 복호화 가능
.
이건 “비밀 전달” 목적
즉:
공개키 = 자물쇠
개인키 = 열쇠
개념.
HTTPS에서 이 느낌
클라이언트
↓ 서버 공개키로 암호화
[암호문]
↓
서버 개인키로 복호화
2. 서명(인증) 목적
대표:
- JWT 서명
- 전자서명
- WebAuthn
- 코드서명
이 경우는 반대 느낌
사용자/서버가 개인키로 서명
SIGN(data)
공개키는 검증용
누구든:
공개키로
"진짜 이 개인키 주인이 만든 서명인가?"
검증 가능.
이건 “신원 증명” 목적
즉:
개인키 = 도장
공개키 = 도장 진위 확인기
느낌.
WebAuthn은 이 방식
여기서 엄청 중요.
Passkey/WebAuthn에서는
사용자 기기가 키쌍 생성
USER_PUBLIC_KEY
USER_PRIVATE_KEY
.
서버는 공개키 저장만 함
로그인 시:
challenge
↓
개인키 서명
↓
공개키 검증
.
여기서는 공개키가 암호화용이 아님
많이 헷갈리는 부분.
WebAuthn 공개키 역할
복호화용 X
신원 검증용 O
.
그래서 차이가 생겨 보이는 이유
정리하면:
HTTPS 키교환
목적
비밀 전달
공개키 역할
암호화
개인키 역할
복호화
WebAuthn / 전자서명
목적
신원 증명
개인키 역할
서명
공개키 역할
검증
같은 RSA/ECC라도 사용 방향이 다름
즉:
공개키 암호 시스템
하나로:
- 암호화
- 서명
둘 다 가능.
실무에서는 요즘 ECC 기반 많음
예:
- TLS
- WebAuthn
- Passkey
전부 ECC 계열 많이 씀.
대표:
- ECDSA (서명)
- ECDHE (키교환)
진짜 핵심 개념
공개키 암호는 사실:
“수학적으로 연결된 키쌍”
이고,
그 키쌍을:
비밀 전달에 쓰느냐
or
신원 증명에 쓰느냐
에 따라 역할이 달라 보이는 거야.
한 줄로 정리
HTTPS 키교환
공개키로 숨기고
개인키로 푼다
WebAuthn / 전자서명
개인키로 서명하고
공개키로 검증한다
이 차이야.
신뢰 문제와 암호화
현대 인터넷의 핵심 문제는 사실 단순하다.
"상대를 믿을 수 없는 환경에서
어떻게 안전하게 통신할 것인가?"
이 문제를 해결하기 위해 등장한 기술이 바로 암호화다.
1. 인터넷은 기본적으로 신뢰할 수 없는 환경
인터넷은:
- 공개 네트워크
- 수많은 중간 경유지
- 누구나 접근 가능
- 공격자도 동일 네트워크 사용
이라는 특징을 가진다.
즉 데이터는:
내 PC → 공유기 → ISP → 중간 라우터 → 서버
처럼 여러 장비를 거쳐 이동한다.
문제는 이 과정에서:
- 누군가 데이터를 볼 수도 있고
- 변조할 수도 있고
- 가짜 서버로 위장할 수도 있다는 것
이다.
2. 신뢰 문제는 인터넷 전체에 존재한다
인터넷에서 가장 어려운 건:
"지금 통신 중인 상대가 진짜인가?"
를 증명하는 것이다.
예를 들어:
- 진짜 은행 서버인가?
- 진짜 회사 API인가?
- 중간 공격자가 위장한 서버는 아닌가?
를 알기 어렵다.
3. 암호화 이전의 인터넷은 매우 위험했다
초기 HTTP는 평문 통신이었다.
예:
POST /login
id=admin
password=1234
이 데이터가 그대로 네트워크를 이동했다.
즉 중간에서 패킷을 캡처하면:
아이디와 비밀번호를 그대로 볼 수 있었다
4. 암호화는 "신뢰를 수학적으로 만드는 기술"
많은 사람들이 암호화를 단순히:
데이터 숨기기
정도로 생각한다.
하지만 실제 본질은 더 크다.
암호화는:
신뢰를 수학적으로 검증 가능하게 만드는 기술
이다.
즉:
- 누가 보냈는지
- 중간에 바뀌지 않았는지
- 진짜 서버인지
- 데이터가 안전한지
를 수학적으로 증명한다.
5. 암호화가 해결하는 신뢰 문제
암호화는 크게 3가지 문제를 해결한다.
1) 기밀성 — 남이 못 보게
예:
- HTTPS
- VPN
- AES 암호화
중간 공격자가 데이터를 봐도:
해독할 수 없게 만든다
2) 무결성 — 중간 변조 방지
예:
- Hash
- HMAC
- 전자서명
데이터가 조금이라도 바뀌면:
검증 실패
가 발생한다.
3) 인증 — 진짜 상대인지 확인
예:
- TLS 인증서
- 공개키 암호화
- CA(Certificate Authority)
서버가:
"나는 진짜 네이버 서버다"
를 증명한다.
6. HTTPS는 신뢰 문제 해결 시스템이다
HTTPS는 단순 암호화가 아니다.
실제로는:
- 공개키 암호화
- 대칭키 암호화
- 전자서명
- 인증서
- Hash
- 키교환
이 모두 합쳐진:
인터넷 신뢰 시스템
에 가깝다.
7. 왜 공개키 암호화가 혁명적이었나
과거에는:
"같은 비밀키를 미리 공유"
해야 했다.
문제는 인터넷에서는:
처음 만나는 상대와도 통신해야 한다
는 점이다.
공개키 암호화는:
- 공개키는 공개
- 개인키는 서버만 보관
하는 방식으로:
처음 보는 상대와도 안전한 통신
을 가능하게 만들었다.
8. 결국 현대 인터넷은 "암호화 위에서 동작"
현재 인터넷 서비스 대부분은:
- 로그인
- 결제
- API
- 클라우드
- 모바일 앱
- OAuth
- JWT
- VPN
전부 암호화 기반이다.
즉 현대 인터넷은 사실상:
암호화가 없으면 성립 불가능한 구조
라고 봐도 된다.
9. Zero Trust 보안 철학도 같은 맥락
현대 보안은:
아무도 기본적으로 믿지 않는다
를 전제로 한다.
즉:
- 내부망도 신뢰하지 않고
- 사용자도 신뢰하지 않고
- 요청도 신뢰하지 않고
- 패킷도 신뢰하지 않는다
그래서 모든 요청에 대해:
- 인증
- 검증
- 서명 확인
- 암호화
를 수행한다.
10. 암호화의 본질
결국 암호화의 핵심은:
신뢰할 수 없는 환경에서
신뢰를 만드는 것
이다.
그리고 현대 인터넷은:
수학적 신뢰 위에 구축된 시스템
이라고 볼 수 있다.
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| XSS (0) | 2026.05.19 |
|---|---|
| 쿠키 보안 옵션 (0) | 2026.05.18 |
| FIDO/WebAuthn (0) | 2026.05.18 |
| Refresh Token 구조 (0) | 2026.05.18 |
| OAuth2는 왜 이렇게 복잡한가 (0) | 2026.05.18 |
댓글