암화화는 개인적이고 안전하게 데이터 패킷을 교환할수 있는도록 도와준다.
암호화를 통해 사용자들은 인터넷 사이트에서 자신을 안전하게 인증할 수 있다.

인터넷 프로토콜의 암호화

1. 암호화 알고리즘

  • 인터넷 환경에서 데이터가 중간에서 탈취되거나 조작되지 않도록 하기 위해 암호화를 사용
  • 특히 웹 통신(예: HTTPS)에서는 다음 두 가지 암호화 방식이 자주 활용

1. 대칭 암호화 알고리즘

  • 암호화(Encryption)와 복호화(Decryption)에 같은 키를 사용하는 방식
  • 속도가 빠르고 구현이 간단하지만, 키를 안전하게 공유하는 문제가 존재

대표 알고리즘 : AES, DES, RC4 등

const crypto = require("crypto");

// 1. 키와 초기화 벡터 설정
const key = crypto.randomBytes(32); // 256-bit key
const iv = crypto.randomBytes(16); // 128-bit IV

const message = "Hello, Symmetric Encryption!";

// 2. 암호화
const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
let encrypted = cipher.update(message, "utf8", "hex");
encrypted += cipher.final("hex");

console.log("Encrypted:", encrypted);

// 3. 복호화
const decipher = crypto.createDecipheriv("aes-256-cbc", key, iv);
let decrypted = decipher.update(encrypted, "hex", "utf8");
decrypted += decipher.final("utf8");

console.log("Decrypted:", decrypted);
  • IV(Initialization Vector)란?
    블록 암호 알고리즘(예: AES)을 사용할 때 동일한 평문을 암호화하더라도 매번 다른 암호문을 생성하기 위해 추가하는 랜덤한 값

  • 128-bit = 16 byte = crypto.randomBytes(16)
    128비트짜리 랜덤한 값을 생성해서 암호화 과정의 입력값으로 사용한다

2. 비대칭 암호화 알고리즘

  • 공개키(Public Key)로 암호화하고, 개인키(Private Key)로 복호화하는 방식
  • 대칭에 비해 속도는 느리지만, 키 유출 위험 없이 안전하게 통신 가능
  • 예: SSL/TLS 인증, 키 교환, 디지털 서명 등에 사용

대표 알고리즘: RSA, ECC, DSA 등

항목 대칭 암호화 비대칭 암호화
키 개 수 하나 (공유된 동일 키) 두 개 (공개키 / 개인키)
속도 빠름 느림
보안성 키 유출 위험 존재 키 교환이 안전함
사용 예시 HTTPS 세션 암호화, VPN 등 HTTPS 인증서 교환, 전자서명 등

2. 해시 함수

  • cryptographic hash function
  • 임의의 길이를 가진 입력값을 고정된 길이해시값(hash value) 또는 다이제스트(digest)로 변환하는 단방향 함수

    보안 분야에서 사용하는 해시 함수는 다음 조건을 만족해야 한다.

    1. 결정적(Deterministic): 같은 입력에 대해서는 항상 같은 출력이 나와야 한다
    2. 빠른 연산 속도: 입력 데이터를 빠르게 해시값으로 바꿀 수 있어야 한다
    3. 역산 불가능(One-way): 해시값만 보고는 원래 입력값을 알아낼 수 없어야 한다
    4. 충돌 저항성(Collision resistance): 서로 다른 두 입력이 같은 해시값을 갖는 일이 없어야 한다
    5. 축소 저항성(Second pre-image resistance): 주어진 입력값과 동일한 해시값을 만드는 다른 입력을 찾기 어려워야 한다

  • 예: 비밀번호 해시로 저장, 디지털 서명, 데이터 무결성 검증, 블록체인, 인증 토큰 생성(JWT)
const crypto = require("crypto");

const data = "Hello, Hash Function!";

// SHA-256 해시 생성
const hash = crypto.createHash("sha256").update(data).digest("hex");

console.log("Input:", data);
console.log("SHA-256 Hash:", hash);

해시 함수

이름 해시 길이 설명
MD5 128비트 빠르지만 취약점이 발견됨 (❌)
SHA-1 160비트 현재는 보안상 비추천 (❌)
SHA-256 256비트 안전하고 많이 사용됨 (✅)
SHA-512 512비트 더 높은 보안이 필요한 경우 사용

해시함수 vs 암호화

항목 해시 함수 암호화
목적 데이터 무결성 확인, 인증 등 데이터 기밀성 보장
복호화 가능 ❌ 복호화 불가능 (단방향) ✅ 복호화 가능 (양방향)
사용 예 비밀번호 저장, 디지털 서명 등 메시지 암호화, SSL/TLS 등

3. 메시지 인증 코드 MAC

  • 메시지의 무결성과 인증을 확인하기 위한 코드
  • 메시지가 중간에 바뀌지 않았고, 진짜 송신자가 보낸 것임을 확인해주는 도장 같은 것

대표 예시: HMAC (Hash-based MAC)

  • MAC을 만들 때 해시 함수(SHA-256 등)를 활용한 방식
  • 안전성과 성능이 뛰어나서 많이 사용됨

    1) 동작 방식

    1. 송신자는 비밀 키와 메시지를 기반으로 MAC 값을 생성
    2. 수신자는 같은 비밀 키로 다시 MAC 값을 계산해서, 받은 MAC과 비교
    3. 두 MAC이 같다면, 메시지가 변조되지 않았고, 인증된 사용자가 보냈다고 판단
    항목 설명
    목적 메시지의 무결성(변조 여부)과 인증(보낸 사람 확인) 보장
    복호화 필요 없음. 단순 비교만 함
    사용 조건 송신자와 수신자가 같은 비밀 키를 공유해야 함 (대칭키 방식)

4. TLS 핸드 셰이크

  • 클라이언트(브라우저)와 서버가 안전한 통신을 하기 전에 암호화 설정과 키 교환을 협상하는 과정
  • 핸드셰이크가 성공적으로 끝나면, 양쪽 모두 같은 대칭키를 가지게 되고 이후 통신은 빠르고 안전하게 대칭키 암호화로 이루어진다

    Client                             Server
      |                                   |
      | ---- ClientHello ----------> |  ← 지원하는 프로토콜/암호/랜덤값
      |                                   |
      | <--- ServerHello ----------- |  ← 서버 인증서(공개키), 랜덤값
      |                                   |
      | -- Key Exchange/Finished --> |  ← 프리마스터 키 전송 (암호화됨)
      |                                   |
      | <-------- Finished --------- |  ← 서버도 세션키 설정 완료
      |                                   |
    (세션 키 기반 대칭 암호화 통신 시작)
    

    사용 목적

    1. 서로의 신원 확인 (주로 서버의 인증서로)
    2. 암호화 알고리즘 협상 (예: AES, SHA-256 등)
    3. 세션 키 공유 (대칭키 생성용)
    4. 통신 암호화 준비 완료
  • TLS를 사용함으로써 중간자 공격(MITM) 방지, 패킷 도청 불가능, 무결성 보장이라는 보안 효과가 있다.
const tls = require("tls");
const fs = require("fs");

const options = {
  key: fs.readFileSync("server-key.pem"),
  cert: fs.readFileSync("server-cert.pem"),
};

const server = tls.createServer(options, (socket) => {
  socket.write("Welcome to the TLS server!\n");
  socket.setEncoding("utf8");
  socket.pipe(socket);
});

server.listen(8000, () => {
  console.log("TLS server running on port 8000");
});
용어 의미
ClientHello 클라이언트가 지원 가능한 암호 알고리즘, 랜덤값, SNI(호스트 정보) 등을 서버에 전달
ServerHello 서버가 사용할 암호 알고리즘 결정, 인증서(공개키 포함) 전달
Certificate 서버의 SSL 인증서 (공인기관에서 발급)
Key Exchange 클라이언트가 생성한 세션키(대칭키의 원천)를 서버에 전달 (보통 서버 공개키로 암호화됨)
Finished 양쪽이 세션 키를 갖췄고, 핸드셰이크 끝났음을 알림
Session Key 이후 실제 데이터를 암호화할 때 쓰이는 대칭키

5. 암호 집합

  • cipher suite
  • TLS(또는 SSL) 통신에서 사용되는 암호화 알고리즘들의 조합
  • 서버와 클라이언트가 안전하게 통신하기위해 사용하는 암호화 기술 세트

    종류

    1. 키 교환 알고리즘 (ex. ECDHE, RSA)
    2. 인증 알고리즘 (ex. RSA, ECDSA)
    3. 대칭 암호화 알고리즘 (ex. AES, ChaCha20)
    4. 메시지 무결성 확인 알고리즘 (ex. SHA-256)
  • 너무 오래된 암호 집합은 비활성화하고, 암호화 우선순위를 지정하여 강력한 암호 집합을 우선 적으로 사용하도록 설정해야한다.

6. 세션 시작

  • TLS 핸드셰이크 과정을 성공적으로 마친 후, 클라이언트와 서버가 동일한 대칭키(Session Key)로 본격적인 암호화된 데이터 통신을 시작하는 단계


2. HTTPS 사용

  • HTTP에 SSL/TLS 계층을 추가한 보안 프로토콜로, 클라이언트와 서버 간 데이터 암호화, 무결성, 인증을 제공
  • HTTPS를 통해 도청, 변조, 위조를 방지할 수 있다

1. 디지털 인증서

  • 서버의 공개키(Public Key)와 서버 정보 등을 포함하며, 신뢰할 수 있는 인증 기관(CA)에 의해 서명된 전자 문서

    1. 디지털 인증서 획득
    서버는 CA로부터 인증서를 받아야 HTTPS 통신이 가능

    2. 키 쌍 및 인증서 서명 요청 생성(CSR)
    서버는 공개키/개인키를 생성하고, CSR(Certificate Signing Request)을 작성해 CA에 제출

    3. 도메인 검증
    CA는 요청자의 도메인 소유 여부를 검증합니다. 보통 이메일 인증, 파일 업로드, DNS 레코드 추가 방식이 사용

    4. 확장 유효성 검사 인증서
    회사 이름까지 브라우저에 표시되는 인증서로, 엄격한 검증 절차를 거칩니다. 높은 신뢰도 제공

    5. 인증서 만료 및 해지
    인증서에는 유효기간이 있으며, 해킹 등의 사유로 CRL이나 OCSP를 통해 인증서가 해지될 수 있다

    6. 자체 서명된 인증서
    CA를 거치지 않고 사용자가 직접 서명한 인증서로, 테스트용으로는 가능하지만 브라우저에서 신뢰하지 않음


3. HTTP(HTTPS)공격

  • HTTPS는 데이터를 암호화하지만, 사용자 네트워크 환경이나 통신 경로에 따라 공격에 노출될 수 있는 위험은 여전히 존재한다
  • 특히 중간자 공격(MITM) 방식으로 암호화 이전/이후 구간을 노리는 경우가 많다

    1. 무선 라우터
    보안이 설정되지 않았거나, 디폴트 비밀번호를 사용하는 라우터는 패킷을 가로채거나 조작당할 수 있다

    2. Wi-FI 핫스팟
    공공 와이파이는 누구나 접속할 수 있어 중간자 공격의 주요 표적이다
    공격자가 가짜 핫스팟을 만들어 사용자의 로그인 정보나 민감 데이터를 탈취할 수 있다

    3. 인터넷 서비스 공급자(ISP)
    일부 ISP는 사용자의 트래픽을 감시하거나 광고 삽입을 위해 HTTPS 통신을 분석하려는 시도를 한다
    특히 SNI 필드를 통해 어떤 사이트에 접속했는지 알 수 있으며, 검열 또는 감시 목적으로 사용될 수 있다

    4. 정부기관
    정부기관(예: 미국 NSA)은 국가 안보나 정보 수집 목적으로 HTTPS 통신을 감청하거나 우회할 수 있다

댓글남기기