티스토리 뷰
https://opentutorials.org/course/228/4894
HTTPS와 SSL 인증서 - 생활코딩
HTTPS VS HTTP HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext 인 HTML을 전송하기 위한 통신규약을 의미한다. HTTPS에서 마지막의 S는 Over Secure Socket Layer의 약자로 Secure라는 말을 통해서 알 수 있듯이
opentutorials.org
HTTPS 는 HTTP 에 SSL/TLS 를 추가한것.
애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할수 있는 HTTP 요청.
대칭키
대칭키는 동일한 키로 암호화와 복호화를 같이 할 수 있는 방식의 가장 기본적인 암호화 기법이다.
암호화를 할때 1234 라는 값을 사용 했다면 복호화때도 1234를 사용해야한다.
이 방식은 암호를 주고받는 사람끼리 대칭키를 전달하기가 어렵다는 치명적인 문제가 있다.
대칭키가 유출되면 키를 획득한 공격자가 암호를 복호화할수 있다.
공개키
대칭키의 단점을 보완한 방식이 공개키 방식이다.
공개키의 핵심은 다음과 같다.
- 공개키 방식은 두 개의 키를 갖는다
- A키로 암호화하면 B키로 복호화 할 수 있다.
- B키로 암호화하면 A키로 복호화 할 수 있다.
하나의 키를 private key (개인키)
다른 하나를 public key (공개키) 라고 한다.
작동 방식
1. 개인키를 서버가 갖고있고 공개키를 클라이언트에 전달한다.
2. 공개키를 받은 클라이언트는 공개키를 이용해 데이터를 암호화한다.
3. 암호화한 정보를 개인키를 갖고 있는 서버에 전달한다.
4. 서버는 개인키로 암호화한 정보를 복호화한다.
이 과정에서 공개키가 유출되도 개인키를 모르기 때문에 암호를 복호화할수 없다.
공개키 작동 원리
https://news.samsungdisplay.com/27191
'소인수분해'는 암호화를 위한 최고의 수학적 원리이다?
우리는 은행을 통해 돈을 이체하거나 환전하려면 수수료를 내야 한다. 심지어 거래하고 있는 은행의 내 돈을 다른 은행이 운영하는 ATM 기기를 이용하여 찾을 때도 비싼 수수료를 낸다. 반면
news.samsungdisplay.com
여러 암호화 알고리즘이 있는데 보통 근간이 RSA 이다.
RSA 의 핵심 원리는 큰 숫자를 소인수 분해하는 것이 어렵지만 , 결과를 알면 원래의 수는 곱셈으로 간단히 구해진다는 것이다.
여기서 m 은 알려지지 않은 두 소수 p,1 의 곱 m=pq이다.
따라서 암호문을 원래의 평문으로 복호화하려면 m 을 소인수 분해하여 p,q 를 구해야한다.
큰 수의 소인수분해를 획기적으로 빠르게 하는 알고리즘은 알려지지 않았으므로 무한에 가까운 시간이 소요된다.
예) 60 = 2^2×3×5
인증서
공개키 방식을 응용한것이 인증서 발급이다.
1. 서버에서 개인키를 이용해 정보를 암호하고 공개키와 함께 클라이언트에 보낸다.
2. 암호화된 데이터와 공개키를 획득한 클라이언트는 공개키를 이용해 복호화한다.
공개키는 유출 가능하기 때문에 의미 없어보이는데 왜 이렇게 할까?
이것은 데이터 보호 목적이 아니기 때문이다.
개인키로 암호화된 데이터를 공개키로 복호화할수 있다는 것은 그 데이터가 공개키와 쌍을 이루는 개인키로 암호화되었다는 것을 의미한다.
공개키가 데이터를 제공한 서버의 신원을 보장해는 것.
즉 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지를 보장해줄수 있다.
CA (Certificate authority)
인증서의 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지를 보장해주는 민간기업.
신뢰성이 엄격하게 공인된 기업들만이 참여할수 있다.
SSL 을 통해 암호화된 통신을 제공하려는 서비스는 CA 를 통해 인증서를 구입해야 한다.
SSL 인증서의 내용
인증서에는 다음과 같은 정보가 포함되어 있다.
- 서비스의 정보 (인증서를 발급한 CA, 서비스의 도메인 등)
- 서버 측 공개키 (공개키의 내용, 공개키의 암호화 방법)
인증서 동작 흐름
클라이언트가 서버에 요청을 보낼때를 생각해보자.
- 서버는 제일 먼저 CA 에게 구입한 인증서를 제공한다.
- 브라우저는 자신이 내장한 CA의 리스트를 확인하고(CA의 공개키 포함하고 있음) 있다면 CA의 공개키를 이용해 인증서를 복호화한다.
- CA의 공개키를 이용해 인증서를 복호화할수 있다는 것은 이 인증서가 CA의 비공개키에 의해 암호화 됐다는 것을 의미하고, 서버가 제공한 인증서가 CA에 의해 발급된 것을 의미한다.
- CA에 의해 발급된 인증서라는 것은 해당 서비스(서버)가 신뢰할수 있다는 것을 의미한다.
그런데 인증서에는 공개키가 있다고 했는데 위 과정에서는 공개키가 사용되지 않았다.
사실 SSL 은 암호화된 데이터를 전송하기위해 공개키와 대칭키를 혼합해 사용한다.
공개키는 그 과정 상 대칭키 보다 시간이 오래걸리고 복잡하다.
따라서 속도는 느리지만 데이터를 안전하게 주고 받을 수 있는 공개키 방식으로 대칭키를 암호화하고,
실제 데이터를 주고 받을 때는 대칭키를 이용해 주고 받는다.
'CS 정리 > Network' 카테고리의 다른 글
HTTP1.0, 1.1, 2 (0) | 2023.10.26 |
---|---|
IP, MAC (0) | 2023.10.26 |
HTTP Status, Redirection (0) | 2023.10.26 |
HTTP 메서드 (0) | 2023.10.24 |
HTTP (0) | 2023.10.24 |
- Total
- Today
- Yesterday
- recursion
- Kruskal
- binary search
- 재귀
- DP
- BFS
- Implementation
- floyd warshall
- two pointer
- Tree
- 이분탐색
- Stack
- MVC
- 조합
- Unity
- CSS
- graph
- dfs
- permutation
- Brute Force
- priority queue
- Dijkstra
- Python
- db
- back tracking
- C
- greedy
- C++
- 자료구조
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |