패딩

위키원
Rhkd1456 (토론 | 기여)님의 2019년 10월 25일 (금) 11:30 판 (기법)
이동: 둘러보기, 검색

패딩(padding)이란 ECB(Electronic Code Book) 및 CBC(Cipher Block Chaining) 모드에서 AES 및 Triple DES와 같은 블록 암호 알고리즘은 입력 내용이 블록 크기의 정확한 배수(64비트 또는 128비트)가 되어야 한다. 원문의 크기가 16바이트(64비트 또는 128비트)의 배수가 아니라면 마지막 블록은 16바이트보다 작은 크기가 된다. 이 때 마지막 블록의 빈 부분을 채워주는 방식을 패딩이라고 한다.

특징

주어진 평문을 블록 암호로 암호화하기 위새어는 평문을 우선 블록 크기의 배수로 만들어야 한다. 예를 들어 DES로 암호화를 한다면 평문은 비트어야 할 것이다. 평문의 길이가 블록 크기의 배수가 아닌 경우, 블록 크기의 배수가 되게끔 패딩을 추가 해야 하는데 이럴 때 필요하다. 이러한 패딩을 하는 알고리즘은 PKCS5, PKCS7 등이 존재한다.

패딩의 가장 중요한 원칙은 으로부터 을 복구할 수 있어야 한다는 점이다. 이 원칙이 지켜지지 않으면 패딩된 메시지로부터 원본 메시지를 찾을 수 없다.[1]

기법

패딩기법은 블럭의 나머지 부분을 바이트(otect) 수로 채운다. 예를 들어 128비트의 블록에서, 만약 블록에 남는 다섯 개의 남은 평문 바이트가 있다면, 11값을 가진 11 바이트가 블록에 패딩된다. 블록에 채워진 데이터는 16바이트(128비트)로 나누어지게 된다. 이 방법은 패딩이 복호화 뒤에 명백하게 제거되도록 하고, 평문의 원래 크기가 다시 저장 되도록 한다. 추가적으로 64비트의 블론인 경우는 다섯 개의 남은 평문이 있다면, 3의 값을 가진 3바이트 블록에 패딩된다. 블록에 채워진 데이터는 8바이트(64비트)로 나누어지게 된다. 만약 평문이 블록(64비트 또는 128비트 외 기타)으로 나누어지면, 패딩을 추가하지 않아도 되며, 암호화를 수행 할때는 패딩이 항상 추가 된다.

PKCS#5

PKCS#5는 8바이트 블록의 암호 알고리즘을 가정한다. 원문의 길이가 바이트면 마지막 블록은 의 크기를 갖는다. 그럼 패딩 크기는 가 된다. PKCS#5는 단순히 패딩 크기의 값을 갖는 바이트를 크기만큼 반복한다.

패딩으로 채워지는 데이터
8 -(L mod 8)패딩 바이트
101
202 02
303 03 03
404 04 04 04
........
808 08 08 08 08 08 08 08

PKCS#7

PKCS#7은 갯수만 늘어났을 뿐 방식은 PKCS#5와 같으며 PKCS#7이 8바이트 사이즈를 가질 때 PKCS#5와 동일하다. PKCS#7에서는 블록 크기가 1에서 255까지 값을 가질 수 있다.(255는 한 바이트의 최대 값) 자바에서는 패딩 방식을 입력할 때 PKCS#5와 PKCS#7를 구분하지 않고 PKCS5Padding 이라고 입력한다.

비트 패딩

비트 패딩은 크기와 상관없이 메시지에 적용할 수 있다. 메시지에는 단일 세트(1) 비트가 추기돠고, 필요한 개수만큼 재설정(0) 비트가 추가된다. 추가된 재설정(0) 비트 수는 메시지를 확장해야 하는 블록 경게에 따라 달라진다. 이 방법을 사용하면 비트 수가 길고 반드시 바이트 수가 아닌 메시지를 채울 수 있다. 예를 들어, 32비트 블록을 채우기 위해 9비트로 채워진 23비트 메시지라 가정한다.

... | 1011 1001 1101 0100 0010 011 1 0000 0000 |

이 패딩은 MD5SHA를 포함한 많은 해시 함수에 사용되는 2단계 패딩 체계의 첫 번째 단계이다.

바이트 패딩

바이트 패딩은 정수 바이트로 인코딩 될 수 있는 메시지에 적용될 수 있다.

각주

  1. blisstoner, 〈현대 암호 1: 블록 암호〉, 2019-02-06

참고자료