들어가며
암호화가 필요한 이유
서버와 클라이언트 간 통신시, 민감한 데이터도 주고 받는 상황이 존재한다.
가령, 개인정보 등!
기존 HTTP 통신은 위와 같은 상황에서 발생하는 보안적 이슈를 해결하기 어렵다.
그럼 어떻게 해야할까? !
=> HTTP의 보안 취약성을 보완해보자!
=> HTTPS의 등장
HTTPS
HTTP를 통해 주고받는 HTML 정보를 '암호화'시켜, 외부 사용자로부터 데이터를 지키는 것.
HTTPS가 지향하는 바
1. 클라이언트에서 보내는 정보를 제3자가 볼 수 없도록 한다.
2. 접속한 사이트가 믿을만한 곳인지 검증해준다.
안전하게 데이터를 통신하는 방법, 암호화
서버와 클라이언트가 통신하다가, 중간에 메세지를 탈취당하더라도, 제3자는 알아볼 수 없도록 암호화한다!
탈취되더라도 내용이 유출되지 않는 것이다.
그럼 암호화는 어떻게 하는건데?
=> 대칭키 & 공개키
대칭키 & 공개키 암호화: 데이터 보호를 위한 키 관리 방법
<한눈에 보기>
> 대칭키 암호화 방식: 암복호화에 동일한 키 사용
> 공개키 암호화 방식: 암복호화에 서로 다른 키 사용
대칭키란 무엇일까?
대칭키 Symmetric Key
- 대칭키란, 암호화와 복호화에 대해 동일한 암호키(대칭키)를 사용하는 알고리즘이다.
- 즉, `암복호화키`가 `동일`한 것!
- 해당 키를 아는 사람만이 문서를 복호화해 볼 수 있음!
- 말 그대로 '대칭시켜봐서 맞다면' 자물쇠가 열리는 개념
대칭키의 장점
- 공개키 암호화 방식과 비교했을 때, 속도가 빠르다.
- 즉, 수행시간이 짧다.
대칭키의 단점
- `키를 교환해야하기 때문`에, 관리 상 문제가 발생할 수 있다. = `키 배송 문제`
- 키 교환 중 키가 탈취될 수도 있다.
- 사람이 많아질수록, 전부 따로따로 키교환을 해야하기 때문에, 관리해야할 키가 방대해진다.
plain text 📄 → encryption by key 🔑 → cipher text 🗞 → decryption by key 🔑 → plain text 📄
즉, 송신자와 수신자만이 해당 🔑를 알고 있어야함.
→ 키 분배, 관리 등이 복잡해짐 ㅜ.ㅜ
흠, 그럼 대칭키의 문제점을 어떻게 극복할 수 있을까?
-> 공개키 암호화 방식!
공개키란 무엇일까?
공개키 Public Key
- 공개키란, 암호화와 복호화에 대해 서로 다른 암호키(대칭키)를 사용하는 알고리즘이다.
- 키가 공개되어있다!
- 따라서 키를 교환할 필요 X
- 모든 사람이 접근 가능하다.
공개키 암호화 방식
공개키와 개인키 쌍을 활용한다.
이때, 해당 공개키는 자신이 갖고 있는 고유 개인키로만 복호화할 수 있다.
공개키 암호화 진행 과정
1. A가 웹 상에 공개된 'B의 공개키🗝'를 이용해, plain text를 암호화하여 B에게 보낸다.
2. B는 자신의 개인키🗝로 복호화한 plain text를 확인하고, A의 공개키🔑로 응답을 암호화하여 A에게 보낸다.
3. A는 자신의 개인키🔑로, 수신한 암호화된 응답을 `복호화`한다.
공개키의 장점
- 키를 교환/분배할 필요가 없다!
- 기밀성/인증/부인방지 기능을 제공
공개키의 단점
대칭키, 공개키 모두 무결성을 제공하지 않는다.
=> '전자 서명(인증서)'를 추가하여 무결성을 보장한다.
<용어 참고>
- 기밀성(Confidentiality): 인가되지 않은 자는 정보를 확인하지 못하도록 함.
- 무결성(Integrity): 인가 되지 않은 자로부터 위조나 변조가 발생하지 않도록 함. 또한 위조나 변조가 발생하지는 않았는지 확인함.
- 인증(Authentication): 수신 받은 메시지가 송신자 본인이라는 것을 확인하고 증명함
- 부인 방지(Non-repudiation): 메시지를 보낸 사람이 보낸 사실을 부인하거나, 받은 사람이 받은 사실을 부인할 경우 그를 '증명'하는 기술을 말함