{{위키데이터 속성 추적}}
[[암호학]]에서 '''블록 암호 운용 방식'''({{llang|en|block cipher modes of operation}})은 하나의 키 아래에서 [[블록 암호]]를 반복적으로 안전하게 이용하게 하는 절차를 말한다.<ref name="HAC">
{{서적 인용
|authors=Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone
|제목=Handbook of Applied Cryptography
|publisher=CRC Press
|year=1996
|isbn=0-8493-8523-7
|url=http://www.cacr.math.uwaterloo.ca/hac/
}}</ref><ref name="NIST-modes">
{{웹 인용
|제목=Block Cipher Modes
|publisher=[[NIST]] Computer Security Resource Center
|url=http://csrc.nist.gov/groups/ST/toolkit/BCM/index.html
}}</ref>
블록 암호는 특정한 길이의 블록 단위로 동작하기 때문에, 가변 길이 데이터를 암호화하기 위해서는 먼저 이들을 단위 블록들로 나누어야 하며, 그리고 그 블록들을 어떻게 암호화할지 정해야 하는데, 이때 블록들의 암호화 방식을 운용 방식이라 부른다.

운용 방식은 주로 암호화와 인증을 목적으로 정의되어 왔다.<ref name="HAC"/><ref name="NIST-DES-modes">
{{웹 인용
 |제목       = FIPS 81: DES Modes of Operation
 |publisher    = [[NIST]] Computer Security Resource Center
 |url          = http://www.itl.nist.gov/fipspubs/fip81.htm
 |확인날짜 = 2009년 6월 2일
 |보존url    = https://web.archive.org/web/20090604131329/http://www.itl.nist.gov/fipspubs/fip81.htm
 |보존날짜 = 2009년 6월 4일
 |url-status = dead
}}</ref>
역사적으로 암호화 방식은 다양한 시나리오의 데이터 수정 측면에서 오류 증식 특성과 관련하여 널리 연구되어 왔다. 나중에 [[데이터 무결성|무결성 보호]]는 암호화와는 완전히 별개로 다루게 되었다. 현대의 일부 운용 방식은 암호화와 인증을 효율적인 방식으로 병합해 놓고 있는데, 이를 [[인증된 암호 방식]](authenticated encryption) 방식으로 부른다.<ref name="NIST-modes"/>

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

== 초기화 벡터 ==
{{본문|초기화 벡터}}

== 패딩 ==
{{본문|패딩}}


== 전자 코드북 (ECB) ==

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

[[파일:Ecb encryption.png]]

[[파일:Ecb decryption.png]]

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

{{여러그림
| 정렬 = center
| 그림1 = Tux.jpg
| 설명1 = 원본 그림
| 그림2   = Tux ecb.jpg
| 설명2 = ECB 방식으로 암호화한 결과
| 그림3   = Tux secure.jpg
| 설명3 = ECB 이외의 방식으로 암호화한 결과
| 크기 = 196
| 꼬리말 = [[비트맵]] 그림을 여러 블록으로 나누어 암호화한 결과. ECB 방식의 경우 원본 그림의 색은 보이지 않지만 윤곽이 드러나 보이는 것을 볼 수 있다.
}}

== 암호 블록 체인 방식 (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)|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]]

블록 암호화 알고리즘에 따라 Shift 연산을 사용하기도 한다.

이러한 방법을 Shift되는 비트의 양에 따라 CFB-8, 혹은 CFB-1이라고 한다.

암호화, [[복호화]] 연산의 각 Round마다 IV로부터 Shift된 값을 사용한다.

<br />

== 출력 피드백 (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]]

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

== 인증된 암호 방식 ==
{{본문|인증된 암호 방식}}
<!--
== 기타 방식 ==
-->

== 같이 보기 ==
* [[메시지 인증 코드]]
* [[블록 암호]]

== 참조 ==
<references />

{{블록 암호}}

[[분류:블록 암호 운용 방식| ]]
[[분류:암호 알고리즘]]