Ⅰ. SSL 개념
SSL은 Secure Socket Layer의 약자로 Netscape에서 개발된 프로토콜로서 1995년 히크만(Hickman)에 의해서 개발되었으며,현재 인터넷 사용자들에게 안전한 개인 정보를 교환하기 위한 표준 프로토콜로 인정되어 많은 온라인 상거래에 사용되고 있다. SSL은 실제 다양한 장점을 지닌 암호화 기법들을 사용해 세계 각국에서 사용되는 대부분의 암호화 기법들을 지원할 수 있다.
SSL은 버전 3.0이후 IETF(Internet Engineering Task Force)에서 표준화되어 TLS (Transport Layer Security)로 명명되었지만 실제 그 내용은 SSL 3.0과 TLS v1.0이 같으며, MS Explorer나 Netscape등 대부분의 브라우저에서 지원하고 있다. SSL 프로토콜에서 사용 될 수 있는 다양한 어플리케이션 프로토콜이 있지만 주로 사용되는 프로토콜은 HTTP이다.
SSL은 크게 3가지 기능을 제공하며, 공개되어 있는 인터넷상에서 일어나는 트랜잭션의 기밀성(Privacy)을 보장한다.
Ⅱ. SSL 기능
① 사이트 인증 (Site Authentication)
사용자가 선택한 Web Site를 인증한다. 즉 우리가 인터넷 뱅킹 이나 인터넷 쇼핑몰을 사용할 경우 이용하는 Web Site가 실제로 신뢰할 수 있는 은행이나 쇼핑몰의 웹 서버 인지를 인증한다는 것으로, 이용하는 Web Site에 대한 신뢰성 있는 인증이 없다면, 사용자는 불확실한 누군가에게 자신의 민감한 정보를 넘기는 위험에 처하게 된다.
② 데이터 기밀성 (Data Privacy)
전달되는 데이터가 도중에 누군가에 의해 판독되지 않음을 보장한다. SSL은 다양한 암호화 알고리즘을 사용하여 인터넷을 통해 전송되는 개인의 사적인 정보를 외부로부터 불법적인 판독을 막는다.
③ 데이터 무결성 (Data Integrity)
사용자의 브라우저로부터 Web Server까지 전달되는 동안 데이터가 도중에 누군가에 의해 변경되지 않도록 보장한다.
SSL은 위와 같은 기능을 가지고 있으며, 보다 안전한 커뮤니케이션을 할 수 있도록 도와주며 널리 보급된 대부분의 웹 브라우저와 웹 서버들에서 지원된다.
SSL은 OSI 7 Layer에서 5계층인 Session Layer에 속하며, 지원 가능한 프로토콜은 어플리케이션 Layer 상에 하부 프로토콜로 한정 될 수 밖에 없으며, 그 종류는 HTTP, IMAP, FTP, NNTP등이 있다.
Ⅲ. SSL 동작 원리
SSL이 수행되는 단계는 다음 3가지로 분류된다.
① SSL 서버 인증 (SSL Server Authentication)
사용자의 웹 브라우저가 Web Server를 인증하는 단계이다.
SSL을 지원하는 웹 브라우저는 표준 공용키 암호화 기법을 사용하여, 서버의 인증서와 공용 ID를 실제로 브라우저가 신뢰하는 인증기관 (Trusted CA)으로부터 발급받았는지 여부를 인증하는 기능을 내장하고 있다.
② SSL 클라이언트 인증 (SSL Client Authentication)
Web Server가 자신에게 요청한 클라이언트를 인증하는 단계이다.
서버 인증서에 사용했던 동일한 기법으로 인증하는데, 서버에 내장된 SSL 지원 소프트웨어나 서버 앞에 배치된 SSL하드웨어는 클라이언트의 인증서와 공용 ID를 실제로 서버가 신뢰하는 인증기관(Trusted CA)으로부터 발급 받았는지 여부를 인증하는 기능을 내장하고 하고 있다.
③ 암호화 통신 (Encrypt Connection)
서로에 대한 인증 단계 이후 정상적으로 종결되면 클라이언트와 서버 사이에 교환되는 모든 데이터는 사적인 내용을 보호하기 위한 암호화를 요구 받는다. 또한 SSL Connection을 통해 암호화된 데이터 역시 전송 중 변경을 방지(Message Integrity)하기 위해 Hash 알고리즘을 이용하여 보호한다.
위 3가지 단계를 기반으로 실제로 동작하는 순서는 아래와 같으며, 아래의 순서를 진행하기 전에 SSL 또한 TCP 프로토콜에 기반을 두고 있으므로 반드시 TCP 3 Handshake가 이루어져 있어야 한다.
① 클라이언트는 서버에게 Client Hello Message 전송
- 일반적으로 브라우저를 통해 서버에게 SSL 연결 요청을 하기 위한 초기 단계이다.
② 서버는 클라이언트로 Server Hello Massage와 서버 인증서를 전송하며, 만약 클라이언트 인증서가 필요한 경우에 인증서 요청도 함께 전송
- 서버는 클라이언트가 자신의 적합한 서버인지를 인증할 수 있도록 신뢰하는 인증기관으로부터 발급받은 자신의 공인 인증서를 발송한다. 이때 일반적으로 서버 인증서와 함께 서버의 공용키가 클라이언트 측에 전달된다. 만약 클라이언트에 대한 인증을 필요로 하는 트랜잭션이라면 이에 대한 요청도 함께 발송한다.
③ 클라이언트는 암호화에 사용되는 Session Key와 함께 클라이언트에서 지원하는 Chipher Suite를 서버로 전송하며, 서버가 인증서를 요청한 경우에는 클라이언트의 인증서도 함께 전송
- 서버의 인증서에 대해 클라이언트는 브라우저 내에 저장되어 있는 신뢰기관으로부터의 발급여부를 확인하고, 암호화에 사용될Session Key를 생성해 서버 공용키로 Session Key를 암호화하여, 서버에게 전달된다. 또한 암호화된 Session Key와 함께 브라우저가 지원하는 Chipher Suite(암호화 기법 리스트)과 함께 서버측에서 클라이언트의 인증서를 요청한 경우 스스로의 인증서를 발송한다.
④ 서버는 Chipher Suite를 받아들이고(또는 거부) Finished Message를 클라이언트로 전송한 후 데이터 전송 단계로 이동
- 서버는 클라이언트로부터 클라이언트 브라우저가 지원하는 Chipher Suite를 받고 클라이언트에게 종결 메시지를 보내고 데이터 전송 단계로 돌입한다. 여기까지 정상적으로 완료가 되면 클라이언트가 생성한 Session Key를 클라이언트와 서버가 모두 공유하게 된다.
⑤ 클라이언트는 최종 메시지를 서버로 전송하고 데이터 전송 단계로 이동
- ④번까지 정상적으로 완료되면 클라이언트는 종결 메시지를 서버로 보내고 실제 데이터를 전송하기 위한 단계로 돌입한다.
⑥ 상호 합의한 Chipher Suite에 의해 암호화된 메시지를 교환
- ⑤번에서 서로 나누어 가진 Session Key로 암호화된 데이터를 교환하게 된다.
Ⅳ. SSL에 이용되는 암호화 기법
SSL이 수행되는 단계를 보면 Session Key라는 것이 등장한다. Session Key는 한마디로 클라이언트 측에서 생성하여 서버로 전달되는 하나의 키로, 하나의 동일한 키를 클라이언트와 서버가 각각 보관함에 저장하고, 이후 전달되는 암호화된 데이터를 복호화 할 수 있도록 한다. 이 Session Key의 생성 및 전달 과정에 대한 보다 깊은 이해는 사실상 암호화 기법에 대한 이해를 그 바탕으로 한다.
SSL 수행 단계에서 교환되는 Session Key는 비밀키 암호화(Secret Key Cryptography), 즉 대칭적 암호화에서 사용되는 키로서 하나의 키를 양쪽 상대방이 각기 나누어 가짐으로써 하나의 암호화된 데이터를 송신 측에서 전송하면 수신 측에서 암호화 시 사용한 동일한 키로 복호화 하는 단순한 구조를 가진다.
비밀키 암호화 기법의 다음과 같은 두 가지 큰 문제점을 가지고 있다.
① 어떻게 동일한 키를 서버와 클라이언트가 서로 공유하여 가질 것인가?
② 서버측에서 볼 때 하나의 클라이언트당 각기 다른 Session Key가 필요하기 때문에 어떻게 키 관리를 할 것 인가?
위와 같은 문제 때문에 등장한 것이 공개키 암호화 즉 비대칭키 암호화 기법이다. 이 암호화 기법은 비밀키와 공개키라고 불리는 각기 다른 키로 구성된 한 쌍의 키를 클라이언트와 서버가 나누어 가지고 비밀키로 암호화된 데이터는 그와 같은 쌍의 공개키로만 복호화되는 알고리즘을 제공하고 있다. 이 암호화 기법은 비밀키 암호화 시 발생하는 키 교환의 문제를 해결해 주었다. 그러나 이 공개키 암호화 기법도 다음과 같은 문제점을 가지고 있다.
① 각기 나누어 갖는 한 쌍의 키를 가진 상대방에 대한 인증에 대한 문제
② 암호화 / 복호화 과정에 많은 부하가 걸림
위와 같은 문제점들이 발생해서 실제로 SSL 수행의 경우 위에서 언급한 두 가지 암호화 기법과 PKI기반의 디지털 인증서를 사용한 인증을 혼합하여 사용한다.
이렇게 함으로써 디지털 인증서(Digital Certificate) 교환을 통해 상대방을 인증하고, 공개키 암호화의 단점을 줄였으며 서버에서 클라이언트로 전달된 서버의 공개키로 클라이언트에서 생성된 Session Key를 암호화하여 서버로 전달하는 공개키 암호화 기법을 사용하여 비밀키 암호화의 키 교환 문제를 제거하고 Session Key가 전달된 후 Session Key를 통해 실제 데이터를 암호화 /복호화함으로 공개키 암호화 시 발생하는 부하로 인한 서비스 지연 현상을 방지 할 수 있게 되었다.
Ⅴ. SSL에서 사용되는 암호화 알고리즘
SSL에서 Session Key를 통해 암호화하는 암호화 알고리즘은 아래와 같이 있으며, 40bit ~ 168bit까지 사용된다.
- DES (Data Encryption Standard)
데이터 암호화 표준. 미국 정부에서 이용하는 암호 알고리즘
- DSA (Data Signature Algorithm)
데이터 서명 알고리즘. 미국 정부에서 키 교환 시 이용하는 알고리즘
- KEA (Key Exchange Algorithm)
키 교환 알고리즘. 미국 정부에서 키 교환 시 이용하는 알고리즘
- MD5
리베스트(Rivest)에서 개발된 메시지 압축 알고리즘
- RC2 & RC4
RSA 데이터 시큐리티에서 개발한 리베스트 알고리즘
- RSA Key Exchange
RSA알고리즘 기반 SSL을 위한 키 교환 알고리즘
- SHA-1
안전 해쉬 알고리즘. 미국 정부에서 사용하는 해쉬 함수
- 스킵잭(SKIPJACK)
미국 정부에서 사용하는 FORTEZZA-complaint 하드웨어에서 사용하는 체계화된 대칭키 알고리즘
- 트라이플 DES(Triple-DES)
3번 적용된 DES
KEA (Key Exchange Algorithm)나 RSA Key Exchange와 같은 키 교환 알고리즘에 따라 클라이언트와 서버가 SSL Session 수립에 사용할 대칭키를 선택하는 방법이 결정된다. 가장 일반적으로 이용되는 SSL 암호화 알고리즘은 RSA Key Exchange방식을 따른다.
'Infomation' 카테고리의 다른 글
공개키 암호화 방식(Public Key Cryptography) (0) | 2013.07.11 |
---|---|
SSH(Secure Shell) (0) | 2013.07.11 |
[wireless] TKIP (Temporal Key Integrity Protocol) (0) | 2013.07.11 |
[wireless] WPA(Wi-Fi ProtectedAccess) (0) | 2013.07.11 |
[wireless] WEP(Wired Equivalent Privacy) (0) | 2013.07.11 |