SSL 프로토콜

SSL은 인터넷 웹상의 네트워크 보안을 강화하기 위해 가장 널리 사용되는 프로토콜이다. SSL은 관련 코드가 공개 소스 방식에 따라 일반에게 공개됐기 때문에 서버와 클라이언트간의 안전한 채널을 생성해 암호 통신이 가능하게 해준다. SSL은 구현된 공개 소스가 존재해 암호 관련 프로그램에 유용하게 응용할 수 있다.

1. SSL 프로토콜의 개요

SSL(Secure Socket Layer)는 넷스케이프에서 개발한 보안 프로토콜로 전송 프로토콜(ex, TCP/IP)상에서 송수신자간에 통신의 비밀성과 데이터 무결성을 제공하는 것을 목적으로 한다.

현재 인터넷은 SSL2.0, SSL3.0, TLS1.0이 함께 사용되고 있으며 넷스케이프와 익스플로러에서 이를 지원하고 있다.

웹서버에서 SSL을 가장 쉬운 보안 프로토콜로 채택하고 있는 이유는 사용자가 특별한 프로그램을 다운로드 받지 않아도 넷스케이프와 익스플로러가 자동으로 보안 채널을 연결해주기 때문이다. 즉, 웹서버 설치시 SSL과 인증서를 포팅하면 된다.

미국에서 생산된 웹서버나 인증서는 1999년 중반까지 암호 수출 정책의 영향을 받았기 때문에 암호 프로토콜 이용시 키 길이가 대칭키 40비트, 비대칭키 512비트로 제한됐었다. 현재는 이같은 제한이 완화돼 넷스케이프 4.72, 익스플로러 5.01 이상은
대칭키 128비트, 비대칭키 1024비트를 사용할 수 있다.

하지만 새로운 정책이 적용된 인증서를 이용하지 않고 있는 웹사이트는 여전히 많은 편이다.

2. SSL 프로토콜의 구조

SSL은 크게 핸드세이크 프로토콜과 레코드 프로토콜로 되어있다. 핸드세이크 프로토콜은 다시 체인지 사이퍼 스펙 프로토콜(Change cipher spec protocol), 얼러트 프로토콜(Alert Protocol), 핸드세이크 프로토콜로 나뉘어 진다.

SSL은 클라이언트와 서버간에 핸드세이크 프로토콜을 수행해 암호화된 하나의 세션을 성립하게 된다.

이 세션 동안 보안 서비스를 위한 세션키, 암호 알고리즘, 인증서 등과 같은 변수 등을 서로 공유해야 하며, 이 정보를 이용해 레코드 프로토콜에서 실질적인 보안 서비스를 제공한다. 여기에 이용되는 세션 정보는 다음과 같다.

  • 세션 식별자
    : 세션 상태가 active상태인지 resemble상태인지를 식별하기 위해 임의로 선택된 일련의 바이트.

  • 인증서
    : 서버와 클라이언트 X509.v3 인증서

  • 압축방법
    : 데이터 압축을 위해 사용한 알고리즘
  • Cipher spec
    : 암호 알고리즘( DES etc.)과 MAC 알고리즘( MD5 or SHA), hash_size등의 알고리즘 관련 정보

  • master secret
    : 클라이언트와 서버 사이에 공유하는 48바이트의 비밀 정보

  • 보류여부
    : 세션 재 연결 시 세션 정보를 재 사용할 지 여부 표기


    세션 정보 중 한 세션 동안에만 이용되는 정보는 다음과 같다.

  • 서버-클라이언트 난수
    : 서버와 클라이언트의 연결을 위해 선택된 일련의 바이트

  • server write MAC secret
    : 서버가 데이터에 MAC 연산을 적용할 때 사용한 비밀

  • client write MAC secret
    : 클라이언트가 데이터에 MAC연산을 적용할 때 사용한 비밀

  • 서버 키(server write key)
    : 서버가 암호화하고 클라이언트가 복호화할 때 사용하기 위한 암호키

  • 클라이언트 키(client write key)
    : 클라이언트가 암호화하고 서버가 복호화할 때 사용하기 위한 암호키

  • 초기화 벡터
    : CBC모드에서 블럭을 암호화할 때 각 키에 초기화 벡터(IV)가 포함된다. 이 필드는 SSL 핸드쉐이크 프로토콜에 의해 초기화된다. 각 레코드의 마지막 암호문은 이후의 레코드와 함께 사용하기 위해 보존.

  • 순서 번호(sequence numbers)
    : 송수신되는 각 메시지에 대한 순서 번호 @
  •  

     

    SSL(Secure Sockets Layer) 프로토콜은 넷스케이프에서 개발됐으며 현재 웹에서 클라이언트와 서버간의 암호화 인증통신의 표준이 된 기술이다.

    IRTF(The new Internet Engineering Task Force)는 TLS(Transport Layer Security)라고도 하는데 이것 또한 SSL에 기반을 두고 있다. TLS는 얼마전에 공개된 바 있으며, 넷스케이프에서도 지원된다.

    본 내용은 넷스케이프 서버 관리자에게 SSL에 대한 정보를 제공하기 위해 제작됐기 때문에 SSL 환경에서 작업하는 모든 개발자들에게 유용한 정보가 될 것이다.

    그러면 독자 여러분들이 PKI(공개키 기반구조)의 기본적인 개념에 대해서 충분히 숙지하고 있다고 가정하고 설명을 하겠다. PKI에 대해 더욱 자세하게 알고 싶다면
    이곳을 참조하길 바란다.

    SSL 프로토콜

    TCP/IP(Transmission Control Protocol/Internet Protocol)는 인터넷 정보 전송의 기반이 되는 프로토콜이다. HTTP(HyperText Transport Protocol)나 LDAP(Lightweight Directory Access Protocol), IMAP(Internet Messaging Access Protocol)같은 경우에는 웹페이지를 보여주거나 이메일 서버를 가동시킬 때 필수적으로 TCP/IP를 사용하므로 이러한 프로토콜들은 모두 TCP/IP 상에서 구동된다고 할 수 있다.



    이 그림을 보면 SSL은 TCP/IP 상에서, 그리고 HTTP/LDAP/IMAP같은 상위 레벨에 위치한 애플리케이션 프로토콜에서 구동된다고 볼 수 있다. 즉 SSL은 TCP/IP를 상위 레벨에 위치한 프로토콜 대신 사용하며 SSL 서버가 SSL 클라이언트에게 자신을 증명하거나 SSL 클라이언트가 SSL 웹서버에게 자신을 증명할 수 있도록 해준다. 그러면 양측에서 암호화 통신을 수립할 수 있게된다.

  • SSL 서버 승인 : 유저가 서버의 실체성을 파악할 수 있도록 해준다. SSL 클라이언트 소프트웨어는 공개키 기반구조의 표준 기술을 통해 서버의 인증서와 공개 ID가 유효한지, 그리고 클라이언트가 신뢰하는 루트 인증기관 목록에 있는 CA(Certificate Authority)가 발급한 인증서인지 확인할 수 있다. 만약 사용자가 네트워크 상에서 신용카드 번호를 전송할 때 정보를 받게될 서버의 존재를 확인하고자 한다면 이 절차는 매우 중요하다.

  • SSL 클라이언트 승인 : 서버가 유저의 실체성을 확인할 수 있도록 해준다. 서버 승인에 사용된 것과 동일한 기술이 사용되며 SSL 서버 소프트웨어는 클라이언트의 인증서와 공개 ID가 유효한지, 그리고 서버의 신뢰된 루트 인증기관 리스트에 포함돼 있는 CA(Certificate Authority)에서 발급된 인증서인지 확인할 수 있다. 예를 들면 고객에게 중요한 금융정보를 송신하게되는 은행의 경우에는 수신자, 즉 고객의 실체를 파악할 수 있어야 합니다.
  • SSL 암호화 통신 : 클라이언트와 서버간에 교환되는 모든 정보는 전송 소프트웨어로 암호화, 수취 소프트웨어로 복호화되는 과정을 거치므로 안전도와 신뢰성이 보장될 수 있다. 개인적인 거래를 수행하는 모든 단체에서 신뢰성은 매우 중요한 요소다. 암호화 SSL을 통해 전송되는 모든 데이터는 정보도용 행위를 감시하는 매커니즘에 의해 보호받게되며 데이터가 전송중 파손, 변경되었는지의 여부를 자동으로 알려줍니다.

    SSL 프로토콜에는 2개의 서브프로토콜이 있다. SSL 레코드 프로토콜과 SSL 핸드세이크 프로토콜이 그것인데, SSL 레코드 프로토콜은 데이터를 전송할 때 이용되는 포맷이며 SSL 핸드세이크 프로토콜은 SSL 서버와 SSL 클라이언트가 최초로 SSL 연결을 수립했을 때 메시지를 교환하는것과 관련된 프로토콜이다. 메시지 교환에 관련된 사항은 다음과 같다.

    - 서버를 클라이언트에게 승인한다.
    - 클라이언트와 서버가 암호화 알고리즘 또는 암호문을 사용하도록 해준다.
    - 선택에 따라 클라이언트를 서버에 승인한다.
    - 공유암호 생성과정에 공개키 암호화 기술을 이용한다.
    - 암호화된 SSL 연결이 구축된다.

     

    SSL에 이용되는 암호문

    SSL 프로토콜은 서버 및 클라이언트 인증, 인증서 전송, 세션키 수립에 필요한 다양한 암호화 알고리즘과 암호문을 지원한다. 서버 및 클라이언트가 지원하는 암호문의 종류는 현재 이용하는 SSL의 버전과 사용자가 선택하는 암호화 수준, SSL을 구현할 수 있는 소프트웨어의 수출금지법 적용여부 등에 따라 각각 달라지게 된다.

    암호화 알고리즘 목록 :

  • DES(Data Encryption Standard) : 데이터 암호화 표준. 미국 정부에서 이용하는 암호 알고리즘.

  • DSA(Digital Signature Algorithm) : 데이터 서명 알고리즘. 미국 정부에서 이용하는 디지털 인증 표준.

  • KEA(Key Exchange Algorithm) : 키 교환 알고리즘. 미국 정부에서 키 교환시 이용하 알고리즘.

  • MD5 : 리베스트(Rivest)에서 개발된 메시지 압축 알고리즘.

  • RC2 & RC4 : RSA 데이터 시큐리티에서 개발한 리베스트 암호문.

  • RSA : 암호화 및 인증에 필요한 공개키 알고리즘. 리베스트, 샤미르(shamir), 아드레만(Adreman)에서 개발.

  • RSA 키 익스체인지 : RSA 알고리즘에 기반한 SSL을 위한 키 교환 알고리즘.

  • SHA-1 : 안전 해쉬 알고리즘. 미국 정부에서 사용하는 해쉬 함수.

  • 스킵잭(SKIPJACK) : 미국 정부에서 사용하는 FORTEZZA-complaint 하드웨어에서 사용하는 체계화된 대칭키 알고리즘.

  • 트라이플 DES(Triple-DES) : 3번 적용된 DES.

    KEA나 RSA 키 익스체인지와 같은 키 교환 알고리즘에 따라 클라이언트와 서버가 SSL 세션 수립에 사용할 대칭키를 선택하는 방법이 결정됩니다. 가장 일반적으로 이용되는 SSL 암호문은 RSA 키 익스체인지 방식을 따른다.

    SSL 2.0과 SSL 3.0 프로토콜은 공통으로 지원하는 암호문을 갖고 있으며 관리자가 클라이언트 및 서버에서 지원가능한 암호문의 종류를 자유롭게 설정할 수 있습니다. 특정 서버와 클라이언트가 SSL 핸드세이크시 정보를 교환하게 되면 양쪽에서는 공통으로 갖고 있는 암호문 중 가장 강력한 수준의 암호문을 SSL 세션에 사용하게 됩니다.

    SSL을 사용하는 업체에서는 보호할 데이터의 중요성과 암호화 스피드, 수출금지법의 적용여부에 따라 어떤 수준의 암호문을 사용할지를 결정하게 됩니다.
  •  

    물론 상대적으로 취약한 보안성을 가진 40/56비트의 SSL 암호문을 사용하지 않으려는 업체들도 있었지만 미국 정부는 40비트 이상의 암호화를 제공하는 상품에 대한 수출을 규제했기 때문에 미국 이외에서도 강력한 암호화 수준을 이용할 수 있는 글로벌 서버 ID를 제외하면 미국 외 지역에서 128비트의 강력한 암호문을 이용할 수 없었다. 미국의 수출금지법에 대해 자세히 알고 싶으면 Export Restrictions on International Sales를 참조해라.

    SSL을 이용하는 업체에서 많은 고객을 확보하려면 웹서버에서 이용하고 있는 SSL의 암호화 범위를 확장시킬 수 있어야 한다. 국내 클라이언트나 서버가 국내의 다른 서버나 클라이언트와 거래하고 있다면, 서버나 클라이트는 공통으로 최대한 높은 수준의 암호문을 사용할 것이다. 국내 클라이언트나 서버가 외국의 서버나 클라이언트와 거래하고 있다면 미국 수출금지법하에서 허용되는 암호문을 사용하게 될 것이다(현재는 수출금지법이 폐지됐기 때문에 해당사항 없음).

    하지만 40비트 암호문은 상대적으로 쉽게 해독될 수 있으므로 제 3자의 정보 도용을 방지하고자 한다면 강력한 암호화 기능을 이용해야 한다.

    ※ 본 내용은
    developer.netscape.com에서 참조했다. @

    위로 스크롤