"패딩"의 두 판 사이의 차이
(→PKCS#5) |
(→특징) |
||
3번째 줄: | 3번째 줄: | ||
== 특징 == | == 특징 == | ||
주어진 평문을 블록 암호로 암호화하기 위새어는 평문을 우선 블록 크기의 배수로 만들어야 한다. 예를 들어 DES로 암호화를 한다면 평문은 <math>64 x n</math>비트어야 할 것이다. 평문의 길이가 블록 크기의 배수가 아닌 경우, 블록 크기의 배수가 되게끔 패딩을 추가 해야 하는데 이럴 때 필요하다. 이러한 패딩을 하는 알고리즘은 PKCS5, PKCS7 등이 존재한다. | 주어진 평문을 블록 암호로 암호화하기 위새어는 평문을 우선 블록 크기의 배수로 만들어야 한다. 예를 들어 DES로 암호화를 한다면 평문은 <math>64 x n</math>비트어야 할 것이다. 평문의 길이가 블록 크기의 배수가 아닌 경우, 블록 크기의 배수가 되게끔 패딩을 추가 해야 하는데 이럴 때 필요하다. 이러한 패딩을 하는 알고리즘은 PKCS5, PKCS7 등이 존재한다. | ||
+ | |||
+ | 패딩의 가장 중요한 원칙은 <math>P(M)</math> 으로부터 <math>M</math>을 복구할 수 있어야 한다는 점이다. 이 원칙이 지켜지지 않으면 패딩된 메시지로부터 원본 메시지를 찾을 수 없다.<ref>blisstoner, 〈[http://www.secmem.org/blog/2019/02/06/block-cipher/ 현대 암호 1: 블록 암호]〉, 2019-02-06</ref> | ||
== 기법 == | == 기법 == |
2019년 10월 25일 (금) 11:24 판
패딩(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) | 패딩 바이트 |
1 | 01 |
2 | 02 02 |
3 | 03 03 03 |
4 | 04 04 04 04 |
.... | .... |
8 | 08 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 이라고 입력한다.
각주
- ↑ blisstoner, 〈현대 암호 1: 블록 암호〉, 2019-02-06
참고자료
- Blisstoner, 〈현대 암호 1: 블록 암호〉, 2019-02-06
- 〈Using Padding in Encryption〉, 디아이 관리서비스, 2016-03-30
- happinessoncode, 〈Java Cipher - 알고리즘, 운용 모드, 패딩의 이해〉, 2019-04-06
- 늦둥이해커, 〈블록 암호의 패딩〉, 2008-07-17
- 진리와자유, 〈PKCS#5 패딩과 PKCS#7 패딩의 차이점〉, 2018-08-06