일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 운영체제
- Security
- dtft
- Race condition
- 게임 개발
- convolution
- 유스케이스
- STCF
- 메카님
- DP
- 배경 그림
- frequency-domain spectrum analysis
- MAC
- Frequency Response
- AINCAA
- ret2libc
- stride
- MLFQ
- DSP
- sampling theory
- pdlc
- link layer
- dirty cow
- polymorphism
- 게임개발
- Unity #Indie Game
- RBAC
- SNR
- 유니티
- linear difference equation
- Today
- Total
다양한 기록
블록 암호 - 운용모드 본문
다수의 블록을 암호화하려면?
- 각 블록마다 새로운 키로 암호화?
- 각 블록을 독립적으로 암호화?
- 각 블록들이 체인 형태로 연결되도록 암호화?
- 블록에서 남은 부분은?
실제 운용환경에서는 평문의 길이가 AES의 8바이트, 16바이트보다 길고 가변적임
임의의 길이의 데이터를 암호화하고 복호화하는 방법 필요
=> 블록 암호의 운용 모드(modes of operation)
- ECB, CBC, CFB, OFB, CTR
ECB (Electronic CodeBook) 방식
- 긴 평문을 n비트씩 m개의 블록으로 자르고 마지막 블록에 패딩
- 각 블록별로 동일한 키에 의해 독립적으로 암호화
- 동일한 평문 블록은 동일한 암호문으로 암호화됨
안전성
- 각 블록이 독립적으로 암/복호화 => 병렬처리 가능
- 블록 단위의 패턴이 유지됨
- 에러 파급 없음 .. 해당 블록만 에러
CBC (Cipher-Block Chaining) 방식
- 각각의 평문 블록은 암호화되기 전에 이전 블록의 암호문과 XOR
- 암호화된 블록은 전송된 후 다음 블록의 암호화에 사용되기 위해서 메모리에 저장되어야 함
- 첫번째 블록을 암호화하기 위해 초기벡터(IV) 값이 필요
- 초기벡터 값은 송신자와 수신자가 사전에 공유
암호화 : ci = Ek(pi XOR ci-1), i = 1, 2, 3, 4, .... m
복호화 : pi = Dk(ci) XOR ci-1 ; IV (=c0)
안전성
- 평문의 동일한 블록들은 암호문에서 서로 다른 블록으로 암호화됨 * 암호 시 전 단계의 암호 블록을 이용하기 때문
- 암호문 블록 ci의 한 비트 오류 시?
- 복호화 과정에서 pi, pi+1에 오류 ... XOR은 이전 암호문과 되기 때문
CFB (Cipher FeedBack) 방식
- 블록 크기가 작은 경우 ECB나 CBC는 비효율적임
- 64비트(DES)나 128비트(AES) 블록을 입력받을 때까지 기다려야 함
- 평문 블록의 크기가 n보다 작은 r비트 처리 시 CFB 사용
- 블록 암호를 이용하지만 결과는 스트림 암호와 같음
- 평문을 암호화하거나 복호화하지 않음
- n비트 시프트 레지스트의 값 Si를 암호화 및 복호화에 사용
- n비트 시프트 레지스터의 값 Si를 암호화 => Ti
- Ti의 왼쪽 r비트만 사용하여 r비트의 평문 pi와 XOR => ci
- 각 블록의 시프트 레지스터 Si는 이전 시프트 레지스터 Si-1을 r비트 왼쪽으로 이동, 오른쪽에 ci-1을 채워서 만듦
복호화
초기벡터를 암호화하고 나온 출력값을 암호문과 XOR
그 다음은 암호문에서 떼와서 시프트 레지스터
예시
S1(IV) | 1000 1101 0100 | c1 | 1010 |
s2 | 1101 0100 1010 | c2 | 0011 |
s3 | 0100 1010 0011 | c3 | 1110 |
s4 | 1010 0011 1110 | c4 |
안전성
- 단일 비트 오류 발생 시 복호화 과정에서 그에 해당하는 평문에 한 비트 오류
- 그 이후 시프트 레지스터를 빠져나갈 때까지 오류 확산
- 4비트 평문, 12비트 시프트 레지스터 예시
- ci에서 오류 1비트
- pi에 한비트 오류, pi+1~3까지 평문 전체 오류
OFB (Output FeedBack) 방식
- CFB 모드와 유사하게 블록을 한 바이트나 비트 단위로 쪼개어 작은 단위로 암호화 가능
- 첫번째 시프트 레지스터에는 초기 벡터가 사용
- 시프트 레지스터에 채워지는 값은 이전 블록의 암호문이 아닌 이전 블록에서 평문 블록과 XOR 연산에 사용된 값
안전성
- 복호화 과정에서 암호문 한 블록은 다른 평문 및 암호문 블록에 영향을 주지 않음
- 한 블록의 암호문에서 발생한 오류는 해당 블록의 해당 비트에만 영향
CTR (Counter) 방식
- 블록을 암호화할 때마다 1씩 증가하는 카운터를 암호화해서 평문 블록과의 XOR
- 암/복호화는 완전히 같은 구조가 됨
- 병렬처리 가능
암호화: ci = Ek(ctr) XOR pi
복호화: pi = Ek(ctr) XOR ci
오류 확산의 특성은 OFB과 동일
- 암호문의 한 비트 오류는 대응되는 평문에 한 비트 오류 발생시킴
안전성: ECB는 블록 패턴을 유지한다는 문제점
효율성: OFB와 CTR은 평문과 암호문이 결정되지 않아도 암호화 전처리가 가능
오류 확산: CBC, CFB는 ci 오류 발생 시 다른 블록에도 영향
암호화 단위: CFB, OFB, CTR은 암호 알고리즘이 제공하는 블록 사이즈보다 작은 사이즈 처리 가능
ECB | CBC | CFB | OFB | CTR | |
블록 패턴 유지 | O | X | X | X | X |
전처리 가능성 | X | X | X | O | O |
병렬 처리 | O | 복호화 시 가능 | 복호화 시 가능 | X | O |
오류 확산 | X | pi, pi+1 영향 | 가변 | X | X |
암호화 단위 | n | n | r <= n | r <= n | r <= n |
* 복호화 시 가능 저건 암호문을 다 받은 경우
'정보보호이론' 카테고리의 다른 글
공개키 암호 (0) | 2024.12.15 |
---|---|
해시 함수, 공격, 응용, MAC (0) | 2024.10.28 |
블록 암호 알고리즘, DES / AES (0) | 2024.10.27 |
암호 기초, 역사 (0) | 2024.10.27 |
대칭키 암호, 공개키 암호, 해시 함수와 MACs (0) | 2024.10.27 |