본문 바로가기

Server

비대칭 키 암호화 방식

 
 

비대칭 키 암호화 방식

 

비대칭 키 암호화 방식은 이름 그대로 서로 다른 두개의 키를 사용하는 암호화 방식입니다.

누구나 볼 수 있는 공개키와 본인만 알고 있는 개인키를 사용합니다.

두 키는 수학적으로 연결되어 있어서 한쪽으로 암호화된 데이터를 다른 쪽으로만 복호화가 가능합니다.

 

암호화 3원칙 

비대칭 키 암호화 방식을 알아보기 전에 CIA Triad라고 불리는 암호화 3원칙에 대해 정리해 보려 합니다.

이 세 가지 원칙은 정보보안의 가장 기본이 되는 원칙으로, 어떤 보안 시스템이든 이 기준을 중심으로 설계를 하는 것이 중요합니다.

 

1. 기밀성 (Confidentiality)

  • 어떤 정보에 제약을 두거나 접근을 제한하는 약속이나 일련의 규칙
  • 말 그대로 "정보를 인가되지 않은 사람에게 노출되지 않도록 보호해야 한다" 입니다.
  • ex) 로그인을 하지 않은 사용자는 웹페이지를 볼 수 없음.

2. 무결성 (Integrity)

  • 데이터의 정보가 변경되거나 오염되지 않도록 하는 원칙
  • "해커와 같은 비인가 접속자에 의해 데이터가 변경되거나 위조되었는지 확인할 수 있어야 한다" 입니다. 

3. 가용성 (Availability)

  • 인증된 개체의 요구로 인하여 데이터 또는 자원에 접근 또는 이용이 가능해지는 특징
  • 즉, "정상적인 요청에 시스템이 정상적으로 응답할 수 있는 상태를 유지해야 한다" 입니다.
  • 백업, 트래픽 부하 분산, 이중화 서버 구성 등을 통해 시스템의 가용성을 높일 수 있습니다.

 

암호화를 하지 않을 경우?

만약 암호화를 하지 않고 통신 할 경우 어떠한 문제점이 생기는지 먼저 알아보려고 합니다.

위 그림처럼 A서버에서 B서버로 사용자의 아이디와 패스워드를 넘겨주려고 하는 상황을 가정해봅시다.

암호화를 하지 않으면 두가지 문제점이 발생합니다.

 

❗️ 1번 문제점

  • 해커가 전송 중인 데이터를 엿볼 수 있습니다.
  • 패스워드, 개인정보와 같은 중요 정보들이 유출됩니다.
  • 기밀성이 침해됩니다.

❗️ 2번 문제점

  • 해커가 요청을 가로채 데이터 내용을 변조할 수 있습니다.
  • B서버는 변조 사실을 알 수 없습니다.
  • 무결성이 침해됩니다.

 

공개키와 개인키를 사용한다면?

공개키와 개인키를 사용한다면 위와 같은 2가지 문제점을 모두 해결할 수 있습니다.

각각의 서버는 자신의 공개키와 개인키를 가지고 있게 됩니다.

말 그대로 공개키는 외부에 유출해도 되는 키이고, 개인키는 서버 내부만 가지고 있는 키입니다.

 

개인키로 서명/ 공개키로 검증

개인키로 암호화 한다는 것은 데이터의 출처를 증명하기 위한 서명 행위입니다.

 

A서버에서 데이터를 개인키A(요청서버의 개인키)로 서명(암호화) 하고, B서버로 보낸다고 가정해 봅시다.

B서버에서는 당연히 데이터를 공개키A로 검증(복호화) 하여 데이터를 열어 볼 수 있습니다.

이를 통해 B서버는 데이터가 진짜 A서버가 보낸 것인지 검증할 수 있습니다.

(당연히 이를 통해 데이터가 변조되었는지도 확인이 가능합니다.)

 

  • 인증 및 무결성 보장
  • 기밀성 보장 X

 

❗️ 암호화/복호화 라는 표현 대신에 서명/검증이라고 하는하는 이유❗️

 

전자서명(개인키로 서명)정보를 숨기려는 게 아니고, 누가 보냈는지 확인하고(인증), 내용이 안 바뀌었는지 확인하는(무결성) 용도입니다.

따라서 전체 데이터를 암호화하는 것이 아니라, 데이터의 해시값만 개인키로 암호화하는 방식입니다.
그래서 일반적인 암호화처럼 보이지만, 실제로는 의미가 달라서 ‘서명/검증’이라는 표현을 따로 사용합니다.

 

공개키로 암호화/ 개인키로 복호화

공개키로 암호화 한다는 것은 오직 특정 수신자만 데이터를 읽을 수 있도록 하는 기밀 보장 행위입니다.

 

A서버에서 데이터를 공개키B (응답서버의 공개키)로 암호화 하여 B서버에 보낸다고 가정해 봅시다.

B서버에서는 개인키B를 가지고 있기 때문에, 데이터를 복호화하여 열어 볼 수 있습니다.

B서버를 제외한 다른 누구도 데이터를 열어볼 수 없게 되는 것입니다.

 

  • 기밀성 보장
  • 인증 및 무결성 보장 X

 

 개인키 서명 + 공개키 암호화

데이터를 A서버(요청서버)의 개인키로 서명 하고, B서버(응답서버)의 공개키로 한번 더 암호화 하는 방식입니다.

 

 B 서버는 어떻게 처리할까?

  1. 자신의 **개인키(Private Key B)**로 암호문 복호화
    → 데이터 내용 획득 (기밀성 유지)
  2. A 서버의 **공개키(Public Key A)**로 서명을 검증
    → 데이터가 A 서버로부터 온 것인지 확인 (인증)
    → 중간에 변조되지 않았는지도 확인 (무결성)

 

위 방식을 통해 인증, 무결성, 기밀성을 모두 보장할 수 있습니다.

'Server' 카테고리의 다른 글

JWT (JSON WEB TOKEN)  (1) 2025.03.15