암호 블록 운용 모드
대칭 블록 암호에서는 한 번에 한 블록씩 처리한다.
블록 암호를 다양하게 사용하기 위해 NIST에서 5가지 운용 모드를 정의하였다
전자 코드북 모드(ECB)
이 모드에서는 평문을 고정된 크기의 블록으로 나누고, 각 블록을 암호화하여 암호문을 생성합니다.
암호화된 블록은 서로 독립적으로 처리되므로, 동일한 평문 블록이라도 암호문에서의 결과 값은 항상 동일합니다.
- 이러한 특성으로 인해, ECB 모드는 블록 단위의 패턴이나 구조를 쉽게 파악할 수 있어 보안성이 낮은 모드로 간주됩니다.
ECB 모드는 각 블록이 독립적으로 처리되므로, 암호화된 블록의 순서를 바꾸어도 평문을 복원할 수 있습니다.
- 이러한 특성으로 인해, ECB 모드는 데이터 무결성을 보장하지 않습니다.
ECB 모드에서 동일한 평문 블록이 여러 번 나타나면, 암호문에서도 동일한 암호 블록이 여러 번 나타나게 됩니다. - 이러한 특성으로 인해, ECB 모드는 보안성이 낮은 모드이므로, 실제로 사용되는 경우는 드뭅니다.
암호 블록 체인 모드 (CBC)
CBC (Cipher Block Chaining) 모드는 블록 암호 운용 모드 중 하나로, 앞선 블록의 암호문을 다음 블록의 평문과 함께 암호화하는 방식을 사용합니다.
현재의 평문 블록과 바로 직전의 암호 블록을 XOR 결과를 알고리즘의 입력으로 사용합니다
또한, 각 블록에서는 동일한 키가 사용 됩니다
CBC 모드에서는 먼저 초기화 벡터 (IV, Initialization Vector)를 사용하여 첫 번째 블록을 암호화합니다.
그 다음 블록부터는 앞선 블록의 암호문과 함께 XOR 연산을 수행한 후 암호화합니다.
- 이렇게 함으로써, ECB 모드와는 달리, 같은 평문 블록이라도 암호문 블록이 항상 동일하지 않고, 뒤섞인 형태로 출력됩니다.
- CBC 모드는 ECB 모드와는 달리 같은 평문 블록이라도 항상 동일한 암호문 블록이 출력되지 않기 때문에 보안성이 높습니다.
또한, 이전 블록의 암호문을 현재 블록의 암호화에 사용하기 때문에, 블록 하나가 손상되더라도 그 이후의 모든 블록이 영향을 받는 문제점을 보완할 수 있습니다.
CBC 모드의 단점으로는 병렬 처리에 취약하다는 점과, 첫 번째 블록의 초기화 벡터를 안전하게 전달 및 저장하는 것이 중요합니다.
공격자가 IV를 알게 되면 수신자를 속이고, 첫 번째 평문 블록의 선택 된 비트를 복구 할 수 있습니다.
암호 피드백 모드 (CFB)
CFB는 블록 암호를 스트림 암호로 변환하는 모드 중 하나입니다.
CFB 모드에서는 블록 암호를 스트림 암호로 바꾸기 위해 블록 단위로 연산을 수행하지 않고, 이전에 생성된 암호화된 비트 스트림의 일부를 사용합니다.
블록 단위로 암호화된 이전 출력 블록이 입력 블록으로 사용되어 스트림 암호를 생성합니다.
이전 출력 블록과 현재 평문 블록을 XOR하여 암호화된 스트림을 생성하며, 이 스트림은 다음 블록에 대한 입력으로 사용됩니다.
이 과정은 연속적으로 수행되며, 블록마다 새로운 스트림이 생성됩니다.
초기에는 IV와 K를 이용해서 initial 출력 C0를 만듭니다 (C0는 제 이해를 돕기 위해 임의로 만든 변수입니다)
암호화 과정에서는 이전 블록의 중간값을 입력으로 받아, 키 스트림(key stream)을 생성한 후 이를 평문과 XOR 연산을 수행하여 암호문을 생성합니다.
복호화 과정에서도 이전 암호문 블록의 중간값을 입력으로 받아 동일한 키 스트림을 생성하고, 이를 이전 암호문 블록과 XOR 연산하여 평문을 복호화합니다.
CFB 모드의 장점으로는 ECB 모드에서 발생하는 블록 패턴 문제(block pattern problem)가 발생하지 않으며, 오류 전파가 제한적입니다.
또한 입력 데이터가 블록 크기보다 작은 경우에도 처리할 수 있습니다.
단점으로는 이전 블록의 암호화가 현재 블록의 암호화에 직접적으로 영향을 미치므로, 병렬 처리가 불가능하다는 점이 있습니다.
카운터모드(CTR)
CTR (Counter) mode는 블록 암호를 사용하여 스트림 암호를 생성하는 운용 모드 중 하나입니다.
CTR 모드에서는 카운터 값을 이용하여 스트림을 생성하고, 이 스트림을 평문과 XOR 연산을 통해 암호화합니다.
CTR 모드에서는 각 블록에 대한 암호화를 병렬로 수행할 수 있어서 처리 속도가 빠르다는 장점이 있습니다.
또한, CBC와 달리 초기화 벡터(IV)를 랜덤하게 선택할 필요가 없어서, 키를 재사용하여 암호화할 수도 있습니다.
CTR 모드에서는 암호화된 스트림을 생성하기 위해 카운터 값으로 시작하는 일련의 값들을 블록 암호화 함수에 입력하여 스트림을 생성합니다.
이 스트림은 평문과 XOR 연산을 통해 암호화됩니다.
CTR 모드의 암호화 과정은 다음과 같습니다.
- 카운터 값(IV)과 nonce를 결합하여 초기화 벡터(IV)를 생성합니다.
- 초기화 벡터(IV)를 블록 암호화 함수에 입력하여 스트림 블록을 생성합니다.
- 평문 블록과 스트림 블록을 XOR 연산하여 암호문 블록을 생성합니다.
- 카운터 값을 증가시킵니다.
- 다음 블록에 대해 2~4단계를 반복합니다.
CTR 모드의 복호화 과정은 암호화 과정과 거의 동일합니다.
다만, 초기화 벡터(IV)와 스트림 블록 생성에 사용되는 카운터 값의 순서가 달라지는 것 빼고는 암호화 과정과 동일합니다
- IPSec(VPN)이나 ATM 네트워크 보안에 사용 된다
레퍼런스
- M - 대칭 암호 알고리즘
- AES Overview
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'Computer Science > Security' 카테고리의 다른 글
안전 해시 함수 (0) | 2023.04.03 |
---|---|
메시지 인증 방법은 무엇인가 (0) | 2023.04.02 |
RC4란 무엇인가 (0) | 2023.04.02 |
스트림 암호란 무엇인가 (0) | 2023.03.31 |
난수란 무엇인가 (0) | 2023.03.31 |