블록 암호 운용 방식 문서 원본 보기
←
블록 암호 운용 방식
둘러보기로 이동
검색으로 이동
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{위키데이터 속성 추적}} [[파일:BlockCipherModesofOperation.svg|400px|thumb|right|6가지 일반적인 블록암호 운용방식]] [[암호학]]에서 '''블록 암호 운용 방식'''({{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></small>이라 부른다.)<ref name="HAC"/> == 개요 == {| class="wikitable" |+ 6가지 일반적인 블록암호 운용방식 |- ! 약어 !! 운용 방식 !! 원어 !! 초기화 벡터 필요 !! 병렬처리 여부 !! 에러 전파 !! 복호화 함수 필요 |- | ECB || 전자 코드북 || '''E'''lectronic '''C'''ode'''B'''ook || 없음 || 가능 || 없음 || 필요 |- | CBC || 암호 블록 체인 || '''C'''ipher-'''B'''lock '''C'''haining || 필요 || 복호화만 가능 || 해당 블록 + 다음 블록 1개 || 필요 |- | PCBC || 증식적 암호 블록 체인 || '''P'''ropagation '''CBC''' || 필요 || 불가 || 전 블록 전파 || 필요 |- | CFB || 암호 피드백 || '''C'''ipher '''F'''eed'''B'''ack || 필요 || 복호화만 가능 || 해당 블록 + 다음 블록 1개 || 없음 |- | OFB || 출력 피드백 || '''O'''utput '''F'''eed'''B'''ack || 필요 || 복호화만 가능 || 없음 || 없음 |- | CTR || 카운터 || '''C'''oun'''t'''e'''r''' || 필요 (Nonce 사용) || 가능 || 없음 || 없음 |} == 초기화 벡터 == {{본문|초기화 벡터}} == 패딩 == {{본문|패딩 (암호학)}} == 운용 방식 == === 전자 코드북 (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된 값을 사용한다. === 출력 피드백 (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 /> {{블록 암호}} [[분류:블록 암호 운용 방식| ]] [[분류:암호 알고리즘]]
이 문서에서 사용한 틀:
틀:Llang
(
원본 보기
)
틀:본문
(
원본 보기
)
틀:블록 암호
(
원본 보기
)
틀:서적 인용
(
원본 보기
)
틀:여러그림
(
원본 보기
)
틀:웹 인용
(
원본 보기
)
틀:위키데이터 속성 추적
(
원본 보기
)
블록 암호 운용 방식
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
한국어
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보