TLS
SSL, OpenSSL, HTTPS 모두 "보안"과 관련된 것입니다.
TSL가 뭔지 알기위해 배경지식을 하나씩 설명해보겠습니다.
1. SSL(Secure Socket Layer)
SSL은 네트워크 통신의 보안을 강화하기 위해 설계된 암호화 프로토콜입니다.
쉽게 말해 웹브라우저와 서버 혹은 두 서버 사이에 전송되는 데이터를 암호화하여 인터넷 통신 보안을 유지하는 표준 기술입니다.
이는 TCP/IP네트워킹에 적용됩니다.
SSL은 현재 TLS로 대체되었다고 합니다.
그러므로 무엇인지만 알고 넘어가도 좋을듯 합니다.
TLS를 알아야죠.
2. TLS
TLS는 SSL의 업데이트버전? 이라고 생각하면 될 것 같습니다.
SSL이 표준화되며 바뀐 이름이 TLS입니다.
아직도 TSL라는 이름 대신 SSL라고 불리긴 하는데 이는 TLS를 의미하는 경우가 많습니다.
3. HTTP/HTTPS
HTTP는 암호화되지 않은 평문으로 데이터를 전송합니다.
데이터를 그대로 전달하므로 "스니핑" 공격에 취약합니다.
*스니핑: 패킷을 훔쳐보는 해킹기법
그러므로 서버와 클라이언트간 데이터를 보호하기 위해 인증서를 통해 패킷을 암호화한뒤 전송해야합니다.
이렇게 HTTP통신에서 TLS기법으로 암호화 후 데이터를 전송하는게 HTTPS입니다.
이 때 사용하는 보안인증(암호화 + 서버인증)이 TLS(SSL)입니다.
HTTPS는 TLS위에서 돌아가는 HTTP 프로토콜입니다.
TLS 기법으로 암호화를 한다고 알았으니 암호화에 대해 알아봅시다.
암호화
TCP/IP 통신을 하기 위해선 암호화가 필요하다고 알았습니다.
만약 암호화를 하지 않으면 외부에 민감한 내 정보가 그대로 보여지겠죠?
(주민등록번호, 카드번호, 비밀번호 등등...)
암호화는 데이터를 숨겨 외부에는 공개되지 않도록 하는 기법입니다.
데이터를 암호화하기 위해선 일종의 키(key)가 필요합니다.
키 + 데이터 = 암호화된 데이터
또한 복호화는 암호화된 데이터를 원래의 데이터로 되돌리는 기법입니다.
암호화: [데이터 + 키] -> [암호화 알고리즘] -> [암호화된 데이터]
복호화: [암호화된데이터 + 키] -> [복호화 알고리즘] -> [복호화된 데이터]
- 만약 키를 모른다면 복호화는 불가능합니다.
- 키가 조금이라도 달라지면 데이터는 완전히 달라집니다.
TLS는 보안과 성능상의 문제로 두 가지 암호화 기법을 혼용해서 사용합니다.
1. 대칭키 암호화(Symmetric key algorithm)
2. 비대칭키 암호화(Asymmetric key algoritm)
1. 대칭키 암호화(Symmetric key algorithm)
대칭키 암호화는 암호화 할때의 키와 복호화 할 때의 키가 동일한 방식입니다.
여기서 암호화와 복호화에 사용되는 키가 대칭키이며, 단 하나의 키로 전부 수행합니다.
- 대칭키는 서로 공유해야합니다.
- 대칭키를 상대에게 전달하는 과정에서 해킹당할 리스크가 있습니다.
- 대칭키가 해킹되는 경우 타인이 데이터를 복호화할 수 있습니다. >> 데이터 누출의 위험이 생깁니다.
- 이 문제를 해결하기 위해 등장한 기술이 "비대칭키 암호화"입니다.
2. 비대칭키 암호화(Asymmetric key algoritm)
비 대칭키 암호화는 하나의 키가 아닌 한 쌍의 키를 갖게됩니다.
여기서 한 쌍의 키는 두개의 다른 값의 키입니다.
- 키는 하나의 쌍으로 두개의 키가 존재합니다.
- 각각의 키로 암호화, 복호화를 진행합니다.
- A, B키가 존재한다면 A키로는 암호화, B키로는 복호화하게됩니다.
- 두 개의 키중 하나는 공개키(Public key), 하나는 비밀키(Private key)가 됩니다.
이렇게 한 쌍의 키로 암호화 하는 방식을 RSA 알고리즘이라고 부릅니다.
RSA 암호화를 통해 데이터를 주고받는 과정은 아래와 같습니다.
TCP/IP를 통해 연결되는 각 주체는 자신의 공개키와 비밀키를 갖게됩니다.
이 후 서로에게 "공개키"만을 전달하게됩니다.
실제 데이터를 전달할 때에는 상대방의 공개키로 암호화를 해서 전달합니다.
데이터를 받은 쪽은 자신의 "비밀키"를 사용해 복호화를 진행합니다.
TLS는 대칭키와 비대칭키 방식을 모두 사용합니다.
비대칭키가 좋아보이지만 모두 사용하는 이유는?
RSA알고리즘을 이요한 방식은 복잡한 수학식으로 CPU리소스를 많이 사용합니다.
그래서 성능상 이점을 위해 두 방식을 모두 혼용해서 사용합니다.
3. TLS의 암호화 방식
대칭키 방식에서의 문제점은 대칭키 전달시 해킹의 리스크가 존재합니다.
TLS암호화 방식은 여기서 나온 "대칭키 전달시 해킹의 리스크"를 RSA비대칭키 방식으로 보완합니다.
1. 대칭키를 공유하는 과정을 RSA방식으로 진행합니다.
2. 실제 통신은 CPU리소스가 적은 대칭키 방식으로 진행합니다.