[ #11 ] 클러스터 보안 - 2

1. TLS / SSL / HTTPS 란?

SSL(Secure Socket Layer)

SSL은 웹사이트와 브라우저(혹은, 두 서버) 사이에 전송된 데이터를 암호화하여 인터넷 연결 보안을 유지하는 표준 기술입니다.

이는 해커가 개인 정보 및 금융 정보를 포함한 전송되는 모든 정보를 열람하거나 훔치는 것을 방지합니다.

쉽게 말하자면, 네트워크 통신을 할 때 보안을 제공하기 위해 설계된 암호 규약이며, TCP/IP 네트워크를 사용하는 통신에 적용됩니다.

  • SSL의 구조

    ssl-arch

TLS(Transport Layer Socket)

이름은 SSL 과 다르지만 사실 둘은 같다고 합니다. TLS1.0은 SSL 3.0을 그대로 계승한 것이라고 합니다.

HTTP / HTTPS

- HTTP

  • HTTP 는 다음과 같이 암호화 되지 않은 평문으로 데이터를 전송합니다

http

따라서 누군가 패킷을 훔쳐보는 스니핑(Sniffing) 공격에 취약하지요.

HTTP 통신에선 해커가 Wire Shark를 통해 패킷을 확인하면 내 비밀번호가 그대로 서버로 전송되는 것을 볼 수 있는것이죠

- HTTPS

  • HTTPS 는 다음과 같이 암호화 된 데이터를 전송합니다

https

이때 사용하는 보안 인증(암호화 + 서버인증 등)이 TLS(SSL)입니다.

즉, HTTPS는 TLS 프로토콜 위에서 돌아가는 HTTP 프로토콜입니다.

간단하게 말해서 통신할 떄에 데이터를 ‘암호화’ 하는 보안이 필요하다,

HTTP 통신에서 보안을 추가한 것이 HTTPS이며

이때 보안은 TLS를 통해 한다 정도로 알고 넘어가면 되겠습니다.


2. 암호화

이제 TCP/IP 통신을 할 땐 데이터를 암호화 하는 보안이 필요하고,

그 보안 인증에 TLS가 있다는 것도 알았으니 TLS가 어떻게 데이터를 암호화 하는지 알아봅시다.

먼저, TLS는 보안과 성능상 이슈로 두 가지의 암호화 방법을 혼용해서 사용합니다.

따라서 다음 두 가지 암호화 방법을 이해해야 합니다

  • 대칭키 암호화(Symmetric key algorithm)
  • 비대칭키 암호화(Asymmetric key algorithm)


암호화를 하기 위해선 일종의 키(key)가 필요합니다.

키는 뭐 문자가 될 수도 있고 숫자가 될 수도 있고 마음대로 정할 수 있지요.

암호화는 그냥 하는 것이 아니라 이 [키] + [데이터]를 이용하여 [암호화된 데이터]를 만들어 내는 것입니다

따라서 키가 단 한 글자라도 다르다면 암호화의 내용도 전혀 달라집니다!

  • 대칭키 암호화

    대칭키 암호화는, 암호화를 하는 키와 암호를 해독하는 키가 같은 방식입니다.

    이때 암호화와 복호화에 동시에 사용되는 이 키를 대칭키 라고 합니다.

    예를들면 아래 그림과 같습니다.


    symmetric


    자, 여기서 이제 대칭키 암호화의 단점이 드러납니다.

    대칭키는 상대방도 나도 서로 공유를 해야하기 때문에,

    대칭키를 전달하는 과정에서 누가 훔쳐볼 위험이 있습니다.

    만약 대칭키가 해킹당한다면 그럼 당연히 복호화가 가능하니, 데이터도 누출되게 되겠죠 :b

    이처럼 대칭키 암호화 방식에선, 대칭키를 상대에게 전달하는 방식에서 해킹당할 리스크가 있습니다.

    이러한 대칭키 암호화의 근본적인 문제를 해결하고자 나온것이 다음에 소개하는 비대칭키 암호화 방식입니다.

  • 비대칭키 암호화

    하나의 키를 갖는 대칭키 암호화 방식과 달리, 비대칭키 암호화 방식 은 한 쌍의 키를 갖게 됩니다.

    한마디로 비대칭키 암호화 방식에선 키가 2개 입니다.

    이 두개의 키로 각각 암호화, 복호화를 할 수 있습니다.


    만일 A, B라는 두 개의 키가 있다면 A키로 암호화한 데이터는 B키로만 복호화를 할 수 있습니다.

    또한 B키로 암호화한 데이터는 A키로만 복호화를 할 수 있습니다.

    A키로 암호화한 데이터를 A키로 복호화 할 순 없으며, B키도 마찬가지 입니다.


    통상적으로 비대칭키 방식에서 가지는 두개의 키에서

    하나는 공개 키(Public Key) , 하나는 개인키(비밀키, Private Key) 라고 부릅니다.

    이렇기 때문에 공개키는 암호화를, 개인키는 복호화를 한다고 알려져 있는데 그렇지 않답니다.

    이를 그림으로 설명하자면 다음과 같습니다


    enc



    이렇듯 한 쌍의 키로 암호화, 복호화를 하는 방식을 RSA 알고리즘 이라 합니다!

    조금더 이해하기쉽게 그림으로 표현해보자면 아래와 같습니다.


    rsa

    상대방의 공개키를 바탕으로 암호화해서 보내면 해당 공개키의 쌍인 비밀키를 가진 상대방 만이 암호를 해독할 수가 있겠죠?

    해커가 공개키를 얻는다고해도 암호를 해독할 수 없기때문에 더욱 안전한 암호화 방식입니다.

    언뜻 보면 비대칭키(RSA) 방식의 방법이 이렇게 완벽해 보이는데

    왜 TLS는 대칭키 방식과 비대칭키 방식을 같이 사용 할까요?


    그 이유는 RSA 알고리즘을 이용한 암호화 방식은 복잡한 수학적 원리로 이루어져 있어,

    CPU 리소스를 크게 소모한다는 단점이 있기 때문입니다.

    이때문에, RSA 비대칭키 방식으로만 통신을 하기에 성능상 어려움이 있습니다.


3. TLS의 암호화 방식

지금까지 대칭키 방식과 비대칭키 방식의 원리를 알아보았습니다.

위에서 설명드린 두 방식의 단점 때문에, TLS에서는 이 두 가지 방식을 보완하여 사용합니다.

대칭키 방식에서의 가장 큰 문제점은 대칭키를 전달할 때 해킹당할 리스크였죠?

이를 RSA 비대칭키 방식으로 보안한 것입니다.

실제 통신을 할 때는 CPU 리소스 소모가 적은 대칭키 방식으로 데이터를 주고 받습니다.

이하기쉽게 그림으로 설명드리도록 하겠습니다!


tls


CPU 리소스를 크게 소모한다는 RSA방식은 한번만 사용하여 대칭키를 알아내는용도로만 쓰이고

나머지 통신은 값이 싼 대칭키 방식을 사용하는 것입니다.

그림으로 보니 더 쉽게 이해가 되시지요?

이렇게 TLS, SSL, 대칭키, 비대칭키(공개키, 개인키)에 대해선 모두 알아보았구요

이번 포스팅은 길어지니 여기서 마치고,

이 다음 포스팅에선 인증서, 디지털 서명, CA 등등에 대해 다뤄보겠습니다~