본문 바로가기

개발 관련 기타/보안

[OpenSSL/Crypto++] (AES 암호화/복호화) 패딩 (padding) 이란?

패딩의 정의

 

  • 암복화 알고리즘 경우 input 데이터의 길이는 block size의 배수가 되어야 한다.
  • 하지만, 데이터의 길이가 block size의 배수가 아닌 경우 마지막 블록에 값을 추가해 block size의 배수로 맞춘다.
  • 이때, 추가 되는 행위 또는 값을 padding 이라고 한다.

 

패딩의 종류

 

  • PKCS5: 8바이트 블록 사이즈에 맞추어져 패딩이 들어갑니다. 그리고 그 값으로 몇 바이트를 패딩으로 채웠는지 적혀 있습니다.
    • AA 07 07 07 07 07 07 07 [1 바이트 데이터 + 7 바이트 패딩]
    • AA BB CC DD 04 04 04 04 [4 바이트 데이터 + 4 바이트 패딩]
    • 08 08 08 08 08 08 08 08 [0 바이트 데이터 + 8 바이트 패딩]
      • PKCS5의 경우 무조건 패딩을 추가하도록 되어있습니다. 그래서 데이터 사이즈가 8배수라 패딩이 필요없는 경우에도 패딩은 추가 됩니다.
  • PKCS7: 암복호화 알고리즘의 block size가 16 바이트로 늘어나면서 8 바이트 이상 패딩 지원이 필요하게 되었습니다. 
    • 예) 16바이트 블록 사이즈 패딩을 지원
      • AA BB CC DD EE FF GG HH 08 08 08 08 08 08 08 08 [8 바이트 데이터 + 8 바이트 패딩]
    • PKCS5가 8바이트 고정 길이 패딩이였다면 PKCS7는 1 ~ 255 바이트 가변 길이 패딩이 가능합니다.

'개발 관련 기타 > 보안' 카테고리의 다른 글

[openssl] AES 암호화 / 복호화 (C++ 사용)  (0) 2019.11.18