블록 암호 운용 방식

From The Hidden Wiki
Jump to navigationJump to search

암호학에서 블록 암호 운용 방식(block cipher modes of operation)은 하나의 키 하에서 블록 암호를 반복적으로 안전하게 이용하게 하는 절차를 말한다.<ref name="HAC"> Template:서적 인용</ref><ref name="NIST-modes"> Template:웹 인용</ref> 블록 암호는 특정한 길이의 블록 단위로 동작하기 때문에, 가변 길이 데이터를 암호화하기 위해서는 먼저 이들을 단위 블록들로 나누어야 하며, 그리고 그 블록들을 어떻게 암호화할지를 정해야 하는데, 이때 블록들의 암호화 방식을 운용 방식으로 부른다.

운용 방식은 주로 암호화와 인증을 목적으로 정의되어왔다.<ref name="HAC"/><ref name="NIST-DES-modes"> Template:웹 인용</ref> 역사적으로 암호화 방식은 다양한 시나리오의 데이터 수정 측면에서 오류 증식 특성과 관련하여 널리 연구되어 왔다. 나중에 무결성 보호는 암호화와는 완전히 별개로 다루게 되었다. 현대의 일부 운용 방식은 암호화와 인증을 효율적인 방식으로 병합해 놓고 있는데, 이를 인증된 암호 방식(authenticated encryption) 방식으로 부른다.<ref name="NIST-modes"/>

운용 방식이 일반적으로 대칭형 암호화와 관련하는 것이 일반적이지만<ref name="NIST-modes"/> RSA와 같은 공개 키 암호 방식 원칙에도 적용할 수 있다. (길이가 더 긴 메시지의 공개 키 암호 방식은 일반적으로 복합 암호 방식(hybrid encryption)이라 부른다.)<ref name="HAC"/>

초기화 벡터

Template:본문

패딩

Template:본문

전자 코드북 (ECB)

전자 코드북(electronic codebook, ECB)은 운용 방식 중 가장 간단한 구조를 가지며, 암호화하려는 메시지를 여러 블록으로 나누어 각각 암호화하는 방식으로 되어 있다.

파일:Ecb encryption.png

파일:Ecb decryption.png

전자 코드북은 모든 블록이 같은 암호화 키를 사용하기 때문에 보안에 취약하다. 만약 암호화 메시지를 여러 부분으로 나누었을 때 두 블록이 같은 값을 가진다면, 암호화한 결과 역시 같다. 이것은 공격자가 비슷한 메시지를 반복적으로 암호화하는 반복 공격에도 취약한 성질을 가진다.

Template:여러그림

암호 블록 체인 방식 (CBC)

암호 블록 체인 (cipher-block chaining, CBC) 방식은 1976년 IBM에 의해 개발되었다.<ref>William F. Ehrsam, Carl H. W. Meyer, John L. Smith, Walter L. Tuchman, "Message verification and transmission error detection by block chaining", US Patent 4074066, 1976</ref> 각 블록은 암호화되기 전에 이전 블록의 암호화 결과와 XOR되며, 첫 블록의 경우에는 초기화 벡터가 사용된다. 초기화 벡터가 같은 경우 출력 결과가 항상 같기 때문에, 매 암호화마다 다른 초기화 벡터를 사용해야 한다.

파일:Cbc encryption.png

파일:Cbc decryption.png

CBC 방식은 현재 널리 사용되는 운용 방식 중 하나이다. CBC는 암호화 입력 값이 이전 결과에 의존하기 때문에 병렬화가 불가능하지만, 복호화의 경우 각 블록을 복호화한 다음 이전 암호화 블록과 XOR하여 복구할 수 있기 때문에 병렬화가 가능하다.

증식적 암호 블록 체인 방식 (PCBC)

파일:Pcbc encryption.png

파일:Pcbc decryption.png

암호 피드백 (CFB)

암호 피드백(cipher feedback, CFB) 방식은 CBC의 변형으로, 블록 암호를 자기 동기 스트림 암호로 변환한다. CFB의 동작 방식은 CBC와 비슷하며, 특히 CFB 암호 해제 방식은 CBC 암호화의 역순과 거의 비슷하다.

<math>C_i = E_K (C_{i-1}) \oplus P_i</math>
<math>P_i = E_K (C_{i-1}) \oplus C_i</math>
<math>C_{0} = \ \mbox{IV}</math>

파일:cfb encryption.png

파일:cfb decryption.png

출력 피드백 (OFB)

출력 피드백(output feedback, OFB)은 블록 암호를 동기식 스트림 암호로 변환한다.

XOR 명령의 대칭 때문에 암호화와 암호 해제 방식은 완전히 동일하다:

<math>C_j = P_j \oplus O_j</math>
<math>P_j = C_j \oplus O_j</math>
<math>O_j = \ E_K (I_{j})</math>
<math>I_j =\ O_{j-1}</math>
<math>I_{0}= \ \mbox{IV}</math>

파일:ofb encryption.png

파일:ofb decryption.png

카운터 (CTR)

카운터(Counter, CTR) 방식은 블록 암호를 스트림 암호로 바꾸는 구조를 가진다. 카운터 방식에서는 각 블록마다 현재 블록이 몇 번째인지 값을 얻어, 그 숫자와 nonce를 결합하여 블록 암호의 입력으로 사용한다. 그렇게 각 블록 암호에서 연속적인 난수를 얻은 다음 암호화하려는 문자열과 XOR한다.

카운터 모드는 각 블록의 암호화 및 복호화가 이전 블록에 의존하지 않으며, 따라서 병렬적으로 동작하는 것이 가능하다. 혹은 암호화된 문자열에서 원하는 부분만 복호화하는 것도 가능하다.

파일:Ctr encryption.png

파일:Ctr decryption.png

오류 증식

메시지 인증 코드인증된 암호 방식이 널리 쓰이기 이전까지는 운용 방식 기준으로 "오류 증식" 특성이 논의되었다.

인증된 암호 방식

Template:본문

같이 보기

참조

<references />

Template:블록 암호