PostList

2015년 12월 7일 월요일

SSL 이란 무엇인가?


SSL(Secure Socket Layer)이란 무엇인가?
  
SSL은 네트워크 내에서 메시지 전송의 안전을 관리하기 위해 넷스케이프에 의해 만들어진
프로그램 계층(Layer) 입니다.
넷스케이프의 생각은, 비밀이 보장되어야하는 메시지를 맡은 프로그램은 웹브라우저 또는
HTTP와 같은 응용프로그램과, 인터넷의 TCP/IP 계층 사이에 들어가야 한다는 것입니다.
여기서 "소켓"이라는 용어는 데이터를 네트웍상의 클라이언트와 서버 프로그램 사이, 또는 
같은 컴퓨터의 프로그램 계층끼리 주고받는 소켓 방식을 줄여서 말한 것이다. 넷스케이프
의 SSL은 디지털 증명의 사용에도 포함되는 RSA의 공개/개인키 암호화 시스템을 사용하며
SSL은 넷스케이프 브라우저의 없어서는 안될 핵심 부분이고, 만약 어떤 웹사이트에
넷스케이프 서버가 설치되어 있으면, SSL을 사용하여 특정한 웹페이지가 SSL 액세스를
필요로 하는지를 식별할 수 있습니다. 다른 서버들에서는 넷스케이프의 SSLRef 프로그램
라이브러리를 사용하면 되는데, 상용이 아니라면 무료로 다운로드할 수 있지만, 상용으로
쓰려면 라이선스 비용을 내야합니다.
넷스케이프는 SSL을 W3C에 표준 프로토콜로서 제안했으며, IETF에는 웹브라우저와
서버를 위한 표준 보안 접근방법으로 제시하였습니다.

위 내용은 구글에서 SSL을 검색하면 찾을수있는 정보입니다.

구글에서 확인할 수 있는 정보를 요약하자면 SSL은 넷스케이프에서 만들었으며 통신시
주고받는 데이터중 보안이 필요한 데이터를 공개키/개인키 암호화 시스템을 사용하여
데이터를 암호화하고 SSL은 현재 웹표준 프로토콜로 사용되고 있다는 것입니다.

현재 SSL은 3.0버전, TLS는 1.2 버전이 나와있으며 SSL3.0 에 기반을 두고 만들어진것이 
TLS 이기때문에 SSL의 3.1 버전 이라 하기도 합니다.
현재 대부분의 브라우저 에서는 SSL2.0/3.0 과 TSL1.0 버전 모두 사용 됩니다.


SSL은 왜 필요한가?
우리가 사용하고있는 인터넷 환경은 생각보다 안전하지 못합니다.
하지만 우리는 필요에 따라 다양하고 중요도 높은 정보를 인터넷을 통해 입력하고,
사용하고있으며 대표적인 예로 물품구입시 결제를 위해 입력해야하는 신용카드 정보나
회원가입시 입력하는 본인의 개인정보등이 있습니다.
이러한 내용들은 네트워크를 통해 데이터(패킷)의 형태로 통신망을 왔다갔다 하게 됩니다.

이때 우리의 중요한 정보를 가지고있는 데이터가 아무런 암호화없이 평문으로 전송되어진
다면 무슨일이 발생할까요?
누구든지 스니핑에 대해서 이론은 무시하고, 툴 사용법만 10분정도 배우면 동일 네트워크
에서 평문으로 전송되는 데이터 패킷 따위는 손쉽게 스니핑 할 수 있는게 현실 입니다.
이러한 상황에서 평문으로 전송되는 데이터는 어떠한 암호화도 되어있지 않기 때문에
스니핑하는 즉시 스니퍼에게 모든 정보를 노출하게 되는것이고, 이는 개인정보유출로
이어지게 됩니다.

개인정보를 다루는 회사의 통신이나, PC방과 같은 공공장소의 네트워크를 악의적인 목적
으로 스니핑하게 된다면 이는 더큰 문제가 될 것입니다.
이러한 데이터를 사람이 일일히 확인하고, 처리 해야 한다면 아무리 많은 인력을 투자
한다고 해도 방대한 양의 데이터를 처리하는 것은 불가능한 일이 됩니다.

따라서 개인정보, 로그인 아이디, 패스워드 등을 입력하거나 결제정보를 입력할때
기본적으로 암호화를 하여 스니핑과 같은 악의적인 행위를 방지하고자 만들어진 것이
SSL이며 SSL을 사용한 통신은 암호화 되기 때문에 스니퍼가 스니핑에 성공한다고 해도
원본 데이터를 복호화 하는것은 어렵게 됩니다. (불가능한 일은 아닙니다.)
참고로 SSL암호화 통신은 우리가 사용하는 인터넷(HTTP)외에 FTP, Telnet 등의 통신에 적용
하여 사용 할 수 있고, 각각 HTTPS, SFTP, SSH 로 대체 할 수 있습니다.


SSL 인증절차
SSL 역시 TCP 프로토콜 기반이라서 Handshake 과정을 거치며 네트워크 공부하신 분들은
다음 인증 절차가 낯설지는 않을 것 입니다.


1단계
Client는 Server에게 hello 메시지를 보냅니다.
Server는 Client에게 Hello 메시지로 응답을 보냅니다.
서로간의 통신을 준비하는 단계로 보면 됩니다.

2단계
Server는 Client에게 인증서, 사용할 서버키를 교환하며, 인증요청을 보냅니다.

3단계
Client는 Server에게 인증서, 사용할 클라이언트키를 교환하며, 인증서 확인요청을 합니다.

4단계
Server, Client 모두 Change Cipher Spec Protocol을 교환하며 위 단계에서 교환한 
서버/클라이언트 키, 인증서 등을 토대로 이후의 통신을 지속하겠다는 메시지를 교환하며
서로의 인증을 마칩니다.


SSL의 암호화 방식
SSL은 대칭키, 공개키 암호화 방식을 사용합니다.

- 대칭키 암호화 방식
  클라이언트와 서버 모두 동일한 키를 가지고 데이터를 암호화, 복호화 하는 방식을
  말합니다. 대칭키 암호화는 스트림암호, 블록암호로 나뉘며 스트림 암호화는 bit나
  byte단위로 암호화 하는것을 말하고, 블록 암호화는 암호화 방식에 따라 지정된
  블록단위로 암호화 하는것 입니다.
  대칭키의 암호화 방식에는 DES, 3DES, AES, SEED 등이 있으며 각 암호화 방식에
  대해서는 별도 포스팅 예정 입니다.

  대칭키 암호화 방식은 최초 통신시 암호화, 복호화에 사용할 키를 주고받으므로 통신
  속도가 빠르다는 장점이 있지만 처음 키를 공유할때 암호화 해버리면 상대방도 키가
  뭔지 알수없기 때문에 암호화 하지 않고 키를 전송 하는데 이때 보안상 취약점이
  생기며 이를 '키분배
의 문제' 라고 합니다.

- 비대칭키 암호화 방식
  클라이언트와 서버 모두 다른 키를 가지고 데이터를 암호화, 복호화 하는 방식을
  말합니다. 
비대칭키 암호화 방식에서는 Public Key와 Asymmetric Key를 사용하는데
  Public Key는 
누구에게나 공개되어도 상관없는 키를 뜻하며 이 키를 가지고 데이터를
  암호화 할때 
사용하고, Asymmetric Key는 공개되어서는 안되는 비대칭키(사설키)를
  말하며 데이터를 
복호화 할때 사용합니다.
  따라서 비대칭키 암호화 방식은 클라이언트, 서버 모두 공개키, 사설키를 가지고 있으며
  데이터를 암호화 할때는 상대에게 공개키를 요청하여 데이터를 암호화 하고, 복호화 할때
  는 자신의 사설키로 데이터를 복호화 하는 것 입니다.
  이로써 최초통신시 암호화, 복호화에 사용하는 모든키를 평문으로 주고받을때 발생하는
  보안상 취약점(키분배의 문제)은 해결이 되지만 매 통신시 상대에게 공유키를 요청하는
  이유로 통신속도가 
느리다는 단점이 있습니다.

  대칭키와 비대칭키의 장/단점은 대칭키는 속도가 빠른반면 보안상 취약점이 존재한다는
  것이고, 비대칭키는 키분배의 문제를 해결한 대신 속도가 느리다는 것인데 이는 키를
  공유
하는 과정의 차이 때문에 발생하는 것 이라고 이해하면 되겠습니다.


SSL의 사용 예
직접 서버등에서 설정하여 SSL인증을 구현하는것은 차후 포스팅에서 다루기로 하고,우리가 자주 사용하는 웹페이지에서의 SSL 사용을 확인 해보겠습니다.
앞서 SSL의 인증절차와 암호화 방식에 대해 간단하게 알아보았고, 대칭키, 비대칭키에 대해서도 알아보았는데 기본적인 통신외에 무언가 덧붙여진다는 것은 정보를 보호하는데 도움이 될지언정 속도에는 도움이 되지 않는것이 사실입니다. 보안을 강화하면 편의성이 떨어진다는 것은 어쩔수없는 정설 입니다.
암호화를 하기위해 크고작은 사전절차를 거쳐야하고, 데이터를 
암호화, 복호화 하는것도
컴퓨터에게는 모두 '일' 이기 때문입니다.

따라서 모든 웹페이지를 암호화해서 HTTPS 로 만들면 좋겠지만 그렇게 되면 간단한 
페이지를 열어보는것도 시간이 많이 걸릴 것릴 수 있습니다.
이러한 속도문제로 인해 단순한 웹서핑 때에는 HTTPS 를 볼일이 많지 않지만 회원가입,
로그인페이지등 주요정보가 노출되는 특정 페이지에서는 HTTP 에서 HTTPS 페이지로
바뀌는것을 확인할 
수 있습니다. 
참고로 일반적인 웹 페이지 HTTP는 TCP 80 포트를 사용하고, SSL이 적용된 HTTPS 페이지는 TCP 443 포트를 사용합니다.


SSL이 적용되지 않은 일반 구글 메인 페이지이며 'http://' 는 주소창에 생략되어있습니다.



SSL이 적용되어 주소창에 'https://' 표기의 확인이 가능 합니다.
이것은 이 웹페이지에서 입력
되어 서버(구글서버)로 전송되는 모든 데이터는 암호화 된다는
것을 의미하며, 따라서 로그인 
정보를 스니핑 하더라도 쉽게 알아볼 수 없도록 합니다.


로그인 페이지 만큼 중요한 회원가입 페이지 역시 'https://' 페이지를 확인 할 수 있습니다.


'https://'로 변환되면서 url 좌측에는 자물쇠모양이 나타나는데 이 자물쇠 그림을 클릭하면
위 
그림과 같이 인증서에대한 기본내용을 확인할 수 있고, 자세히 보기를 클릭하면 아래
내용을 확인 할 수 있습니다.


자세히 보기를 클릭했을때 보여지는 화면 입니다.
발급자, 발급일, 만료일, SHA1지문, MD5지문 등 인증서에 대한 보다 상세한 정보 확인이
가능합니다.



Firefox 브라우저에서의 암호화 프로토콜 적용 화면이다. 그림에서 확인할 수 있는것과 같이
SSL3.0 , TLS1.0 버전 둘다 사용하도록 설정되어 있습니다. (기본설정)



국내에서 특히 많이 사용되는 브라우저인 Internet Explorer 의 암호화 프로토콜 적용 화면 입니다. 마찬가지로 SSL3.0 , TLS1.0 버전 둘다 사용하고 있는것을 확인 할 수 있습니다.

인증서의 발급기관, 발급내용 등은 사이트의 안정성을 확인하기 위해 점검해볼 필요가
있으며, 금융사이트를 위조한 피싱사이트의 경우 비정상적인 정보가 확인되는지 각별한 주의가 필요 합니다.


최신버전의 브라우저를 사용하는 경우 인증서에 문제가 있으면 아래와 같이 자체적으로
경고문구를 출력하기도 합니다.




지금까지 SSL에 대한 기본적인 내용을 알아보았습니다.
앞서 적었듯 우리의 인터넷 사용환경은 안전하지 않을 수 있습니다.
모든 페이지를 HTTPS 로 암호화 하기에는 
속도가 너무 느려지고, 암호화 통신에 대한 문제를 해결 한다고 하더라도 그외 악성코드, 백도어, 랜섬웨어, 모든 어플리케이션에 해당하는 취약점 등 많은 위협 요소들이 있습니다.

정말 획기적인 사용법이 나오기 전에는 이러한 위험에 
노출된 상태로 인터넷을 이용 할 수 밖에는 없으며, 인터넷을 사용하지 말자는 것이 아니라 이런 위험을 알고, 필요에 따라서는 적절히 대응하여 보다 안전한 인터넷 사용을 통해 자신의 소중한 정보를 지킬수있도록
하는것이 최선의 방법일 것입니다.

기업 차원의 정보보안은 많은 투자가 이루어지고, 담당하는 인력도 상당히 많습니다.

그러나 개인 사용자들은 상당히 취약한 것이 사실 입니다.
크래커들이 개개인의 정보가치 보다 기업의 정보가치를 탐낼 뿐이지 개인 사용자가
그나마 보안에 신경 쓸수 있다고 하는 백신만 가지고는 스스로를 지킬 수 없습니다.


블로그에 차례로 PC 사용에 유용한 팁이나 보안관련 내용을 업데이트 할 예정 입니다.

본 포스팅이 조금 이라도 도움이 되셨길 바라면서 마치겠습니다.
감사합니다.

댓글 없음:

댓글 쓰기