블록 암호 모드: Difference between revisions

From IT Wiki
 
(9 intermediate revisions by 6 users not shown)
Line 1: Line 1:
[[분류:보안]]
[[분류:암호학]]
;Block Cipher Mode; Block Cipher Modes of Operation
;Block Cipher Mode; Block Cipher Modes of Operation
;[[블록 암호]]에서 블럭 단위로 암·복호화 되는 과정을 반복적으로 운용하는 절차
;[[블록 암호]]에서 블럭 단위로 암·복호화 되는 과정을 반복적으로 운용하는 절차


== 종류 ==
==종류==
=== [[ECB 모드]] ===
===[[ECB 모드]]===
* 각 블록은 동일한 키를 이용하여 독립적으로 암호화
* 평문 조작이 가능하고 재전송 공격에 취약
* 간단한 구현, 고속 암복호화, 병렬처리 가능


=== [[CBC 모드]] ===
*각 블록은 동일한 키를 이용하여 독립적으로 암호화
;Cipher Block Chaining
*평문 조작이 가능하고 재전송 공격에 취약
* 각 평문 블록은 이전 블록 암호문와 XOR 연산 후 암호화
*간단한 구현, 고속 암복호화, 병렬처리 가능
* IV -> 평문 블록1과 XOR -> 암호화 -> 암호문 블록1 -> 평문 블록2와 XOR -> 암호화 -> 암호문 블록2 ...
* Initial Vector 사용, 오류 파급 발생
* 패딩 사용
* 암복호화 병렬처리 불가


==== 활용 ====
===[[CBC 모드]]===
* 보안적으로 가장 강력한 암호화 모드로 평가
* [[IPSec]], [[커버로스]] 등에서 사용


=== [[CFB 모드]] ===
*각 평문 블록은 이전 블록 암호문와 XOR 연산 후 암호화
;Cipher FeedBack
*IV -> 평문 블록1과 XOR -> 암호화 -> 암호문 블록1 -> 평문 블록2와 XOR -> 암호화 -> 암호문 블록2 ...
* 이전 암호문을 암호화하여 평문과 XOR(평문에 대한 직접 암호화 없음)
*Initial Vector 사용, 오류 파급 발생
* IV -> 암호화 -> 평문 블록1과 XOR -> 암호문 블록1 -> 암호화 -> 평문 블록2와 XOR -> 암호문 블록2 ...
*패딩 사용
* Initial Vector 사용, 오류 파급 발생
*암호화 병렬처리 불가(복호화는 가능)
* 패딩 사용하지 않음(스트림 암호처럼 Bit 단위 암호화)
* 암호화는 순차적으로, 복호화는 병렬처리 가능
* 평문과 암호문의 길이가 같음


=== [[OFB 모드]] ===
====활용====
;Output FeedBack
 
* 이전 암호문을 암호화하여 평문과 XOR(평문에 대한 직접 암호화 없음)
*보안적으로 가장 강력한 암호화 모드로 평가
* IV -> 암호화 -> 평문 블록1과 XOR -> 암호문 블록1 -> IV를 한번 더 암호화 -> 평문 블록2와 XOR -> 암호문 블록2 ...
*[[IPSec]], [[커버로스]] 등에서 사용
* IV를 암호화하여 키 생성
 
* Initial Vector 사용, 오류 파급 없음
===[[CFB 모드]]===
* 평문과 암호문의 길이가 같음
 
* 암호문을 동일하게 한번 더 암호화하면 복호화됨
*이전 암호문을 암호화하여 평문과 XOR(평문에 대한 직접 암호화 없음)
*IV -> 암호화 -> 평문 블록1과 XOR -> 암호문 블록1 -> 암호화 -> 평문 블록2와 XOR -> 암호문 블록2 ...
*Initial Vector 사용, 오류 파급 발생
*패딩 사용하지 않음(스트림 암호처럼 Bit 단위 암호화)
*암호화는 순차적으로, 복호화는 병렬처리 가능
*평문과 암호문의 길이가 같음
 
===[[OFB 모드]]===
 
*이전 암호 알고리즘의 출력을 암호화하여 평문과 XOR(평문에 대한 직접 암호화 없음)
*IV -> 암호화 -> 평문 블록1과 XOR -> 암호문 블록1 -> IV를 한번 더 암호화 -> 평문 블록2와 XOR -> 암호문 블록2 ...
*IV를 암호화하여 키 생성
*Initial Vector 사용, 오류 파급 없음
*평문과 암호문의 길이가 같음
*암호문을 동일하게 한번 더 암호화하면 복호화됨
 
====OFB와 CFB의 비교====
 
*암호 알고리즘으로의 입력만이 다름
*CFB 모드: 1개 앞의 암호문 블록이 암호 알고리즘으로의 입력
*OFB 모드: 암호 알고리즘의 한 단계 앞의 출력이 암호 알고리즘으로의 입력


==== OFB와 CFB의 비교 ====
* 암호 알고리즘으로의 입력만이 다름
* CFB 모드: 1개 앞의 암호문 블록이 암호 알고리즘으로의 입력
* OFB 모드: 암호 알고리즘의 한 단계 앞의 출력이 암호 알고리즘으로의 입력
[[파일:CFB모드와 OFB모드 비교.png|400px]]
[[파일:CFB모드와 OFB모드 비교.png|400px]]


=== [[CTR 모드]] ===
===[[CTR 모드]]===
;CounTeR
 
* 1씩 증가해가는 카운터를 암호화해서 키 스트림을 만들어내는 스트림 암호 모드
*1씩 증가해가는 카운터를 암호화해서 키 스트림을 만들어내는 스트림 암호 모드
* 카운터를 암호화한 비트열과 평문 블록을 XOR
*카운터를 암호화한 비트열과 평문 블록을 XOR
* 오류의 파급 없음
*오류의 파급 없음
*암복호화 병렬처리 가능
*IV는 사용하지 않고 카운터 값 사용


== 비교 ==
==비교==
{| class="wikitable"
{| class="wikitable"
! 스케줄링
!스케줄링
! IV 필요
!IV 필요
! 오류 파급
!오류 파급
! 패딩 사용
!패딩 사용
(평문 암호문 길이 다름)
(평문 암호문 길이 다름)
! 암호화 병렬처리
!암호화 병렬처리
! 복호화 병렬처리
!복호화 병렬처리
! 결과 형태
!결과 형태
|-
|-
| ECB
|ECB
| X
|X
| X
|X
| O
|O
| O
|O
| O
|O
| Block
|Block
|-
|-
| CBC
|CBC
| O
|O
| O
|O
| O
|O
| X
|X
| X
|O
| Block
|Block
|-
|-
| CBF
|CFB
| O
|O
| O
|O
| X
|X
| X
|X
| O
|O
| Stream
|Stream
|-
|-
| OBF
|OFB
| O
|O
| X
|X
| X
|X
| X
|X
| X
|X
| Stream
|Stream
|-
|-
| CTR
|CTR
| 카운터
|카운터
| X
|X
| X
|X
| O
|O
| O
|O
| Stream
|Stream
|}
|}

Latest revision as of 13:21, 3 September 2021


Block Cipher Mode; Block Cipher Modes of Operation
블록 암호에서 블럭 단위로 암·복호화 되는 과정을 반복적으로 운용하는 절차

종류[edit | edit source]

ECB 모드[edit | edit source]

  • 각 블록은 동일한 키를 이용하여 독립적으로 암호화
  • 평문 조작이 가능하고 재전송 공격에 취약
  • 간단한 구현, 고속 암복호화, 병렬처리 가능

CBC 모드[edit | edit source]

  • 각 평문 블록은 이전 블록 암호문와 XOR 연산 후 암호화
  • IV -> 평문 블록1과 XOR -> 암호화 -> 암호문 블록1 -> 평문 블록2와 XOR -> 암호화 -> 암호문 블록2 ...
  • Initial Vector 사용, 오류 파급 발생
  • 패딩 사용
  • 암호화 병렬처리 불가(복호화는 가능)

활용[edit | edit source]

  • 보안적으로 가장 강력한 암호화 모드로 평가
  • IPSec, 커버로스 등에서 사용

CFB 모드[edit | edit source]

  • 이전 암호문을 암호화하여 평문과 XOR(평문에 대한 직접 암호화 없음)
  • IV -> 암호화 -> 평문 블록1과 XOR -> 암호문 블록1 -> 암호화 -> 평문 블록2와 XOR -> 암호문 블록2 ...
  • Initial Vector 사용, 오류 파급 발생
  • 패딩 사용하지 않음(스트림 암호처럼 Bit 단위 암호화)
  • 암호화는 순차적으로, 복호화는 병렬처리 가능
  • 평문과 암호문의 길이가 같음

OFB 모드[edit | edit source]

  • 이전 암호 알고리즘의 출력을 암호화하여 평문과 XOR(평문에 대한 직접 암호화 없음)
  • IV -> 암호화 -> 평문 블록1과 XOR -> 암호문 블록1 -> IV를 한번 더 암호화 -> 평문 블록2와 XOR -> 암호문 블록2 ...
  • IV를 암호화하여 키 생성
  • Initial Vector 사용, 오류 파급 없음
  • 평문과 암호문의 길이가 같음
  • 암호문을 동일하게 한번 더 암호화하면 복호화됨

OFB와 CFB의 비교[edit | edit source]

  • 암호 알고리즘으로의 입력만이 다름
  • CFB 모드: 1개 앞의 암호문 블록이 암호 알고리즘으로의 입력
  • OFB 모드: 암호 알고리즘의 한 단계 앞의 출력이 암호 알고리즘으로의 입력

CFB모드와 OFB모드 비교.png

CTR 모드[edit | edit source]

  • 1씩 증가해가는 카운터를 암호화해서 키 스트림을 만들어내는 스트림 암호 모드
  • 카운터를 암호화한 비트열과 평문 블록을 XOR
  • 오류의 파급 없음
  • 암복호화 병렬처리 가능
  • IV는 사용하지 않고 카운터 값 사용

비교[edit | edit source]

스케줄링 IV 필요 오류 파급 패딩 사용

(평문 암호문 길이 다름)

암호화 병렬처리 복호화 병렬처리 결과 형태
ECB X X O O O Block
CBC O O O X O Block
CFB O O X X O Stream
OFB O X X X X Stream
CTR 카운터 X X O O Stream