정보보호 기술

 

Summry

본 문서에서는 리눅스 서버 보안을 이해하는데 필요한 기본적인 보안기술을 간단히 정리한다.

send me email if you have any questions.


1.1 암호화 기초

암호화란 어떠한 데이터를 그대로는 읽을 수 없도록 형식을 변환하는 것이다.

  • 암호화 : 원본 데이터를 암호로 만드는 것
  • 복호화 : 암호화된 데이터를 원래의 데이터로 복원하는 것
  • 평문 : 암호화되지 않은 문장

  • 같은 알고리즘을 사용하더라도 키가 다를 경우 암호화된 데이터도 달라진다.
  • 키를 모르는 경우 알고리즘을 알더라도 복호화할 수 없다.
  • 간단한 암호의 경우 키 값을 하나하나 대입하는 전사공격(brute force attack)에 취약하다.
  • 같은 알고리즘을 사용하는 경우 키 길이(비트 수)가 길 수록 암호 강도가 높다.

1.1.1 대칭키 암호화 방식

암호화할 때와 복호화할 때 같은 키를 사용하는 방식을 대칭키 암호화 방식이라 한다.

주의사항

  • 키만 있으면 누구나 암호 해독이 가능하기 때문에 키를 절대 노출해서는 안된다.(암호 알고리즘은 공개됨)
  • 데이터를 받는 상대마다 키를 준비해야 한다.
  • 각 상대별 키 관리가 필요하다.
  • 받는 상대방에게 키를 안전하게 전달하는 것이 어렵다.

대칭키 암호화 방식 알고리즘
DES, 3DES, AES, IDEA, RC4 등..

1.1.2 공개키(비대칭키) 암호화 방식

암호화에 사요외는 키와 복호화에 사용되는 키가 다른 방식을 공개키(비대칭키) 암호화 방식이라 한다.

  • 암호화에 사용되는 키: 공개키(public key)
  • 복호화에 사용되는 키: 비밀키(private key)

장점

  • 키를 안전하게 전달할 수 있다.
  • 공개키는 공개되어도 상관없다.
  • 상대가 누구라도 별도의 키를 생성하여 관리할 필요가 없다.

단점

  • 상대적으로 높은 CPU 자원을 소모한다.

공개키 암호화 방식 알고리즘
RSA, 타원 곡선 암호 등..

1.1.3 디지털 서명

디지털 서명이란 공개키 암호 기술을 사용하여 전자 데이터에 서명하는 것이다.

  • 데이터 작성자가 본인인지, 데이터에 위/변조가 없는지 증명하는 기술

서명과정

  1. 송신측 : 자신의 비밀키를 사용하여 데이터에 서명
  2. 수신측 : 송신측의 공개키를 사용하여 서명 검증
    • 데이터의 내용을 암호화하지는 않는다.

PKI(Public Key Infrastructure)
만약 공개키가 상대방의 것이 아니거나 제 3자에 의하여 변조된 경우 문제가 발생하기 때문에 공개키가 정말 당사자의 것인지 제 3자가 보장하는 구조가 필요하다. 인증서를 사용하고 있는 서버는 신뢰할 수 있는 서버라는 것을 보장하는 인증 기관의 서명 포함하는데 이러한 인프라를 공개키 기반 구조(PKI, Public Key Infrastructure)라 한다.

  • 인증기관(CA, Certification Authority) : 공개키의 정당성을 보증하는 제 3자

2.1 SSL/TLS

SSL/TLS 는 안전한 네트워크 통신을 위해 필요한 기술로 TCP/IP 및 응용 프로그램 계층 사이에 구현된 공개키 암호를 사용한 보안 기술이다.

  • IETF 에 의하여 TLS(Transport Layer Security) 로 표준화됨

장점

  • SSL/TLS 사용 → 클라이언트/서버 간 통신 암호화 → 안전하게 통신 가능
  • 인증 기관에서 발행한 서버 인증서 (사이트 인증서) 를 사용해 서버의 신뢰성 증명
    • 서버의 신뢰성을 증명한다는 것은 이제부터 접속하려는 서버가 변조된 것인지, 그 서버가 믿을 수 있는 서버인지 확인하는 것이다.
  • 반대로, 서버로부터 클라이언트를 인증하는 것도 가능하다.

SSL/TLS 사용

  • 전송 계층 프로토콜
  • HTTP 나 FTP 등의 응용 프로그램 계층 프로토콜과 조합해서 사용
  • 지금도 HTTP 와 조합하여 웹 서버와 웹 브라우저 간에서 이용하는 형태로 폭넓게 사용

SSL/TLS 통신 흐름

  1. Client(Web browser) : 웹 서버에 접근
  2. Server : 서버 인증서를 클라이언트로 전송
  3. Client : 루트 인증서를 사용해 서명을 확인하고 서버의 신뢰성 확인
  4. Client : 자신이 사용 가능한 암호 알고리즘 종류를 서버에 통지
  5. Server: 클라이언트와 송수신 가능한 암호 알고리즘 선택
  6. Client: 암호 통신용 공개키를 생성해 서버 인증서 내의 서버 공개키를 사용해 암호화
  7. Client: 공개키를 서버에 전달하고, 서버는 자신의 비밀키를 사용해 공개키를 복호화
  8. 공개키를 사용해 암호화 통신 개시