PKCS#5 패딩과 PKCS#7 패딩의 차이점
암복호화 할 때 인풋이 암호 블럭 사이즈의 배수와 맞지 않으면 배수에 맞춰 빈공간을 채워주게 됩니다.
이 채워주는 방법을 패딩이라고 부르는데 여기서 PKCS#5와 PKCS#7의 차이를 설명하겠습니다.
PKCS#5는 암호 블럭 사이즈가 8바이트에 맞춰져 있습니다.
8바이트의 배수로 인풋을 맞춰줘야 하는데 패딩에 들어가는 문자는 패딩할 갯수가 들어갑니다.
예시를 들어보겠습니다. 데이터는 헥사입니다.
AA 07 07 07 07 07 07 07 : 1바이트 데이터 + 7바이트 패딩
AA BB 06 06 06 06 06 06 : 2바이트 데이터 + 6바이트 패딩
AA BB CC 05 05 05 05 05 : 3바이트 데이터 + 5바이트 패딩
...
규칙이 보이시나요?
단 데이터가 8바이트인 경우 패딩이 필요 없어 보여도 PKCS#5 에서는 08을 8번 패딩합니다.
AA A9 A8 A7 A6 A5 A4 A3 08 08 08 08 08 08 08 08 : 8바이트 데이터 + 8바이트 패딩
이제 PKCS#7입니다.
패딩할 숫자만큼 패딩 값을 채워넣어서 붙여주는 것은 똑같습니다.
그래서 8바이트의 암호화 블럭 크기의 경우 PKCS#5와 같습니다.
그런데 현대의 암호화는 더 긴 암호화 블럭을 사용합니다.
AES 알고리즘의 경우 요즘 사용되는 크기가 AES256으로 256비트의 키를 사용합니다.
즉 32바이트의 키이고 내부적으로 암호화 블럭은 16바이트를 사용하게 됩니다.
이 상황에서 PKCS#7은 패딩이 최대 [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10] 16개까지 가능합니다.
갯수만 늘어났을 뿐 방식은 똑같으므로 PKCS#7이 8바이트 사이즈를 가질 때 PKCS#5와 동일합니다.
결국 PKCS#7는 PKCS#5의 확장입니다.
PKCS#7은 최대 가능한 패딩은 FF 이므로 255개가 됩니다.
PKCS#5는 8바이트 고정길이, PKCS#7은 1~255 바이트의 가변길이입니다.