공부 기록

[정보보안] Block Cipher modes of Operation

by 너나나

DES : guiyum.tistory.com/80
Block cipher : guiyum.tistory.com/78
지긋지긋한 블록 암호 마지막편!!!!(AMADU!!)

긴 메세지의 경우 얘를 특정한 길이로 나눠서 Block cipher에 입력해줘야 한다. 그러니까 우리는 plaintext를 암호화하기 위해서는 암호 알고리즘 뿐만 아니라 사용방식도 규정해야 한다. 이것을 블록 암호 운용 방식(Block Cipher modes of operation)이라고 한다. NIST에서 5가지 운영 방식을 정의하였는데 바로 ECB, CBC, CFC, OFB, CTR들이 있다!! 얘네들에 대해서 알아보자!!!

Electronic Codebook (ECB)

가장 단순하고 가장 기밀성이 구린 방식이다.
plaintext은 N개의 n비트 블록으로 분할된다. 따라서 블록별로 개별적으로 암호화 하고 plaintext block과 ciphertext block은 one to one 관계를 유지한다.

모든 plaintext블럭이 독립적으로 암호화 되기 때문에 같은 key를 사용하는 같은 plaintext는 항상 같은 ciphertext로 암호화된다.

ECB Encryption
ECB Decription

암호화/복호화 둘다 병렬적으로 처리된다!!

Cipher Block Chaining (CBC)

ciphertext block을 체인처럼 연결하여 plaintext를 암호화 한다.
ciphertext block을 생성할때 먼저 plaintext block을 이전의 암호화 결과와 xor하고 그다음 암호화를 한다. 따라서 생성되는 각각의 암호문 블록은 현재 plaintext block뿐만 아니라 그 이전의 plaintext의 영향도 받는 것이다!!

CBC mode에서 ciphertext block 1개가 파손된 경우, 암호문 블록의 길이가 바뀌지 않았다면 plaintext block에 미치는 영향은 2개의 블록으로 제한된다.

ciphertext block 한개가 파손된 경우 2개의 plaintext에만 영향을 끼침

plaintext길이가 가변적이기 때문에, 마지막 블록은 block의 길이와 항상 맞는것은 아니다!! -> 길이를 맞추기 위해 뒤에 0을 덧붙인다!!

만약 공격자가 초기화 벡터의 임의의 비트를 반전시킬 수 있는 경우(0->1, 1->0), plaintext block의 1 비트는 ciphertext block1에 대응하여 반전될 수 있다.

Initial Vector (IV) : 각 암호화 마다 다른 random bit string 사용

CBC Encryption (병렬적으로 수행x)
CBC Decryption (병렬적으로 수행 가능)

Cipher Feedback (CFB)

이전의 ciphertext block을 암호화 알고리즘의 입력으로 사용한다.
Feedback : ciphertext block이 암호화의 입력으로 사용되는 것
CFB mode는 disposable pad와 유사하다!!

  • One time pad : "plaintext" xor "random bit string" = "ciphertext"
  • CFB mode : "plaintext block" xor "output of cryptographic algorithm" = "ciphertext block"
CFB Encryption (병렬적으로 수행x), 오류전파 가능성이 높다
CFB Decryption (병렬 수행 가능)

Output Feedback (OFB)

암호 알고리즘의 출력을 암호 알고리즘의 입력으로 feedback
plaintext block은 암호 알고리즘에 의해 직접적으로 암호화 되는 것이 아니라 plaintext block과 암호 알고리즘의 output을 xor해서 암호 블럭을 만든다.

CFB mode와 OFB mode 비교

  • CFB mode : 이전의 ciphertext block을 암호화 알고리즘의 입력으로 사용한다. (Feedback of the cipher block to the encryption algorithm)
  • OFB mode : 암호 알고리즘의 입력으로 사용되는 것이 그 앞 암호 알고리즘의 출력. (Output to the cryptographic algorithm feedback)

그러니까 CFB모드에서는 1개 앞의 암호문 블록이 암호 알고리즘으로의 입력이고 OFB모드에서는 암호 알고리즘의 한 단계 앞의 출력이 암호 알고리즘의 입력으로 사용된다.

엄청 비슷해보이는데 그림으로 이해해보면 이렇다!!!

CFB mode와 OFB mode
OFB Encryption (병렬처리 불가능)
OFB Encryption (병렬처리 불가능)

Counter (CTR)

key stream을 생성하기 위해 counter값을 1씩 증가시키는 형태로 동작하는 stream cipher
CTR mode에서 각 블록이 암호화될때 counter가 key stream을 만들기 위해 1씩 증가된다. 즉, plaintext block과 counter을 암호화 한 bit string을 xor한 결과가 ciphertext block이 된다.
counter의 초기값은 각 암호화때마다 다른 값(nonce)을 기초로 해서 만든다한다.
block의 길이가 28비트일때 counter의 초기값은

와 같은 값을 사용할 수 있다.

Counter 만드는 법 :

  • 앞부분의 8바이트는 nonce(비표)로 암호화 때마다 다른값으로 해야한다.
  • 뒤의 8바이트는 block number로 이 부분을 카운트 해서 하나씩 증가시켜가면 된다.
  • 암호화가 진행됨에 따라 카운터 값은 다음과 같이 변한다.

CTR
CTR + 1 value
CTR + 2 value
CTR + 3 value
...
이렇게 변한다!!

CTR mode는 OFB mode와 같은 stream cipher의 일종이다.

  • OFB mode : 암호화의 출력을 입력으로 feedback
  • CTR mode : counter의 값이 암호화의 입력이 됨

CTR mode의 ciphertext block에서 1비트 반전이 발생했다고 할때 복호화를 수행하면 반전된 비트에 대응하는 plaintext block의 1비트만이 반전되고 오류는 확대되지 않는다.
OFB mode에서는 key stream의 한 block을 암호화한 결과가 암호화 전의 결과와 우연히 같아졌다고 하면 그 이후 key stream은 완전히 같은 값의 반복이 된다. 하지만 CTR mode에서는 그런 걱정이 없다!!

CTR Encryption (병렬 처리 가능)
CTR Decryption (병렬 처리 가능)

블로그의 정보

공부 기록

너나나

활동하기