본문 바로가기

개발기술/보안

보안의 개념과 기술

보안의 개념 (CIA Triad)

  보안은 데이터를 보호하고, 시스템 및 사용자에 대한 신뢰성을 확보하며, 위협으로부터 자산을 안전하게 관리하는 것입니다. 이는 기밀성(Confidentiality), 무결성(Integrity), **가용성(Availability)**이라는 세 가지 주요 개념(CIA Triad)을 중심으로 이루어집니다.

 

  • 기밀성 (Confidentiality) :
    • 데이터나 자원에 대한 비인가된 접근을 방지.
      • 적용기술 :암호화(Encryption) : 데이터를 비인가된 사용자가 읽을 수 없도록 변환
    • 데이터가 허가된 사용자나 시스템만 접근 가능하도록 보장.
      • 적용기술 :접근 제어(Access Control) : 인가된 사용자만 암호화된 데이터에 접근하거나 복호화할 수 있도록 권한 관리
  • 무결성 (Integrity) : 데이터가 손상되거나 변조되지 않았음을 보장.
    • 적용기술 : 디지털 서명(Digital Signature): 발신자의 서명을 통해 데이터의 무결성을 검증.
    • 적용기술 : 해시(Hashing): 데이터를 고유한 해시 값으로 변환해, 변경 여부 확인. (SHA-256, SHA-3.)
  • 가용성 (Availability) : 데이터와 시스템이 필요한 순간에 항상 접근 가능하도록 보장. 장애나 공격으로 인한 서비스 중단 방지.
    • 적용기술 : 백업, 서버 이중화, 클러스터링, 분산 서비스 거부 공격 등

 

암호화기술

  • 대칭키(비밀키)
    • 특징: 하나의 키로 데이터를 암호화하고 복호화.
    • 장점: 빠른 속도, 대량 데이터 처리에 적합.
    • 단점: 키를 안전하게 공유하는 것이 어려움.
    • 대표 알고리즘: AES, ARIA, DES, SEED
    • 사용 사례: TLS에서 데이터 암호화. 파일 암호화, 데이터베이스 암호화. 
  • 비대칭키(공개키, 개인키)
    • 특징: 키가 두개로 암호화 복호화키가 상이함. 공개키(암호화키)와 개인키(복호화키)를 사용하는 방식.
      • 수신자가 공개키를 공개하면, 발신자는 공개키를 사용하여 암호화하고, 오로지 수신자의 개인키로만 복호화가 가능
    • 장점: 키 교환이 안전하며, 인증에도 활용 가능.
    • 단점: 속도가 느려 대량 데이터 암호화에 부적합.
    • 대표 알고리즘: RSA, ECC.
    • 사용 사례: TLS에서 세션 키 교환. 디지털 서명, 인증서 검증.

 

데이터 무결성 기술

(1) 해시(Hash)

  • 개념 : 임의의 길이를 가진 데이터를 고정된 길이의 고유 값(해시 값)으로 변환하는 수학적 함수. 
    • 데이터 무결성확인 : 받은 데이터를 고유한 해시 값(hash value)으로 변환하여 변경 여부를 확인합니다.
    • 단방향성: 해시 값만으로 원래 데이터를 추측하거나 복호화할 수 없음.
  • 주요 알고리즘: SHA-256, SHA-3, MD5(보안 취약점으로 비추천).
  • 사용 사례
    • 비밀번호 저장(해시 후 저장) : 비밀번호 저장시, 해쉬값을 저장하여 원본 비밀번호가 복구불가능하도록 저장함.
    • 파일 전송 시 무결성 확인 : 파일 발송자가 파일 내용을 해슁하여 파일과 함께 발송, 수신자는 다운받은 파일의 해쉬값과 비교

(2) 디지털 서명

  • 개념: 발신자가 해시 값을 자신의 개인키로 암호화(서명)하여, 데이터의 진위와 무결성을 보장.
    • 해시: 데이터 요약본을 생성.
    • 비대칭키: 발신자의 개인키로 해시 값 암호화(서명 생성).
    • 검증: 수신자가 공개키로 서명을 복호화해 데이터의 무결성을 확인
      • 디지털 서명에서 사용하는 비대칭키 암호화는 일반적인 암호화 방식과 반대로, 발신자의 개인키로 데이터를 암호화하고, 수신자는 공개키로 복호화합니다. 이는 발신자가 서명을 생성한 주체임을 확인하기 위해 사용됩니다
 

공개키 기반구조(PKI, Public Key Infrastructure)란?

 

  • 공개키 인증서를 발급, 관리, 폐지하는 인프라.
  • 공개키가 해당 소유자의 신원을 보장할 수 없다는 한계를 해결하기 위해 등장한 것입니다. 디지털 서명에서 사용되는 공개키가 실제로 특정 사용자의 것인지 증명하려면, 신뢰할 수 있는 **공식 기관(Certificate Authority, CA)**의 인증이 필요

 

1. PKI의 주요 구성 요소

(1) 디지털 인증서 (Digital Certificate)

  • 역할 : 사용자의 공개키와 신원을 CA의 디지털 서명으로 보증한 문서.
  • 내용:
    • 소유자의 신원 정보(이름, 조직 등).
    • 소유자의 공개키.
    • 인증서 발급자(CA) 정보.
    • 인증서 유효 기간.
    • CA의 디지털 서명.

(2) 인증 기관 (Certificate Authority, CA):

  • 디지털 인증서를 발급, 관리, 폐지.
  • 신뢰할 수 있는 제3자 역할로, 사용자의 공개키가 유효하고 신뢰할 수 있음을 보증.

 

HTTPS (HyperText Transfer Protocol Over Secure Socket Layer)

  • HTTP는 80포트를 사용하지만, HTTPS 기본포트는 443
  • HTTP는 모든 컨텐츠 내용이 ASC코드로 오픈되어 있음.  HTTPS는 HTTP 통신시 사용하는 TCP 위에 TLS(Transport Layer Security)/ SSL(Secure Sockets Layer) 계층을 추가하여 일반 텍스트 송수신 대신 데이터 암호화하여 송수신 
    • TCP → TLS → HTTP (HTTPS)
    • TCP → HTTP (HTTP)
  • SSL 프로토콜은 암호화 기술로, 넷스케이프사에서 개발하였으나 이를 국제표준화 하는 과정에서 SSL이 타기업의 제품이름과 동일하여 TLS로 명칭변경하였음. 그러므로 SSL과 TLS는 혼용됨.
  • 적용하는 방법
    • 1. SSL/TLS 인증서 준비
    • 2. 서버에 인증서 설치
    • 3. 서버 설정 파일에 인증서를 추가하여 HTTPS를 활성화. 

TLS의 작동 원리 ; TLS 핸드셰이크(TLS Handshake)

TLS는 연결을 시작할 때 핸드셰이크를 통해 클라이언트와 서버 간의 암호화 통신을 설정합니다. TLS 핸드셰이크는 비대칭키 방식으로 안전하게 대칭키를 교환한 뒤, 대칭키로 데이터를 암호화하여 통신하는 과정입니다.

 
  1. 클라이언트 헬로(Client Hello):
    • 클라이언트는 서버에 연결 요청을 보내며, 다음 정보를 전달:
      • 지원하는 TLS 버전.
      • 사용할 암호화 알고리즘 목록(Cipher Suites).
      • 난수(Random Data) 1개.
      • 클라이언트 공개키
  2. 서버 헬로(Server Hello):
    • 서버는 클라이언트의 요청에 응답하며, 다음 정보를 전달:
      • 선택한 암호화 알고리즘.
      • 난수(Random Data) 1개.
      • 서버 공개키
      • 디지털 인증서(SSL/TLS 인증서):
        • 서버의 신원을 증명하고, 서버의 공개키를 포함.
        • 신뢰할 수 있는 CA가 서명.
  3. 인증서 검증:
    • 클라이언트는 서버가 제공한 인증서의 신뢰성을 검증:
  4. 키 교환:
    • 클라이언트 난수 + 서버 난수 → 키 교환 알고리즘(ECDHE, RSA 등) → 세션 키 생성.
    • 클라이언트와 서버는 비대칭키를 활용하여 세션 키를 교환하여 암호화된 통신을 설정
  5. 완료 메시지(Finished):
    • 클라이언트와 서버는 "Finished" 메시지를 주고받아 핸드셰이크를 종료.
    • 이후 데이터는 세션 키를 사용해 대칭 암호화로 전송.

 

 

HTTPS 적용 

1. 목적

  • Nginx로 HTTPS 통신 설정
    • HTTPS를 통해 보안 통신을 활성화하기 위한 설정 가이드.

2. 주요 단계

1단계: Nginx 설치 및 기본 설정

  • Nginx 설치:
    • sudo apt-get update
    • sudo apt-get install nginx
      Nginx 설치 후 상태 확인: sudo systemctl status nginx.service
  • 포트 확인:
    • netstat -nap | grep :443
      443 포트를 Nginx가 사용할 수 있는지 확인.

2단계: 기본 설정 파일 수정

  • Nginx의 기본 설정 파일 수정:
    • /etc/nginx/conf.d 경로에서 default.conf 수정.
    • 주요 설정:
      nginx
      복사편집
      upstream gateway { server 10.178.3.0:7070; } server { listen 8085; location / { proxy_pass http://gateway; } }
    • 이 설정은 클라이언트의 요청을 http://gateway로 프록시 처리하도록 구성.

3단계: SSL 인증서 발급 준비

  • Let's Encrypt 설치:
    • sudo apt-get install python3-certbot-nginx
  • SSL 인증서 발급:
    • 인증서를 발급받기 위한 명령 실행:
      css
      복사편집
      sudo certbot --nginx -d your-domain.com
  • 발급 후 /etc/letsencrypt/live/your-domain 경로에 인증서가 저장됨:
    • fullchain.pem, privkey.pem 등.

4단계: HTTPS 적용

  • Nginx 설정 파일에서 HTTPS 적용을 위해 수정:
    • server 블록에서 443 포트를 활성화하고 SSL 설정 추가:
      nginx
      복사편집
      server { listen 443 ssl; ssl_certificate /etc/letsencrypt/live/your-domain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain/privkey.pem; location / { proxy_pass http://gateway; } }
  • 설정 적용:
    • sudo systemctl restart nginx.service로 Nginx 재시작.

5단계: 도메인 연결 및 확인

  • DNS 설정:
    • 도메인 네임 시스템(DNS)에서 도메인을 서버 IP로 매핑.
    • 예: your-domain.com → 34.64.39.55.
  • HTTPS 테스트:

3. 부가 내용

  • 명령어 설명:
    • netstat -nap | grep :443: 443 포트의 사용 여부 확인.
    • sudo certbot: 인증서 발급 및 갱신.
    • sudo systemctl restart nginx.service: Nginx 서비스 재시작.
  • 설명된 내용의 흐름:
    1. Nginx 설치.
    2. 기본 HTTP 프록시 설정.
    3. Let's Encrypt를 사용해 SSL 인증서 발급.
    4. HTTPS 설정 적용 및 테스트.

'개발기술 > 보안' 카테고리의 다른 글