보안의 개념 (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 핸드셰이크는 비대칭키 방식으로 안전하게 대칭키를 교환한 뒤, 대칭키로 데이터를 암호화하여 통신하는 과정입니다.
- 클라이언트 헬로(Client Hello):
- 클라이언트는 서버에 연결 요청을 보내며, 다음 정보를 전달:
- 지원하는 TLS 버전.
- 사용할 암호화 알고리즘 목록(Cipher Suites).
- 난수(Random Data) 1개.
- 클라이언트 공개키
- 클라이언트는 서버에 연결 요청을 보내며, 다음 정보를 전달:
- 서버 헬로(Server Hello):
- 서버는 클라이언트의 요청에 응답하며, 다음 정보를 전달:
- 선택한 암호화 알고리즘.
- 난수(Random Data) 1개.
- 서버 공개키
- 디지털 인증서(SSL/TLS 인증서):
- 서버의 신원을 증명하고, 서버의 공개키를 포함.
- 신뢰할 수 있는 CA가 서명.
- 서버는 클라이언트의 요청에 응답하며, 다음 정보를 전달:
- 인증서 검증:
- 클라이언트는 서버가 제공한 인증서의 신뢰성을 검증:
- 키 교환:
- 클라이언트 난수 + 서버 난수 → 키 교환 알고리즘(ECDHE, RSA 등) → 세션 키 생성.
- 클라이언트와 서버는 비대칭키를 활용하여 세션 키를 교환하여 암호화된 통신을 설정
- 완료 메시지(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가 사용할 수 있는지 확인.
- netstat -nap | grep :443
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; } }
- server 블록에서 443 포트를 활성화하고 SSL 설정 추가:
- 설정 적용:
- sudo systemctl restart nginx.service로 Nginx 재시작.
5단계: 도메인 연결 및 확인
- DNS 설정:
- 도메인 네임 시스템(DNS)에서 도메인을 서버 IP로 매핑.
- 예: your-domain.com → 34.64.39.55.
- HTTPS 테스트:
- 브라우저에서 https://your-domain.com으로 접속하여 인증서가 제대로 작동하는지 확인.
3. 부가 내용
- 명령어 설명:
- netstat -nap | grep :443: 443 포트의 사용 여부 확인.
- sudo certbot: 인증서 발급 및 갱신.
- sudo systemctl restart nginx.service: Nginx 서비스 재시작.
- 설명된 내용의 흐름:
- Nginx 설치.
- 기본 HTTP 프록시 설정.
- Let's Encrypt를 사용해 SSL 인증서 발급.
- HTTPS 설정 적용 및 테스트.
'개발기술 > 보안' 카테고리의 다른 글
브라우저 보안정책 (0) | 2025.02.26 |
---|---|
네트워크 접근제어(NAC) ; NAT, 방화벽 (0) | 2025.02.25 |
HTTPS 의 TLS 동작과정 (0) | 2025.01.18 |
Security JWT,세션, 쿠키방식 (0) | 2025.01.15 |
Spring Security 전체개념 (0) | 2024.09.09 |