728x90
블록암호
블록 암호는 평문을 블록단위로 처리하는 알고리즘이다. 그런데 평문의 길이가 블록 암호의 블록 크기보다 클 경우에는 어떻게 블록 암호를 적용할 것인가?
블록 암호의 모드(mode)
블록 암호를 반복하는 방법으로 임의의 길이의 평문을 암호화하기 위해서 평문을 일정한 길이를 갖는 블록으로 나누고, 각 블록에 블록 암호를 반복 적용하여 암호화를 수행한다.
패딩
평문의 길이가 가변적이기 때문에 마지막 블록이 블록의 길이와 항상 딱 맞아 떨어지지 않을 수 있다. 이럴 때 부족한 길이만큼을 0으로 채우거나 임의의 비트들로 채워 넣는 것을 패딩이라고 한다.
패딩으로 부족한 길이를 채운 뒤에 마지막 바이트에 패딩을 적용한 길이를 넣어준다.
블록 암호의 주요 모드
- ECB 모드 : Electric CodeBook mode(전자 부호표 모드)
- 동일한 내용을 갖는 평문 블록을 대응되는 동일한 암호문 블록으로 변환
- ECB 모드는 가장 간단하나 평문 블록과 암호문 블록이 일대일의 관계를 유지하기 때문에 가장 기밀성이 낮다. 암호문을 살펴보는 것으로 평문 속에 패턴의 반복이 있다는 것을 알 수 있어 이것을 실마리로 암호 해독을 할 수 있게 된다.
- CBC 모드 : Cipher Block Chaining mode(암호 블록 연쇄 모드)
- 암호문 블록을 마치 체인처럼 연결시켜 암호 블록 연쇄 모드라고도 한다. 1단계 앞에서 수행되어 결과로 출력된 암호문 블록에 평문 블록을 XOR 하고 나서 암호화를 수행한다. 예를 들면 평문을 4블록으로 나눠 암호화 할 때, 2번째 평문 블록을 암호화 할 때 앞 단계에서 첫번째 평문 블록이 암호화된 암호문 블록1과 평문 블록 2를 XOR 연산하는 식으로 암호화를 수행하는 것이다. 그렇기 때문에 생성되는 각각의 암호문 블록은 현재 평문 블록 뿐만 아니라 그 이전의 평문 블록들의 영향도 받게 된다. 이런 방식 덕분에 ECB 모드의 약점 회피가 가능하다. 첫번째 평문 블록을 암호화 할 때는 앞 단계의 암호화 블록이 없으므로 초기화 벡터라는 비트열을 사용한다. 초기화 벡터는 송신자와 수신자간에 미리 약속하며, 공개된 값을 사용해도 무방하다. 초기화 벡터는 암호화 때마다 다른 랜덤 비트열을 사용하는 것이 일반적이다.
- CFB 모드 : Cipher FeedBack 모드(암호 피드백 모드)
- CFB 모드는 1단계 앞의 암호문 블록을 암호 알고리즘의 입력으로 사용한다.
- CFB 모드는 블록 암호를 써서 생성한 키를 이용하는 스트림 암호로 암호 알고리즘이 생성하는 비트열인 키 스트림이 존재하고 이 키 스트림을 생성하기 위한 의사난수 생성기로서 암호 알고리즘을 이용한다. 초기화 벡터는 의사난수 생성기의 seed에 해당한다.
- OFB 모드 : Output FeedBack mode(출력 피드백 모드)
- OFB 모드는 평문 블록과 암호 알고리즘의 출력을 XOR 연산해서 암호문 블록을 만들기 때문에 평문 블록이 암호 알고리즘에 의해 직접 암호화되고 있는 것은 아니다.
- CFB 모드와 OFB 모드의 차이점으로는 CFB는 '한 단계 앞의 암호문 블록'을 암호화 입력으로 사용하고, OFB는 '한 단계 앞의 암호와 결과'를 암호 알고리즘 입력으로 사용한다.
- CTR 모드 : Counter mode(카운터 모드)
- 블록을 암호화할 때마다 1씩 증가해 가는 카운터를 암호화해서 키 스트림을 만들어내는 스트림 암호로 암호문 블록은 카운터를 암호화한 비트열과, 평문 블록과의 XOR을 취한 결과가 된다. CTR 모드의 카운터를 만드는 법은 암호화 할 때마다 다른 값(비표)를 기초로 블록 길이가 16바이트라고 하면 비표를 8바이트, 블록 번호를 8바이트 더해서 초기값을 정해준다. 카운터의 앞부분 8바이트는 비표로 암호화 할 때마다 다른 값이어야 하고, 후반 8바이트는 블록 번호로 이 부분을 카운트해서 하나씩 증가시켜 나간다.
728x90
'보안' 카테고리의 다른 글
공개 키 암호(Public-Key Cryptography)와 RSA (0) | 2021.11.03 |
---|---|
AES(Rijndael)와 국내개발 블록 암호 (0) | 2021.10.12 |
DES와 트리플 DES (0) | 2021.10.12 |
스트림 암호와 일회용 패드 (0) | 2021.10.06 |
브루트포스 공격(Brute Force Attack)과 빈도 분석 (0) | 2021.10.06 |