블록 암호 모드
지난 시간에 알아본 DES는 대표적인 블록 암호의 한 예시입니다. 블록 암호란 데이터를 순차적으로 처리해가는 스트림 암호와는 달리 정해진 크기 단위의 블록을 통해 정보를 암호화하여 기밀성을 지키는 기술로, 처리해야 하는 정보가 정해진 블록의 크기를 초과하면 다양한 모드를 적용하여 처리하게됩니다.
지난 포스트에서 알아봤던 DES의 경우 64비트의 블록을 사용하고, DES를 개량해서 나온 AES의 경우 종류에 따라 128비트, 192비트, 256비트 등을 기준 길이로 사용합니다.
이번 시간에는 블록 암호에 적용할 수 있는 여러가지 모드들과 그 특성에 대해서 알아보겠습니다.
ECB 모드
Electric CodeBook Mode, 전자 부호표 모드
ECB 모드는 평문 블록을 암호화한 결과가 그대로 암호문 블록으로 적용되는 모드입니다. 말 그대로 기준 단위로 나누어 낸 블록에 암호화를 적용하고, 암호문이 된 결과물을 별다른 조작 없이 출력합니다.
만약 정해진 단위로 나뉘어진 블록 중 마지막 평문 블록이 기준 단위에 미치지 못한 경우, 기준 블록 길이가 되도록 마지막 부분에 데이터를 추가하여 길이를 맞추어주는 패딩(padding)이라는 특성이 적용됩니다.
평문을 그대로 암호화 한 결과물을 사용하다 보니 암호문을 보기만 해도 평문의 패턴 반복성을 감지할 수 있어 기밀성이 가장 낮은 모드입니다. 따라서 사용하지 않는 것이 바람직합니다.
CBC 모드
Cipher Block Chaining Mode, 암호 블록 연쇄 모드
CBC 모드는 이전 라운드에 암호화를 마친 블록을 다음 평문 블록과 XOR 연산을 진행시킨뒤, 다시 암호화를 진행하는 과정을 반복하는 모드입니다. 이 과정이 마치 블록들이 사슬(Chain)처럼 연결되어 있다고 하여 Block Chaining Mode라는 이름이 붙게 되었습니다.
맨 처음에는 이전 암호화 블록이 없기 때문에 초기화 벡터(IV)를 사용합니다. 과정에서 알 수 있듯이 암/복호화를 진행하기 위해서는 ECB 모드와 달리 이전 암호화 블록이 필요하기 때문에 이전 상태에 크게 영향을 받습니다. 만약 i 번째 암호화 블록에 손상이 일어나면 i 번째 평문 블록과 i + 1 번째 평문 블록이 손상의 영향을 받게 됩니다. 만약 단순 손상이 아니라 비트의 누락이 발생한 경우 복호화 과정에서 i 번째 이후 전체 평문 블록에 영향을 끼친다는 특징이 있습니다.
우리가 흔히 알고있는 https가 사용하는 연결 방법이 바로 SSL/TLS인데, 이 프로토콜에서 연결을 암호화하는 방법으로 CBC 모드를 사용합니다. TLS의 초기 버전인 1.0 에서 초기화 벡터(IV)로 이전에 마지막으로 암호화를 진행한 블록을 그대로 사용했었는데, 이것이 취약점으로 이어져 다음 버전인 1.1부터 명시적인 초기화 벡터로 난수(random number)를 사용하도록 변경되기도 했습니다.
CBC는 SSL/TLS외에도 3DES-EDL-CBC, AES-256-CBC, IPsec 등에서 사용되는 블록 암호 모드이며, 뛰어난 보안성을 인정받아 지금까지도 사용이 권장되고 있습니다.
CFB 모드
Cipher FeedBack Mode, 암호 피드백 모드
CFB 모드는 이전 라운드의 암호문을 암호 알고리즘의 입력으로 사용하는 모드입니다. 이전 암호문과 평문 블록을 XOR 연산시킨 결과를 암호화 알고리즘에 투입하는 CBC 모드와도 굉장히 유사합니다. 그림을 통해서 과정을 살펴보겠습니다.
CFB 모드는 CBC 모드와의 순서 차이에 중점을 두고 비교하시면 좋습니다.
CBC 모드의 경우
- 평문 블록과 이전 암호문 블록의 XOR 연산
- 암호화 알고리즘 적용
- 암호화 블록 생성 (이후 암호화에 다시 이용)
CFB 모드의 경우
- 이전 암호문 블록에 암호화 알고리즘 적용
- 평문 블록과 암호화 된 블록의 XOR 연산
- 암호화 블록 생성 (이후 암호화에 다시 이용)
CFB 모드는 CBC 모드보다 약간 빠르게 사용할 수 있습니다. 암호화 알고리즘이 적용되는 과정을 미리 연산해 둘 수 있기 때문입니다.
OFB 모드
Output-FeedBack Mode, 출력 피드백 모드
OFB 모드는 암호화 알고리즘의 출력을 다음 암호화 알고리즘의 입력으로 사용하는 모드입니다. 이 경우 암호화 알고리즘을 적용하더라도 다른 암호화 알고리즘의 입력이 변하지 않아 입력을 구하는 동작을 미리 수행해 둘 수 있어 AES 등의 다른 암호 알고리즘에 비해 상당히 빠릅니다. 이때 암호문을 만들때 사용하는 입력들을 키 스트림(Key stream) 이라고 하며 블록 암호이면서 동시에 스트림 암호의 특성을 갖고 있는 모드라는 것을 알 수 있습니다.
OFB 모드와 이전에 살펴 본 CFB 모드는 암호화 알고리즘의 입력값만 다릅니다. OFB 모드는 이전 암호화 알고리즘의 출력(Output)을, CFB 모드는 이전 라운드의 암호문(Cipher)을 입력으로 투입합니다.
대신 OFB 모드의 경우 평문 블록에 암호 알고리즘을 직접 적용하여 암호화 하는게 아닌, 암호 알고리즘이 적용된 블록과 XOR 연산을 통해 데이터의 변환을 수행하고 있다는 점을 기억해야 합니다.
CTR 모드
CounTeR Mode, 카운터 모드
CTR 모드는 1씩 증가하는 카운터를 암호화하여 키 스트림을 만들고, 이를 이용해 암호화를 적용하는 모드입니다.
CTR 모드는 암호화 과정에서 이전 상태에 영향을 받지 않고, 평문에 암호화 알고리즘의 출력을 XOR 연산시키는 동작이 전부이기 때문에 암호화와 복호화가 완전히 같은 구조를 가집니다. 또한 각 카운터의 비표와 블록 번호를 통해 해당 블록의 순서를 구할 수 있어 임의의 순서로 암/복호화를 진행할 수 있다는 특징을 가집니다.
OFB 모드처럼 암/복호화에 키 스트림을 통해 XOR 연산을 진행하는 블록 암호인 동시에 스트림 암호의 특징을 갖고 있는 모드라고도 볼 수 있겠습니다. 이 때문에 블록 암호인지 스트림 암호인지 어느 하나로 딱 구분짓기는 어렵다고 생각하지만, 일단은 블록 암호이면서 스트림 암호의 특징을 동시에 갖는다고 기억하시면 될 것 같네요.
한 블록이 다른 블록에 영향을 미치지 않기 때문에 어느 한 곳의 오류가 다른 곳으로 확대되지 않으며, 병렬처리를 통해 키 스트림을 구해 고속으로 암/복호화를 수행할 수 있어 널리 이용되고 있습니다. 그림에서의 간단한 구조에서 알 수 있듯 지금까지 소개한 다른 모드들 중에서 가장 빠른 수행 속도를 자랑하기도 합니다.
마치며
이번 글에서는 대표적인 다섯가지 블록 암호 모드에 대해서 알아보았습니다.
틀린 내용에 대한 지적은 댓글로 부탁드리겠습니다.
읽어주셔서 감사합니다.
'이론 > 네트워크' 카테고리의 다른 글
파일의 무결성 검증하기 (일방향 해시 함수) (0) | 2023.04.30 |
---|---|
RSA 알아보기 (2) | 2023.04.08 |
DES 알아보기 (Data Encryption Standard) (0) | 2023.03.18 |
TCP/IP 프로토콜 스위트 계층 구조 (TCP/IP Protocol Suite Layers) (0) | 2021.02.13 |
네트워크의 종류 (Network Types: LAN, WAN, Switching) (0) | 2021.01.24 |
댓글