0%

SSL과 TLS에 대하여

SSL(Secure Soket Layer)과 TLS(Transport Layer Security)

웹 개발을 하다 보면 보안은 필수이며, SSL과 TLS라는 용어는 한번쯤 들어봤을 용어이다.
오늘 포스팅에서는 저 두가지에 대한 이론적인 부분을 다뤄보려 한다.


역사

TLS는 SSL이 표준화 되면서 바뀐 이름이다.
SSL은 엄청 옛날 회사인 Netscape 라는 곳에서 개발되었다.
이후 SSL은 인터넷 보안 영역에서 표준화되어 가면서 IETF(Internet Engineering Task Force)라는 곳에서 TLS(Transport Layer Security)로 이름을 변경하였다.

SSL의 경우 1.0 버전은 공개되지 않았고, 2.0 버전은 1995년 2월에 공개가 되었지만 많은 보안 결함으로 인해 1996년에 3.0 버전이 공개된다.
이 SSL 3.0이 TLS 1.0 버전의 기초가 된다.

1999년에 RFC 2247으로 표준 규약이 정의되었고 최종 갱신은 RFC 5246로 정의 되었다.

정리하자면 SSL은 TLS랑 같은 의미이며, TLS라는 용어보다는 SSL이라는 용어로 많이 소개되고 있다.


동작방식

SSL의 경우 OSI 7계층중 특정 계층에 속해있는 것이 아닌 전송계층응용계층 사이에 독립적인 계층을 만들어 동작한다.
주로 SSL 계층(SSL Layer)라고 하는데 아래의 이미지는 OSI 계층과 SSL 계층을 나타낸 것이다.

데이터를 전송할 때는 응용 계층에서는 외부로 보내는 데이터를 SSL에 보내게 되고, 이를 암호화 하여 TCP로 보내게 된다.
전달 받을 때도 TCP를 통해서 받은 암호화 된 데이터는 SSL에서 복호화하여 응용계층으로 보낸다.
이 과정에서 응용 계층은 SSL을 TCP로 인식, TCP는 SSL을 응용 계층으로 인식하기에 두 계층 사이에 전달 방식은 기존과 같이 처리가 된다.


SSL Protocal

TCP 계층 위의 SSL에서는 몇 가지 프로토콜이 있는데 이를 간단하게 알아보도록 한다.


Record Protocal

데이터의 압축을 수행하여 안전한 TCP 패킷으로 변경, 데이터를 암호화, 무결성을 위한 메세지 인증을 수행하는 프로토콜이다.
위 동작방식에서 SSL 계층을 보면 이 프로토콜 위에 몇 가지 프로토콜들이 존재하는데, 이 프로토콜들의 동작을 하기 위한 기반을 마련한다.

Change Cipher Spec Protocal

암호화 알고리즘과 보안 정책을 송수신 측 간에 조율하기 위해 사용하는 프로토콜이다.

Alert Protocal

2바이트로 구성된 오류 메세지를 담는 프로토콜이다.

Handshake Protocal

암호 알고리즘 결정, 키 분배, 서버 및 클라이언트 인증을 수행하기 위해 사용되는 프로토콜이다.
우리가 보통 알고 있는 SSL의 통신방식의 표현은 이곳을 나타낸다.


SSL의 Handshake Protocal

위에서 알아본 Handshake를 조금 더 자세하게 알아보도록 한다.

위 그림은 SSL의 Handshake를 나타낸 것이고, 각 과정은 아래와 같다.

  1. 통신의 시작을 알리는데 클라이언트에서는 아래의 정보를 SSL 서버에게 보내게 된다.
    • 클라이언트에서 생성한 임의 문자열 데이터 (5번에서 사용)
    • 클라이언트가 지원하는 암호화 방식 및 SSL 버전 정보
    • 세션 정보 : 이미 SSL 통신을 했던 상태라면 재활용을 위해 사용한다.
  2. SSL 서버는 정보를 수신 후 클라이언트에게 응답을 해주는 아래의 정보를 같이 보내게 된다.
    • SSL 서버에서 선택한 암호화 방식(클라이언트가 지원하는 암호화 방식 중 한 가지)
    • SSL 서버에서 생성한 랜덤 데이터 (5번에서 사용)
    • 인증서 정보
  3. 2번 과정에서 인증서 부분을 받는 과정. (보통 2,3은 묶어서 처리)
  4. 클라이언트는 SSL 서버로부터 받은 인증서를 통해, 해당 인증서가 신뢰할 수 있는지를 확인하고, 공개키를 획득한다.
  5. 아래의 순서로 처리를 한다.
    • 클라이언트에서는 1번과 2번의 임의 문자열을 통해 Pre Master Secret이라는 키를 생성
    • 위에서 만든 키를 서버에서 보내준 공개키로 위 키를 암호화 하여 서버로 보낸다.
    • 이 키는 서버와 클라이언트가 데이터를 주고 받을 때 대칭키 방식에 사용한다.
  6. 서버는 인증서 확인 및 클라이언트에서 보낸 Pre Master Secret 키를 비밀키로 복호화 한다.
  7. 6번 과정을 통해서 서버/클라이언트는 Pre Master Secret 키를 Master Key로 생성하게 되고 이 키를 통해 Session Key를 만들게 되며, Session Key를 통해 대칭키 방식으로 통신을 하게 된다.
  8. 실질적인 데이터 통신 진행

SSL에서 사용하는 암호 알고리즘

SSL에서 사용하는 암호 알고리즘은 아래와 같다.

  • 전자서명 및 키 교환
    • RSA, DH/DHE-DSS/RSA, DH, Fortezza
  • 암호화
    • RC4, RC5, IDEA, DES, 3DES, Fortezza
  • Hash 함수
    • MD5, SHA-1

정리

간단하게 SSL에 대하여 알아본 포스팅이었다.
향후에 공개키 암호화 방식이나 인증서에 대해서 포스팅을 해보며 공부를 해봐야겠다.




자료 출처
https://ko.wikipedia.org/wiki/전송_계층_보안
https://m.blog.naver.com/xcripts/70122755291
https://hanjungv.github.io/2017-11-07-1_CS_SSL/