본문 바로가기

Tech

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 바이트의 가변길이이다.