aes cbc zero padding 궁금점

chocokeki의 이미지

aes 128 cbc 는 만들었는데요 16B(128bit)로 나눠떨어지지 않는 크기 데이터도 암호화 할 수 있게 해달라는 요청이 들어왔습니다
그래서 0 패딩으로 구현하면 되겠거니하고 쉽게 생각했는데 이게 웬걸 안 쉽네요

다음과 같은 궁금한 사항이 생깁니다

1. 만약 3B를 암호화 하고 싶다고 가정했을 때 암호화 한 결과값은 16B로 나오는데
input에 3B output에 16B로 나오는게 맞나요?
(사용자 입장에서는 왜 3B를 넣었는데 왜 16B로 리턴이 되냐는 의문을 가지고 있어서요
이건 그냥 aes 자체가 그래서 그렇다고 설득을 하면 될까요?)

2. 위의 가정이 맞다면 사용자가 직접 16B로 나눠떨어지도록 공간을 잡고
0으로 직접 패딩을 하고 암호화 함수를 호출하는 거랑 별 차이가 없지 않나요?
(자동으로 되냐 수동으로 되냐)

3. 암호화 할 내용이 가변 크기이면 사용자가 암호를 풀었을 때 나오는 데이터 길이가 몇 인지 따로 관리를 하고 있어야 할까요?

ymir의 이미지

데이터가 block 단위 (128bit) 로 처리되기 때문에..
입력데이터 및 출력데이터는 모두 block size 가 되어야 합니다.

block size 보다 작은 데이터는 padding 을 붙여 block size 로 만들어서 input 으로 넣어야 합니다.

padding 은 간단히 zero padding 을 할 수도 있고 (padding 을 모두 0 으로)..
padding 이 5 byte 이면 "05 05 05 05 05", 2 byte 이면 "02 02" 와 같이..
padding 개수만큼을 숫자로 채우는 방법도 있습니다.

마지막 데이터가 block size 의 배수로 끝날 때에는..
16 byte 짜리 padding block 을 하나 더 생성해서, data 가 더 이상 없음을 표시해 줘야..
복호화 할 때 정확하게 처리할 수 있습니다.

복호화를 할 때, 마지막 block 은 padding 체크를 해서 잘라내면 됩니다.
원본 길이를 따로 넘겨서 정말 원본과 같은지 확인해 볼 수도 있겠지만..
위에서 두 번째 padding 방식은 굳이 그러지 않아도 정확하게 원본을 추출할 수 있습니다.
물론 원본 데이터가 00 으로 끝나지 않는다는 확신이 있다면..
zero padding 도 정확하게 원본을 추출할 수 있습니다.

OpenSSL 의 EVP 와 같은, 일반적인 암호 라이브러리의 API 는..
aes_128_cbc 와 같은 알고리즘 API 를 호출하기 앞서 위와 같은 패딩 처리를 해주기 때문에..
가능하다면 이미 나와있는 암호 라이브러리를 쓰는게 편합니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.