1️⃣ 운용 모드
모드 (mode) | 기술 | 전형적인 응용 프로그램 |
ECB (Electronic Codebook) | 각 64비트 평문 블록들을 동일한 키를 사용하여 독립적으로 부호화한다. | 단일 값들의 안전한 전송 (예: 암호화 키) |
CBC (Cipher Block Chaining) | 알고리즘의 입력은 다음 평문 64비트와 이전 평문 64비트를 합한 것이다. | 범용 블록 지향형 전송, 인증 |
CFB (Cipher Feedback) | 입력은 한 번에 b비트씩 처리된다. 이전 암호문은 암호화 알고리즘에 입력되어 의사 난수 출력을 산출하며, 이 출력은 평문과 XOR되어 다음 암호문을 산출한다. | 범용 스트림 지향형 전송, 인증 |
OFB (Output Feedback) | 알고리즘의 입력이 이전 DES 출력이라는 점을 제외하고는 CFB와 동일하다. | 잡음이 있는 채널상에서 스트림 지향형 전송 (예: 위성 통신) |
CTR (Counter) | 평문의 각 블록이 암호화된 카운터와 XOR된다. 카운터는 각각의 블록에 대해 증가한다. | 범용 블록 지향형 전송, 고속 요구 조건에 유용 |
1. ECB (Electronic Codebook)
ECB는 대칭 블록 암호화 방식에서 가장 단순한 운용 모드이다.
- 평문 처리 방식:
- 평문 블록은
b
비트로 나뉘며, 각 블록은 동일한 키를 사용하여 암호화된다. - 동일한 평문 블록은 동일한 암호문 블록으로 암호화되며, 이는 반복되는 패턴을 암호문에서도 그대로 나타나게 한다.
- 보안성 문제:
- 반복적인 평문 모양에 대해서는 항상 동일한 암호문이 생성되기 때문에, 공격자가 암호문에서 평문의 반복 패턴을 쉽게 인식할 수 있는 보안 취약점이 있다.
- 따라서 장문의 메시지나 패턴이 반복되는 데이터를 암호화하는 데 있어 안전하지 않다.
- 보안 결함 극복 방법:
- 반복되는 구간에서 다른 암호문 블록을 생성하도록 하는 다른 운용 모드를 사용하는 것이 중요하다. 예를 들어, CBC(Cipher Block Chaining)와 같은 다른 운용 모드를 통해 보안성을 강화할 수 있다.
2. CBC (Cipher Block Chaining)

CBC (Cipher Block Chaining) 모드는 블록 암호화 알고리즘의 운용 모드 중 하나로, 암호화 시 각 블록을 이전 블록의 암호문과 연결하여 암호화하는 방식이다. 이를 통해 블록 간의 연관성을 추가해 보안성을 높였다.
- 암호화 과정
- 평문 블록 P₁, P₂, ..., Pₙ을 암호화할 때, 각 평문 블록은 이전 암호문 블록과 XOR 연산된 후 암호화된다.
- 첫 번째 평문 블록은 초기화 벡터(IV)와 XOR 연산한 뒤 암호화한다. 이후 각 블록의 암호문이 다음 블록 암호화에 사용된다.
- 첫 블록 암호화:
C₁ = E(K, P₁ ⊕ IV)
로 암호화된다. 여기서IV
는 초기화 벡터로, 첫 번째 블록의 XOR에 사용된다.- 이후 블록 암호화:
C₂ = E(K, P₂ ⊕ C₁)
와 같은 방식으로 진행되며, 이전 암호문 블록이 현재 평문 블록과 XOR 연산된다.- 이러한 체인화 방식으로 인해 평문 블록들이 서로 의존적으로 암호화된다.
- 복호화 과정
- 복호화 과정은 암호화의 반대 순서로 진행된다.
- 각 암호문 블록을 복호화한 후, 이전 암호문 블록과 XOR 연산을 통해 원래의 평문 블록을 복원한다.
- 첫 블록 복호화:
P₁ = D(K, C₁) ⊕ IV
로 복호화되며, 여기서IV
는 복호화 시에도 동일하게 사용된다.- 이후 블록 복호화:
P₂ = D(K, C₂) ⊕ C₁
로 복호화되며, 이전 암호문 블록이 복호화 결과와 XOR 연산되어 평문이 복원된다.
📌 CBC 모드의 특징
- 블록 간 연관성: CBC 모드는 각 블록 간의 연관성을 제공하며, 암호화된 이전 블록의 암호문이 다음 블록의 암호화에 영향을 미치는 체인화과정을 거치며, 이를 통해 평문이 반복되어도 암호문이 다르게 생성된다.
- 기밀성 향상: 동일한 평문 블록이라도 초기화 벡터(IV)가 다르면 다른 암호문으로 암호화된다.
- 복호화의 동일한 과정: 복호화 과정도 암호화와 동일한 방식으로 진행된다. 단지 복호화 함수 D를 사용하여 각 블록을 복원하고 이전 암호문과 XOR 연산을 통해 평문을 복원한다.
- 장점:
- 평문 블록이 반복되더라도 암호문 블록이 반복되지 않아 패턴 노출을 방지
- 블록 간 체인화를 통해 암호화 결과가 이전 블록에 영향을 받아, 보안성을 높인다.
- 단점:
- 암호문 블록 손상 시, 해당 블록뿐만 아니라 다음 블록의 평문 복호화에도 영향을 미친다.
- 병렬 처리가 어려워 암호화나 복호화의 속도가 느릴 수 있다.
3. CFB (Cipher Feedback)

CFB 모드는 초기화 벡터(IV)와 암호화 함수의 출력을 사용하여 각 평문 블록을 암호화한다.
- 암호화 과정
- 초기화 벡터 사용:
- 초기 64비트의 IV(초기화 벡터)를 암호화 함수에 입력하여 암호화한다.
- 이 암호화된 결과에서 상위 s 비트를 선택한다. 이
s
비트는 평문 블록과 XOR 연산하여 암호문을 생성한다. - 평문과 XOR:
- 평문 블록
P₁
을 선택된 s 비트와 XOR하여 암호문 블록C₁
을 생성한다. - 이때 s 비트는 선택된 비트 수로, 주어진 블록 단위나 바이트 단위로 지정된다. 보통 8이다.
- 피드백:
- 생성된 암호문 블록 C₁의 값이 다음 라운드의 입력으로 사용된다. 즉,
C₁
은 shift register로 들어가며, 이전 암호문 블록을 기반으로 다음 평문을 암호화하는 역할을 한다. - 이후 블록들도 동일한 방식으로 처리되며, 암호화된 이전 블록이 다음 암호화 과정의 입력으로 피드백된다.
- 복호화 과정
- 암호화 과정과 동일한 방식으로 수행된다. 복호화 과정에서 이전 암호문을 사용해 암호화하고, 그 결과를 현재 암호문과 XOR하여 평문을 복원한다.
- CFB 모드는 블록 암호화 방식을 스트림 암호화 형태로 구현하므로, 암호화와 복호화 모두 동일한 알고리즘을 사용한다.
📌 CFB 모드의 특징
- 스트림 암호화 구현:
- 블록 암호화 알고리즘을 사용하지만, 데이터를 연속적으로 비트 또는 바이트 단위로 암호화할 수 있도록 하여 스트림 암호화와 같은 형태로 처리한다.
- 평문을 한 번에 처리하지 않고, 작은 단위로 나누어 처리할 수 있기 때문에, 실시간 데이터 암호화나 네트워크 스트림 암호화에 적합하다.
- 이전 출력값을 피드백:
- 각 암호문 블록이 다음 블록 암호화에 피드백되기 때문에, 암호화 과정에서 평문 간의 연관성을 제공한다. 이로 인해 동일한 평문이 반복되더라도 암호문이 반복되지 않도록 보장된다.
- CFB vs OFB:
- CFB와 OFB(Output Feedback) 모드는 모두 블록 암호화 방식을 스트림 형태로 구현한다.
- CFB는 이전 암호문 블록을 피드백에 사용하고, OFB는 암호화된 출력을 피드백에 사용하여 차이가 있다.
4. CTR (Counter)

CTR (Counter) 모드는 블록 암호화 알고리즘을 사용해 데이터를 스트림처럼 암호화하는 방식이다. 각 블록의 암호화에 독립적인 카운터 값을 이용하여 효율적으로 데이터를 처리하는 것이 특징이다.
- 카운터 값 사용:
- CTR 모드에서는 각 블록마다 카운터 값을 증가시키며, 이 카운터 값을 암호화 함수에 입력한다.
- 카운터 값은 매번 +1씩 증가하여, 각 암호화 과정마다 고유한 값을 가지게 된다.
- 암호화 함수:
- 카운터 값을 비밀 키 K와 함께 암호화하여 키 스트림을 생성한다.
- 이 암호화된 출력값이 이후 평문과 XOR 연산을 통해 암호문을 생성하게 된다.
- XOR 연산:
- 평문 블록
P₁, P₂, ...
는 각각 대응하는 카운터 값의 암호화 결과와 XOR 연산을 하여 암호문 블록C₁, C₂, ...
를 생성한다.
- 복호화 과정:
- 복호화 과정에서도 동일하게 카운터 값을 암호화하여 키 스트림을 생성하고, 이를 암호문 블록과 XOR 연산하여 원래 평문을 복원한다.
- 즉, 암호화와 복호화 모두 동일한 구조를 사용하며, 카운터 값을 기준으로 각 블록을 독립적으로 처리할 수 있다.
📌 CTR 모드의 특징 및 장점
- 병렬 처리 가능:
- CTR 모드는 카운터 값이 각 블록에서 독립적으로 사용되기 때문에 병렬 처리가 가능하다.
- 다른 체인화 모드(예: CBC)에서는 이전 블록의 암호화 결과가 다음 블록의 입력에 사용되기 때문에 순차적 처리가 필요하지만, CTR 모드는 각 블록을 동시에 암호화 및 복호화할 수 있다.
- 효율성:
- CTR 모드는 하드웨어 및 소프트웨어 구현에서 효율적이다. 모든 카운터 값의 암호화를 미리 계산해 둘 수 있어, 사전 계산(preprocessing)을 통해 암호화/복호화 속도를 높일 수 있다.
- 스트림 암호화처럼 동작하여, 랜덤 접근도 가능하므로 필요에 따라 특정 블록만을 독립적으로 암호화하거나 복호화할 수 있다.
- 간단한 구조:
- CTR 모드는 암호화 함수와 XOR 연산만으로 구성되어 있어 구조가 단순하다.
- 이로 인해 구현이 간단하고, 암호화와 복호화가 대칭적인 방식으로 이루어지기 때문에 개발 및 운영에서의 효율성이 높다.
- 보안성:
- 각 블록의 암호화에 고유한 카운터 값을 사용하므로 반복되는 평문이 존재하더라도 암호문이 다르게 생성된다. 이는 ECB 모드의 단점을 극복하여 패턴 노출을 방지한다.
2️⃣ 암호화 위치

🔍 주요 구성 요소
- End-to-End Encryption Device (종단 간 암호화 장치)
- 검은색 아이콘으로 표시된 장치는 End-to-End 암호화를 수행하고 있다.
- End-to-End 암호화란 송신자와 수신자 간의 통신이 암호화된다는 의미이다.
- 데이터 전송 과정에서 헤더 정보는 읽을 수 있도록 남겨두고, 실제 메시지 데이터만 암호화한다.
- 이를 통해 네트워크를 거치는 동안에도 정보 보호가 이루어지며, 수신자가 복호화를 통해 원래의 메시지를 얻을 수 있다.
- Link Encryption Device (링크 암호화 장치)
- 파란색 아이콘으로 표시된 장치는 Link 암호화를 수행하고 있다.
- Link 암호화는 통신 경로의 각 링크마다 암호화가 이루어진다.
- 프레임 릴레이 노드(FRN) 사이에서 전송되는 데이터는 링크 단위로 암호화되며, 각 네트워크 구간마다 복호화와 암호화가 반복된다.
- 헤더 정보와 데이터 모두 암호화가 될 수 있으며, 링크마다 복호화되었다가 암호화되는 과정을 거치므로 보안성은 높지만 암호화 장치가 많이 필요하다.
📌 암호화 방식 비교
- End-to-End 암호화:
- 송신자와 수신자 사이의 종단 구간에서만 데이터를 암호화한다.
- 헤더 정보는 암호화되지 않고 남아 있어 라우팅이 가능하다.
- 중간의 노드나 교환 장치에서는 데이터의 내용을 볼 수 없으며, 수신 측에서 복호화하여 원래 데이터로 복원된다.
- 네트워크 내에서 사용자 데이터는 Link 암호화에 비해 안전하지만(기밀성), 트래픽 패턴에 대한 안전(무결성, 가용성)은 보장할 수 없다.
💡 라우팅이 가능하다. → 네트워크 장비(예: 라우터, 스위치 등)가 데이터의 목적지 주소 정보를 읽고, 그 데이터를 적절한 경로로 전송할 수 있다는 의미
- Link 암호화:
- 네트워크 경로의 각 링크마다 데이터를 암호화하여 전송한다.
- 중간 프레임 릴레이 노드(FRN)나 다른 네트워크 장비에서 복호화 및 재암호화가 이루어진다.
- 헤더와 데이터 전체가 암호화되므로 전체 경로를 보호하지만, 중간 장치에서 복호화가 이루어져야 하기 때문에 모든 장비가 신뢰할 수 있는 상태여야 한다.
- 보안 수준은 높지만, 비용이나 복잡성이 증가하는 단점이 있다.
📌 암호화 적용 위치와 목적
- 암호화 적용 위치는 보안 요구 사항에 따라 다르게 설정된다.
- End-to-End 암호화는 송신자와 수신자 사이에서만 데이터 보안을 보장하므로, 외부에서 네트워크를 경유할 때 전송 중 데이터가 보호될 수 있다.
- Link 암호화는 네트워크 내부의 모든 구간에서 데이터를 보호하는 방식으로, 각 링크마다 암호화하여 전송 중 데이터가 보호되도록 한다.
3️⃣ 키 분배

키 분배는 두 통신 당사자(예: A와 B)가 서로 안전하게 키를 교환하여 데이터를 암호화하고자 할 때 사용하는 방법이다.
🔍 키 분배 방식
- 방법 1, 2: 물리적 전달
- A가 키를 선택하여 B에게 물리적으로 전달하거나, 제3의 집단이 키를 선택하여 A에게 전달하는 방법이다.
- 주로 링크 암호화에 적합하며, 종단 간 암호화에는 적용하기 어렵다.
- 네트워크 환경에서는 다수의 릴레이 노드를 거쳐야 하기 때문에 효율적이지 않다.
- 방법 3: 이전 키를 이용한 새로운 키 전송
- A와 B가 과거에 사용했던 키가 있다면, 이전의 암호화된 키를 통해 새로운 키를 전달하는 방식이다.
- 링크 암호화와 종단 간 암호화 모두에 사용될 수 있지만, 한 번의 키 노출이 모든 키의 안전성을 위협할 수 있다는 단점이 있다.
- 방법 4: 제3의 집단을 통한 안전한 키 전송
- A와 B가 제3의 집단인 C와 연결되어 있을 경우, C는 암호화된 링크를 통해 A와 B에게 키를 전달한다.
- 보안성을 보장하기 위해 일반적으로 많이 사용되는 방법이다.
키의 종류
- 세션 키:
- 데이터 전송을 위해 임시로 사용되는 일회용 키이다.
- 세션 연결 동안만 사용되며, 세션이 종료되면 폐기된다.
- 영구 키:
- 세션 키를 분배하기 위한 목적으로 두 개체 사이에서 사용되는 키이다.
- 보통 공인인증이나 서버에서 관리한다.
키 분배의 구성 요소
- 키 분배 센터 (KDC, Key Distribution Center)
- 두 노드 간 통신이 허용될지 여부를 결정하고, 허용되면 세션 키를 제공한다.
- 키 분배 센터는 보안된 키 관리를 통해 안전한 통신을 지원한다.
- 보안 서비스 모듈
- 단말에 위치하며, 하나의 프로토콜 계층으로 구성된다.
- 보안 서비스를 제공하여 안전한 데이터 전송을 보장한다.
4️⃣ 메세지 인증

암호화는 수동적인 공격(도청)에 대해서 보호 기능을 한다. 또 다른 요구 사항은 적극적 공격(데이터 위조와 트랜젝션)에 대해서 보호하는 것으로, 이러한 공격들에 대한 보호는 메세지나 데이터 인증으로 알려져 있다. 이런 고려사항은 데이터 무결성의 범주하에 있다.

메시지 인증 코드(MAC, Message Authentication Code)를 사용하여 메시지의 무결성과 인증을 확인하는 과정이다. MAC는 데이터 무결성을 확인하고, 메시지가 변조되지 않았는지와 인증된 출처에서 전송된 것인지를 검증하는 데 사용된다.
🔍 MAC 과정
- 메시지와 키를 입력받아 MAC 생성:
- 송신 측에서 MAC 알고리즘은 메시지와 비밀 키(K)를 입력받아 MAC 값을 생성한다.
- 이 MAC 값은 메시지의 요약본 역할을 하며, 키와 함께 만들어지기 때문에 해커가 임의로 위조하기 어렵다.
- 메시지와 MAC 전송:
- 메시지와 MAC 값은 수신 측으로 함께 전송된다.
- 여기서 MAC은 메시지의 데이터 일부가 아니라 추가적인 인증 정보로 첨부된다.
- 수신 측에서 MAC 생성 후 비교:
- 수신 측에서도 동일한 MAC 알고리즘을 사용하여 전달받은 메시지와 (K)로 새로운 MAC 값을 계산한다.
- 이때 송신 측과 수신 측이 동일한 비밀 키를 공유하고 있어야 한다.
- MAC 비교:
- 수신 측에서 생성한 MAC 값과 전달받은 MAC 값을 비교한다.
- 만약 두 값이 같다면, 메시지가 변조되지 않았으며, 올바른 송신자로부터 온 것임을 확인할 수 있다.
- 만약 다르다면, 메시지 도중 변조되었거나 인증되지 않은 발신자로부터 온 것임을 의미한다.
📌 주요 특징
- 비밀 키(K)를 이용하여 MAC 값을 생성하기 때문에, MAC을 위조하려면 키를 알아야 한다. 이는 메시지 무결성과 인증을 보장한다.
- CRC와의 차이점:
- CRC(Cyclic Redundancy Check)는 오류 검출을 위한 것으로, 메시지의 변조나 정확한 전송 여부를 검증하기 위해 사용된다. 비밀 키가 없기 때문에 보안적인 측면에서는 취약하다.
- 반면, MAC는 비밀 키를 사용하여 메시지의 무결성과 인증을 보장하며, 변조 방지와 출처 확인이 가능하다.
- 네트워크 통신에서 메시지의 무결성을 확인하고, 올바른 출처로부터의 전송 여부를 인증할 때 사용된다.
- 비밀 키를 공유하는 송신자와 수신자 사이에서만 유효하므로, 중간에서의 공격이나 위조를 방지하는 데 효과적이다.
🔍 단방향 해시 함수
단방향 해시 함수는 메시지 인증 코드(MAC)와 유사한 방식으로 데이터의 무결성과 인증을 제공할 수 있기 때문에 대안으로 사용될 수 있다. 일반적인 해시 함수는 입력된 데이터를 고정된 크기의 해시 값으로 변환하며, 이 과정은 단방향이기 때문에 원본 데이터를 복원할 수 없다.
메시지 인증을 위해서는 단순한 해시 함수만으로는 충분하지 않다. 왜냐하면 누구나 메시지의 해시 값을 계산할 수 있기 때문이다. 그러나 해시 함수에 비밀 키를 결합하여 사용하면, 예를 들어 HMAC(Hash-based Message Authentication Code)는 해시 함수와 비밀 키를 함께 사용하여 메시지의 무결성과 인증을 보장한다.

각 방식은 무결성과 송신자 인증을 보장하는데 사용하는 해시 함수와 암호화 기법의 조합을 다르게 사용한다.
단방향 해시 함수는 메세지의 고유한 요약본을 제공하며, 역방향 계산이 불가능하다는 특징을 가진다.
- Using Conventional Encryption (전통적 암호화 사용)
- 메시지 해시 계산: 송신자(A)는 전송할 메시지의 해시 값(H)을 계산한다.
- 해시 암호화: 계산된 해시 값은 비밀 키(K)를 사용해 암호화한다.
- 메시지와 암호화된 해시 전송: 메시지와 함께 암호화된 해시 값이 수신자(B)에게 전송된다.
- 수신 측 검증: 수신자(B)는 메시지의 해시 값을 계산하고, 송신자가 보낸 암호화된 해시 값을 복호화하여 두 값을 비교한다.
- 일치하면 메시지가 변조되지 않고, 인증된 송신자로부터 왔음을 확인할 수 있다.
- Using Public-Key Encryption (공개키 암호화 사용)
- 메시지 해시 계산: 송신자(A)는 전송할 메시지의 해시 값(H)을 계산한다.
- 해시를 비공개 키로 암호화: 송신자의 비공개 키(PRa)로 해시 값을 암호화한다. 이 과정을 통해 송신자의 신원을 인증할 수 있다.
- 메시지와 암호화된 해시 전송: 메시지와 함께 암호화된 해시 값이 수신자(B)에게 전송된다.
- 수신 측 검증: 수신자(B)는 송신자의 공개 키(PUa)를 이용해 해시 값을 복호화하고, 메시지의 해시 값을 계산하여 두 값을 비교한다.
- 일치하면 메시지가 변조되지 않고, 송신자가 실제 송신자임을 보장받을 수 있다.
- Using Secret Value (비밀 값 사용)
- 메시지와 비밀 값: 송신자(A)는 메시지와 함께 비밀 값(K)을 결합하여 해시 값(H)을 계산한다.
- 메시지와 해시 값 전송: 메시지와 함께 계산된 해시 값이 수신자(B)에게 전송된다.
- 수신 측 검증: 수신자(B)는 메시지와 비밀 값(K)을 사용하여 해시 값을 재계산하고, 송신자가 보낸 해시 값과 비교한다.
- 일치하면 메시지가 변조되지 않았으며, 비밀 값을 통해 인증된 송신자임을 확인할 수 있다.
6️⃣ 공개키 암호화 구조


- 메시지 전송
- Bob이 Alice에게 메시지
X
를 보낼 때, Bob은 Alice의 공개 키 ()를 사용해 메시지를 암호화한다. - 여기서 공개 키는 누구나 접근할 수 있는 정보다. Bob은 Alice의 공개 키를 사용해 메시지를 암호화하고 암호문 (
Y
)을 생성한다. 암호화 알고리즘으로는 주로 RSA와 같은 알고리즘이 사용된다.
- 암호문 전송
- Bob이 암호화된 메시지
Y
를 Alice에게 전송한다. 이 암호문을 풀기 위해선 Alice의 개인 키 ()가 필요하기 때문에 해독하기 어렵다.
- 메시지 복호화
- Alice는 자신만이 가지고 있는 개인 키 ()를 사용해 Bob이 보낸 암호문
Y
를 복호화한다.
⚙️ 주요 요소
- 평문 (Plaintext): 암호화하기 전의 원래 메시지 또는 데이터 (
X
).
- 암호화 알고리즘 (Encryption Algorithm): 평문을 암호문으로 변환하는 알고리즘, 이 경우에는 RSA 같은 알고리즘이 사용된다.
- 공개 키 ()와 개인 키 (): Alice는 자신의 공개 키를 공개하여 다른 사람들이 자신의 메시지를 암호화할 수 있게 하고, 자신은 비밀로 유지된 개인 키를 사용해 메시지를 복호화한다.
- 암호문 (Ciphertext): 암호화된 메시지로, 평문이 공개 키를 통해 암호화된 형태 (
Y
).
- 복호화 키: 개인 키를 사용하여 암호문을 원래 평문으로 변환한다.

- 왼쪽 송신자 (Bob): Bob이 자신의 개인 키 ()를 사용해 평문 (X)을 암호화한다. 이렇게 암호화된 데이터는 암호문 (Y = E(PR_b, X))이 된다.
- 개인 키로 암호화하는 이유는, 이 메시지가 Bob만이 보유하고 있는 개인 키로 암호화되었기 때문에, Bob이 보낸 것임을 보장하기 위해서이다.
- 암호화된 데이터 전송: Bob은 암호문 (Y)을 네트워크를 통해 전달한다. 암호화된 메시지는 누군가 중간에서 볼 수 있지만 해독할 수는 없다.
- 오른쪽 수신자 (Alice): Alice는 Bob의 공개 키 ()를 사용해 암호문 (Y)을 복호화한다. 공개 키는 누구에게나 알려진 키로, 이를 사용해 암호문을 평문으로 해독할 수 있다.
- 복호화 결과로 평문 (X)이 나온다. 이는 Bob이 자신의 개인 키로 암호화한 것이기 때문에, Alice는 이 메시지가 Bob으로부터 왔음을 신뢰할 수 있다.
- 개인 키 암호화의 목적은 송신자의 신원 인증이다.
- Bob의 개인 키로 암호화된 메시지는 오직 Bob의 공개 키로만 해독할 수 있다.
- 이로 인해 Bob만이 이 메시지를 보낼 수 있다는 것이 보장되므로, 인증 기능이 제공된다.
- 이 방식은 주로 메시지의 무결성을 보장하고 송신자의 신원을 증명하는 데 사용된다.
📌 공개 키 암호화 방식 요구사항
- 키 쌍의 생성 용이성: 암호화와 복호화를 위해 공개키와 개인키라는 두 가지 키를 생성해야 하며, 이 두 키는 서로 연관된 수학적 관계를 가진다.
- 공개키를 아는 송신자가 메시지를 암호화하는 것: 공개키는 누구나 알 수 있는 키로, 이를 사용해 암호화된 메시지를 생성하는 것이 용이해야 한다.
- 개인키를 아는 수신자는 암호문을 해독: 암호화된 메시지는 개인키를 가진 수신자만 해독할 수 있어야 한다.
- 키가 각각의 역할에 유용하게 사용됨: 공개키와 개인키는 각각 암호화와 복호화라는 고유한 역할을 가진다.
- 공개키로부터 개인키를 결정하는 것은 어려워야 함: 보안성을 위해 공개키로부터 개인키를 유추하는 것은 계산적으로 불가능해야 한다.
- 공개키와 암호문으로부터 메시지의 복구가 어려워야 함: 암호문과 공개키가 주어졌을 때 원문을 역으로 계산하는 것은 매우 어려워야 한다.
📌 비대칭 암호화 알고리즘 종류

- RSA (Rivest, Shamir, Adleman):
- 1977년에 개발된 알고리즘으로, 가장 널리 사용되는 공개키 암호화 방식이다.
- 블록 암호화로, 메시지를 n 비트 단위로 쪼개어 암호화한다.
- Diffie-Hellman의 키 교환 알고리즘:
- 대칭 키 암호화에서 사용할 비밀키를 안전하게 교환하기 위한 방법이다.
- 키 교환에 제한이 있으며, 비대칭 암호화보다는 대칭 암호화 키 교환에 적합하다.
- 전자 서명 표준안 (DSS):
- SHA-1을 사용해 전자 서명을 제공하는 방식으로, 암호화 또는 키 교환에는 사용되지 않는다.
- 타원 곡선 암호화 (ECC):
- RSA와 동일한 보안 수준을 더 짧은 키 길이로 제공하는 알고리즘이다.
- 짧은 키를 사용하기 때문에 연산 성능이 좋고 안정성이 높은 것이 특징이다.
7️⃣ 전자 서명
전자 서명은 주로 자원과 데이터의 무결성을 인증하는 데 사용된다. 송신자가 자신의 개인키를 사용하여 메시지의 해시 값을 생성한 후 이 해시 값을 암호화하여 서명으로 사용하고, 수신자는 이를 검증한다. 전자 서명은 기밀성을 제공하지 않는다. 도청에 대한 안전은 보장되지 않기 때문이다.

공개키 인증서는 사용자 ID와 공개키 정보를 포함하고, 신뢰된 기관(CA)이 그 정보를 서명하여 생성한다.
이 서명을 통해 수신자는 송신자의 공개키의 신뢰성을 보장받을 수 있다. CA의 개인키로 해시 값을 암호화하고 수신자는 CA의 공개키로 서명을 검증하여 인증서의 진위 여부를 확인할 수 있다.

전자 봉투 방식은 송신자와 수신자가 동일한 비밀키를 공유하지 않아도 안전한 통신을 가능하게 한다. 대칭키를 사용해 메시지를 빠르고 효율적으로 암호화하고, 공개키 암호화를 통해 대칭키를 안전하게 전달하는 구조이다. 이러한 조합은 기밀성과 효율성을 동시에 제공한다.
- 전자 봉투 생성 (a):
- 대칭키 암호화: 송신자는 무작위로 생성된 대칭키(랜덤 대칭키)를 사용하여 메시지를 암호화한다. 이 대칭키는 한 번 사용되는 임시 키로 메시지를 보호하는 데 사용된다.
- 암호화된 메시지와 대칭키가 포함된 데이터를 전자 봉투(Digital Envelope)라고 하며, 이를 수신자에게 전달한다.
송신자는 메시지를 암호화하는 데 사용된 대칭키를 수신자의 공개키를 사용해 추가로 암호화한다. 이렇게 하면 대칭키가 안전하게 보호된다.
- 전자 봉투 열기 (b):
- 대칭키 복호화: 수신자는 자신의 개인키를 사용해 전자 봉투에서 암호화된 대칭키를 복호화한다. 이렇게 하면 송신자만이 알던 대칭키를 수신자도 알게 된다.
- 메시지 복호화: 이제 수신자는 복호화된 대칭키를 사용해 암호화된 메시지를 복호화하여 원래의 메시지를 얻을 수 있다.
댓글