암복호화 할 때 인풋이 암호 블럭 사이즈의 배수와 맞지 않으면 배수에 맞춰 빈공간을 채워주게 된다
이 채워주는 방법을 패딩이라고 부르는데 여기서 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 바이트의 가변길이이다.
'Tech' 카테고리의 다른 글
[OpenSSL] EVP 방식으로 OpenSSL 사용하기 2/2 (0) | 2018.08.15 |
---|---|
[OpenSSL] EVP 방식으로 OpenSSL 사용하기 1/2 (0) | 2018.08.09 |
몇가지 Random Number Generation 예제 (0) | 2018.08.06 |
[OpenSSL] AES 암호화 복호화 (0) | 2018.08.05 |
[OpenSSL] 인증서 생성과 GitHub 업로드 (0) | 2018.08.03 |