TLS(SSL) - 1. TLS의 암호화 방식(대칭키, 비대칭키)
안녕하세요, 소들입니다 :)
제 티스토리의 첫 포스팅 내용은 바로 TLS에 관련된 내용이에요.
TLS가 뭐야? 하시겠죠?
그럼 먼저 SSL이란 단어는 들어보지 않으셨나요? OpenSSL이라든가
이도 익숙하지 않다면, HTTPS 정도는 들어보셨죠?
모두 '보안'과 관련된 것들이랍니다 :D
이번 포스팅에선 TLS가 무엇이고, 인증서는 무엇이고.. HTTPS는 무엇잉며..
네트워크 상 데이터 보안이 어떤 식으로 되는지..
네 뭐 그런 것들에 관해 공부해볼 거예요.
자 이제 배우러 갑시당 ༼ つ ◕_◕ ༽つ gogo!
코딩은 없고 전체 이론입니다!
제가 이번 job이 Socket 통신에 이 TLS를 적용하는 작업이라,
작업이 끝나면 iOS Socket 통신에선 어떻게 TLS를 사용하는지 포스팅해보도록 할게요.
(이제 시작.. 아이고 막막해라 ʘ̥﹏ʘ )
1. TLS / SSL / HTTPS 란?
먼저 그럼 정의에 대해 알고 갑시다.
그래서 도대체 TLS가 뭐야? SSL은 뭐야? HTTPS는?
먼저 SSL에 대해 알아봅시다.
SSL(Secure Socket Layer)
SSL은 웹사이트와 브라우저(혹은, 두 서버) 사이에 전송된 데이터를 암호화하여 인터넷 연결 보안을 유지하는 표준 기술입니다.
이는 해커가 개인 정보 및 금융 정보를 포함한 전송되는 모든 정보를 열람하거나 훔치는 것을 방지합니다.
라고 합니다.
쉽게 말해, 네트워크 통신을 할 때 보안을 제공하기 위해 설계된 암호 규약이에요.
TCP/IP 네트워크를 사용하는 통신에 적용됩니다.
여기선 정의에 대해선 이정도만 알아도 될 것 같습니다.
실제 TLS가 어떤식으로 보안을 제공하는지가 더 중요하니까요 :D
SSL이 대충 TCP/IP 통신 때 보안을 제공하는 것이라면,
TLS란 무엇일까요?
TLS(Transport Layer Socket)
이렇게 나눠놓으니 둘이 다른 놈 같죠? ٩꒰。•◡•。꒱۶
사실 SSL과 TLS는 같아요.
처음에 네스케이프에 의해 발명된 SSL이 표준화가 되며 바뀐 이름이 TLS랍니다.
TLS 1.0은 SSL 3.0을 계승했답니다.
근데 아직 TLS라는 이름은 생소하여 SSL이 더 널리 쓰이긴 합니다 :)
HTTP / HTTPS
이번엔 HTTP와 HTTPS 차이점에 대해 알아볼 거예요.
S하나 붙었지만 왠지 이 s가 Secure의 약자일 거 같은 느낌이 오시나요.
먼저, HTTP 는 다음과 같이 암호화 되지 않은 평문으로 데이터를 전송해요.
이런 식으로!
따라서 누군가 패킷을 훔쳐보는 스니핑(Sniffing) 👀공격에 취약하죠.
HTTP 통신에선 Wire Shark를 통해 패킷을 확인하면 내 주민번호가 그대로 서버로 전송되는 것을 볼 수 있답니다?
누가 패킷 훔쳐보면 제 주민번호 그대로 털리는 거예요 :D
때문에, 서버와 클라이언트 간 데이터를 보호하기 위해선 인증서를 통해 패킷을 암호화 한 뒤 전송해야 해요.
이것이 바로 HTTPS 입니다.
이때 사용하는 보안 인증(암호화 + 서버인증 등)이 TLS(SSL)입니다.
즉, HTTPS는 TLS 프로토콜 위에서 돌아가는 HTTP 프로토콜입니다.
아직 인증서가 뭔지 모르니 지금은 그냥
통신할 땐 데이터를 '암호화' 하는 보안이 필요하구나!
HTTP 통신에서 보안을 추가한 것이 HTTPS 구나!
이때 보안은 TLS를 통해 하는구나!
정도만 알고 가시면 돼요 :)
참고로 애플은 2016년 10월 경부터 앱스토어에 등록되는 모든 앱은 HTTPS 프로토콜을 이용한 네트워크 통신만 허용하고 있어요.
따라서 서버와 연동하는 앱이라면 서버에서 미리 인증서를 발급받아 준비해두어야 해요.
2. 암호화
자 그럼 TCP/IP 통신을 할 땐 데이터를 암호화 하는 보안이 필요하고,
그 보안 인증에 TLS가 있다는 것도 알았어요:)
그럼 TLS는 도대체 어떻게 데이터를 암호화할까요?
먼저, TLS는 보안과 성능상 이슈로 두 가지의 암호화 방법을 혼용해서 사용합니다.
따라서 다음 두 가지 암호화 방법을 이해해야 해요.
1. 대칭키 암호화(Symmetric key algorithm)
2. 비대칭키 암호화(Asymmetric key algorithm)
띠용 이게모람?
자, 그전에 먼저 암호화 라는 것에 대해 잠깐 얘기하고 갈게요.
암호화라는 것은 무엇인가 남들은 읽을 수 없게, 비밀이 유지되어야 할 때 사용하잖아요?
암호화를 하기 위해선 일종의 키(key)가 필요해요.
키는 뭐 문자가 될 수도 있고 숫자가 될 수도 있고 마음대로 정할 수 있어요.
암호화는 그냥 하는 것이 아니라 이 [키] + [데이터]를 이용하여 [암호화된 데이터]를 만들어 내는 것이랍니당.
따라서 키가 단 한 글자라도 다르다면 암호화의 내용도 전혀 달라져요!!
복호화 또한 마찬가지로 [암호화된 데이터] + [키]를 이용하여 [데이터]를 얻는 것이에요.
때문에 복호화에서도 키(key)는 꼭 필요해요. 키를 모른다면 절대 복호화를 할 수 없어요.
이때 암호화 복호화에 사용하는 이 키는 서로 동일 할 수도, 다를 수도 있어요.
이 부분이 바로 이번에 배울 내용입니다 :)
먼저, 전통적인 암호화 방법인 '대칭키 암호화' 부터 봅시당 (~˘▾˘)~
① 대칭키 암호화(Symmetric key algorithm)
대칭키 암호화란, 암호화를 하는 키와 복호화를 하는 키가 동일한 방식입니다.
이때 암호화와 복호화에 동시에 사용되는 이 키를 대칭키 라고 해요.
ㅋㅋㅋㅋㅋㅋㅋ 발편집 ㅈㅅ
쨌든 위에서 "0823" 이라는 키로 암호화 복호화를 동시에 하고 있죠?
그렇다면 위 커플은 대칭키 "0823"을 이용한 대칭키 암호화를 사용하고 있는 거예요 :)
자, 여기서 이제 대칭키 암호화의 단점이 드러납니다.
네 대칭키는 상대방도 나도 서로 공유를 해야하기 때문에,
대칭키를 전달하는 과정에서 누가 훔쳐볼 위험이 있어요. 👀
만약 대칭키가 해킹당한다면 그럼 당연히 복호화가 가능하니, 데이터도 누출되게 되겠죠 :b
이처럼 대칭키 암호화 방식에선, 대칭키를 상대에게 전달하는 방식에서 해킹당할 리스크가 있습니다.
이러한 대칭키 암호화의 근본적인 문제를 해결하고자 나온것이 다음에 소개하는 비대칭키 암호화 방식입니다.
② 비대칭키 암호화(Asymmetric key algorithm)
하나의 키를 갖는 대칭키 암호화 방식과 달리, 비대칭키 암호화 방식 은 한 쌍의 키를 갖게 됩니다.
한마디로 비대칭키 암호화 방식에선 키가 2개 입니다.
이 두개의 키로 각각 암호화, 복호화를 할 수 있습니다.
만일 A, B라는 두 개의 키가 있다면 A키로 암호화한 데이터는 B키로만 복호화를 할 수 있습니다.
또한 B키로 암호화한 데이터는 A키로만 복호화를 할 수 있습니다.
A키로 암호화한 데이터를 A키로 복호화 할 순 없으며, B키도 마찬가지 입니다.
통상적으로 비대칭키 방식에서 가지는 두개의 키에서
하나는 공개 키(Public Key) , 하나는 개인키(비밀키, Private Key) 라고 부릅니다.
이렇기 때문에 공개키는 암호화를, 개인키는 복호화를 한다고 알려져 있는데 그렇지 않아요.
공개키로 암호화 하면 개인키로 복호화 할 수 있고, 개인키로 암호화 하면 공개키로 복호화 할 수 있습니다.
이렇듯 한 쌍의 키로 암호화, 복호화를 하는 방식 중 대표 알고리즘을 RSA 알고리즘 이라 합니다!
그럼 이 RSA 알고리즘을 통해 어떻게 데이터를 암복호화 하여 주고 받는지 볼까요?
그림으로 충분히 이해는 갈 것 같은데 설명 첨부 할게영!
남자와 여자가 RSA 알고리즘을 통해 메세지를 주고 받는다고 해요.
그렇다면 남자는 공개키와 개인키를 가질 것이고, 여자 또한 공개키와 개인키를 가질 거예요.
이제 여자는 남자에게 자신의 공개키를 알려주고, 남자도 여자에게 자신의 공개키를 알려줍니다.
이 과정에서 공개키가 해킹당한다 해도 개인키를 알지 못하면 복호화를 할 수 없어 안전합니다 :D
그러면 남자의 공개키를 받은 여자는 전송하고자 하는 메시지를 남자의 공개키로 암호화 하여 전송합니다.
그러면 남자는 받은 데이터를 자신의 개인키로 복호화 하여 볼 수 있습니다.
반대로 남자가 여자에게 데이터를 보낼 땐 여자의 공개키로 암호화를 해서 보내고,
여자는 받은 데이터를 자신의 개인키로 복호화 하여 보는 것입니다.
쉽죠 へ( ̄∇ ̄へ)?..
언뜻 보면 비대칭키 방식의 방법이 이렇게 완벽해 보이는데
왜 TLS는 대칭키 방식과 비대칭키 방식을 같이 사용 할까요?
그 이유는 RSA 알고리즘을 이용한 암호화 방식은 복잡한 수학적 원리로 이루어져 있어,
CPU 리소스를 크게 소모한다는 단점이 있기 때문입니다.
이때문에, RSA 비대칭키 방식으로만 통신을 하기에 성능상 어려움이 있습니다.
3. TLS의 암호화 방식
지금까지 대칭키 방식과 비대칭키 방식의 원리를 알아보았어요.
위에서 설명드린 두 방식의 단점 때문에, TLS에서는 이 두 가지 방식을 보완하여 사용한답니다 :)
대칭키 방식에서의 가장 큰 문제점은 대칭키를 전달할 때 해킹당할 리스크였죠?
이를 RSA 비대칭키 방식으로 보안한 것입니다.
처음에 대칭키를 서로 공유하는 통신을 RSA 비대칭키 방식을 이용하고,
실제 통신을 할 때는 CPU 리소스 소모가 적은 대칭키 방식으로 데이터를 주고 받습니다.
이해가 가실까요? :D
RSA 비대칭키 통신을 이용해 대칭키를 안전하게 전달할 수 있고,
이제부턴 대칭키를 해킹당할 일이 없으니 대칭키 방식을 이용해 통신을 하는 것입니다.
예를 통해 이해를 해봅시당!!
비대칭키 암호화 방식으로 대칭키 "1234"를 비밀스레 공유하고,
대칭키를 안전하게 공유 했으니 대칭키 암호화 하여 메세지를 주고 받는 내용입니다 :)
이것이 TLS의 암호화 기본 동작입니다.
TLS는 위의 과정을 필수적으로 거치긴 하지만,
그렇다고 TLS의 작동은 위 과정만으로 끝나진 않아요.
인증서와 공개키가 조작 없이 무결한지 검증(handshake)을 해야 하거든요.
이 내용에 대해선 다음 포스팅에서 다룰게요.
.
.
.
자 ~~ 이렇게 TLS, SSL, 대칭키, 비대칭키(공개키, 개인키)에 대해선 모두 알아본 것 같아요 +(๑❛ᴗ❛๑)+
일단 포스팅이 길어지니 여기서 마치고,
이 다음 포스팅에선 인증서, 디지털 서명, CA 등등에 대해 다루겠습니다~
틀린 내용이나 궁금한 점이 있으시면 댓글 남겨 주세요 :D
감사합니다.