DongDD's IT

[Cryptography] Modes of Operation(블록 암호 운용 모드) 본문

IT 보안/Cryptography

[Cryptography] Modes of Operation(블록 암호 운용 모드)

DongDD 2018. 11. 24. 17:12

[Cryptography] Modes of Operation(블록 암호 운용 모드)




Modes of Operation



- 하나의 비밀키를 사용하는 Private key system의 block cipher에서 안전한 암호화를 하기 위해 고안된 방법


Initial Vector(IV)


- 암호화를 난수화하기 위해 사용되는 비트 블록

- 난수화하기 위한 초기 벡터

- 몇몇 운용 방법에 사용

- IV를 전송할 때는 추후에 나올 ECB로 암호화하여 전송


Padding


- 평문의 길이가 블록 크기의 배수가 아닐 경우, 모자란 평문 뒷 부분에 padding을 붙여 block의 배수로 맞추기 위한 방법


1. Padding 방법

1) Zero Padding

- 00 00 00 00으로 padding

2) Bit Padding

- 80 00 00 00으로 padding

3) ANSI X.923

- 00 00 00 04으로 padding

4) ISO 10126

- 81 A6 23 04으로 padding

5) PKCS#7

- 04 04 04 04으로 padding



Modes of Operation



1. Electronic Codebook(ECB)



- 단순히 block으로 쪼개어 각각 암호화/복호화 진행

- 병렬 처리 가능


1) Encryption

- Cn = E(Pn, K)


2) Decryption

- Pn = D(Cn, K)


3) 단점

- 평문 패턴이 노출될 위험이 있음

- Replay Attack에 약함



2. Cipher-Block Chaining(CBC)


- 일반적으로 가장 많이 사용되는 운용 모드

- MAC(Message Authentication Code)에 이용


1) Encryption

- C0 = E(IV xor P0, K) (if, n == 0)

- Cn = E(Cn-1 xor Pn, K) (if, n != 0)


2) Decryption

- P0 = D(C0, K) xor IV (if, n == 0)

- Pn = D(Cn, K) xor Cn-1 (if, n != 0)


3) 단점
- 암호화/복호화 모두 이전 과정을 사용하기 때문에 병렬 처리가 불가능
- 전송 오류가 있을 시, 다음 블록에 영향(C0 error 발생 시, P0와 P1에 영향)


3. Cipher FeedBack(CFB)

- Block Cipher로 Stream cipher 구현

- 자가 동기 스트림 암호화

- 암호화 알고리즘과 복호화 알고리즘이 같음

- IV를 s bit 만큼 왼쪽으로 shift한 것과 ciphertext의 s bit를 다음 단계에 사용


1) Encryption

- C0 = E(IV, K) xor Pn (if, n == 0)

- Cn = E(IV(left shift s) + Cn-1(s bit), K) xor Pn (if, n != 0)


2) Decryption

- P0 = D(IV, K) xor Cn (if, n == 0)

- Pn = D(IV(left shift s) + Cn-1(s bit), K) xor Cn (if, n != 0)


3) 단점

- 이전 단계의 ciphertext를 사용하여 암호화/복호화를 수행하기 때문에 병렬 처리 불가능

- 전송 오류 발생 시, 해당 block과 IV+error cipher가 왼쪽으로 shift되어 없어질 때 까지 발생

ex) IV: 128 bit, Cipher : 8bit

- 128/8 = 16 block 까지 error



4. Output FeedBack(OFB)



- Block Cipher로 Stream cipher 구현

- 동기 스트림 암호화

- 암호화 알고리즘과 복호화 알고리즘이 같음

- IV를 s bit 만큼 왼쪽으로 shift한 것과 IV를 key로 암호화한 s bit를 다음 단계에 사용

- keystream 생성은 IV에만 영향을 받고 data와 상관없이 keystream 생성가능(data가 오기 전 미리 계산 가능, pre-computation)

- ciphertext 전송 오류 전파가 없음(복호화에 ciphertext가 다음 block 영향을 끼치지 않기 때문에)


1) Encryption

- C0 = E(IV, K) xor Pn (if, n == 0)

- Cn = E(IV(left shift s) + E(IVn-1, K), K) xor Pn (if, n != 0)


2) Decryption

- P0 = D(IV, K) xor Cn (if, n == 0)

- Pn = D(IV(left shift s) + D(IVn-1, K), K) xor Cn (if, n != 0)


3) 단점
- 이전 단계의 암호화된 IV를 사용하므로 병렬 처리 불가능(선 계산 후 data 처리는 병렬 가능)
- IV 오류 시, 전체 error 발생


5. Counter(CTR)

- CFB, OFB와 마찬가지로 Block cipher로 stream cipher 구현

- IV + counter 사용

- 암호화 알고리즘과 복호화 알고리즘이 같음

- 각 block의 암호화/복호화는 다른 block에 영향을 끼치지 않으므로 병렬 처리 가능

- 암호화/복호화 선 계산 가능(pre-computation)

- 전송 오류가 해당 block에만 영향

- IV+x로 random access 가능


1) Encryption

- Cn = E(IV + x, K) xor Pn (if, n != 0)


2) Decryption

- Pn = D(IV + x, K) xor Cn (if, n != 0)





Comments