열쇠와 자물쇠와 비대칭키 암호화 - 그림으로 알아보는 SSL/TLS 통신 #1
SSL/TLS와 그것을 활용하는 HTTPS는 웹 생태계에서 점점 필수적인 존재가 되어가고 있다.
SSL/TLS는 서버와의 통신을 누군가 도청하거나 변조하지 못하도록 하는 보안 기술이다.
실제로 Chrome이나 Firefox 등 모던 브라우저들은 모두 HTTPS 통신을 기본으로 작동하며 HTTPS 통신이 어려울 경우 사용자에게 그 사실을 알린다.
특히 Firefox에는 HTTPS-only mode가 있어 활성화 할 경우 HTTPS통신이 아닌 HTTP 요청은 전부 거부하도록 할 수 있다.
그렇다면 이 SSL/TLS는 어떻게 동작할까? 그림과 함께 알아보자.
이어지는 SSL/TLS #2 포스트에서 인증서 검증과 디피헬만에 대해 다뤄볼거에요!
자물쇠와 열쇠
![](https://pmh.codes/content/images/2024/01/image.png)
자 여기 Alice와 Bob이 서로 암호화 통신을 한다고 가정하자.
이때 Alice와 Bob은 자물쇠와 열쇠를 가지고 있다.
Alice의 열쇠는 Alice의 자물쇠를 열거나 잠글 수 있고
Bob의 열쇠는 Bob의 자물쇠를 열거나 잠글 수 있다
![](https://pmh.codes/content/images/2024/01/image-20.png)
![](https://pmh.codes/content/images/2024/01/image-3.png)
![](https://pmh.codes/content/images/2024/01/image-4.png)
![](https://pmh.codes/content/images/2024/01/image-5.png)
![](https://pmh.codes/content/images/2024/01/image-6.png)
이렇게 서로의 자물쇠를 교환한다.
자 그럼 이제 서로의 자물쇠를 활용해 안전한 통신을 진행해보자.
![](https://pmh.codes/content/images/2024/01/image-7.png)
![](https://pmh.codes/content/images/2024/01/image-8.png)
![](https://pmh.codes/content/images/2024/01/image-9.png)
![](https://pmh.codes/content/images/2024/01/image-10.png)
![](https://pmh.codes/content/images/2024/01/image-11.png)
![](https://pmh.codes/content/images/2024/01/image-12.png)
이런식으로 열쇠와 자물쇠를 잘 활용한다면 Alice와 Bob은 안전하게 데이터를 주고 받을 수 있다.
하지만..
![](https://pmh.codes/content/images/2024/01/image-13.png)
자물쇠와 열쇠를 잠그고 푸는 과정은 수학적으로 매우 복잡해 느리고 자주 반복하기 어렵다. 특히 준-실시간 통신이 필요한 경우 성능 문제가 너무 크다.
어떻게 이 점을 해결할 수 있을까? 정답은 간단하다. 열쇠가 필요 없는 자물쇠를 쓰면 된다.
숫자로 잠그는 자물쇠
![](https://pmh.codes/content/images/2024/01/image-14.png)
기존에 열쇠로 잠그는 자물쇠와 달리 숫자로 잠그는 자물쇠는 Alice와 Bob 모두 비밀번호를 알고 있어야 한다.
이미 우리는 안전하게 데이터를 전송하는 방법을 알고 있다. 이제 안전하게 새 자물쇠의 비밀번호를 전달해보자.
![](https://pmh.codes/content/images/2024/01/image-15.png)
![](https://pmh.codes/content/images/2024/01/image-16.png)
![](https://pmh.codes/content/images/2024/01/image-17.png)
이제 Alice와 Bob은 같은 자물쇠를 공유한다. 또한 그 비밀번호도 서로 알게 된다. 이는 계산이 매우 간단해지는 결과를 준다. 같은 비밀번호로 자물쇠를 열기만 하면 되기 때문이다.
Bob은 테스트 삼아 Alice에게 알겠다는 응답을 보내고자 한다.
![](https://pmh.codes/content/images/2024/01/image-18.png)
당연히 Alice는 자물쇠를 풀어 이 편지를 읽어볼 수 있다.
앞으로는 이 새로운 자물쇠로 통신을 진행해나간다.
![](https://pmh.codes/content/images/2024/01/image-19.png)
자 이렇게 Alice와 Bob은 안전한 통신을 할 수 있게 되었다.
Eve의 공격
이제 Eve라는 나쁜 공격자가 이 통신을 훔쳐 보려고 한다. 이 경우 어떻게 될까?
![](https://pmh.codes/content/images/2024/01/image-21.png)
1번 사진에서 Eve가 Alice의 자물쇠를 훔쳤다고 가정해보자.
![](https://pmh.codes/content/images/2024/01/image-22.png)
하지만 Eve는 Bob이 Alice에게 보내는 내용을 열어볼 수 없다.
왜냐면 자물쇠는 열쇠로만 풀 수 있을 뿐, 자물쇠를 자물쇠로 열 수는 없는 노릇이기 때문이다.
![](https://pmh.codes/content/images/2024/01/image-23.png)
Alice가 Bob에게 보낼때는 Eve는 열어볼 시도조차 하지 못하게 된다. Bob의 자물쇠를 처음 보았기 때문이다.
![](https://pmh.codes/content/images/2024/01/image-24.png)
Bob과 Alice가 새로운 자물쇠를 합의 볼때도 마찬가지며
![](https://pmh.codes/content/images/2024/01/image-25.png)
결국 Eve는 아무 통신도 풀어 볼 수 없게 된다.
비대칭키와 대칭키
![](https://pmh.codes/content/images/2024/01/image-26.png)
우리는 이때까지 두가지의 자물쇠 방식을 사용했다.
비대칭키 암호화
이 중 열쇠와 자물쇠 세트로 작동하는 자물쇠를 잠그는 법과 푸는 법이 다르다는 의미로 비대칭키 암호화라고 부른다.
이때 이 자물쇠는 누구에게나 뿌려도 보안에 지장이 없기 때문에 공개키라고 부르고 개인키는 절때 공개되어서는 안되므로 개인키라고 불린다.
비대칭키 암호화에는 큰 소수의 소인수분해를 활용한 RSA 알고리즘과 타원곡선의 난해함을 활용한 ECDSA 알고리즘이 있다.
대칭키 암호화
숫자로 잠그는 자물쇠는 잠그는 법과 푸는 법이 같으므로 대칭키 암호화라고 부른다.
대칭키 암호화에는 DES, 3DES, AES 등이 있으며 기존에는 DES를 많이 썼지만 DES에 취약점이 발견된 이후로 DES를 3번 돌리는 3DES가 쓰였고 속도 문제를 버티다 못해 결국 AES라는 새로운 알고리즘을 제작해 현재 가장 많이 쓰이고 있다.
[Deep-Dive] 혼돈과 확산
암호학의 대가 클로드 섀넌이 발표한 "혼돈"과 "확산"은 암호화의 필수 요소라고 할 수 있다.
![](https://pmh.codes/content/images/2024/01/image-27.png)
![](https://pmh.codes/content/images/2024/01/image-28.png)
혼돈은 간단히 말해서 결과를 보고 입력을 유추하지 못하도록 규칙을 복잡하게 하는것을 의미하고
확산은 키가 조금만 변경되더라도 결과를 전체적으로 다 섞어버려 키의 영향력을 결과 전체에 주는 것을 의미한다.
이 혼돈과 확산 과정은 모든 암호화 알고리즘에 포함되어 있으며 매우 중요한 부분을 차지한다.
진짜 안전한가?
여기까지 이해를 위한 간단한 암호화 과정을 배워보았다.
하지만 진짜 이 과정이 안전하다고 생각하는가? 다음의 질문을 답해보자.
- 만약 Eve가 본인이 Bob이라며 Alice에게 거짓말을 한다면?
- 자물쇠와 열쇠를 주고받는 것이 과연 안전하다고 할 수 있을까? 불필요하진 않을까?
이어지는 SSL/TLS 다음 포스트에서는 두 문제를 해결하는 전자서명과 DH 키 교환에 대해서 알아보자.
혹시나 잘못된 내용이나 SSL/TLS에 대해 더 궁금했던 것, 오타가 있다면 댓글로 알려주세요!