aes cbc zero padding 궁금점
글쓴이: chocokeki / 작성시간: 수, 2019/03/20 - 2:09오후
aes 128 cbc 는 만들었는데요 16B(128bit)로 나눠떨어지지 않는 크기 데이터도 암호화 할 수 있게 해달라는 요청이 들어왔습니다
그래서 0 패딩으로 구현하면 되겠거니하고 쉽게 생각했는데 이게 웬걸 안 쉽네요
다음과 같은 궁금한 사항이 생깁니다
1. 만약 3B를 암호화 하고 싶다고 가정했을 때 암호화 한 결과값은 16B로 나오는데
input에 3B output에 16B로 나오는게 맞나요?
(사용자 입장에서는 왜 3B를 넣었는데 왜 16B로 리턴이 되냐는 의문을 가지고 있어서요
이건 그냥 aes 자체가 그래서 그렇다고 설득을 하면 될까요?)
2. 위의 가정이 맞다면 사용자가 직접 16B로 나눠떨어지도록 공간을 잡고
0으로 직접 패딩을 하고 암호화 함수를 호출하는 거랑 별 차이가 없지 않나요?
(자동으로 되냐 수동으로 되냐)
3. 암호화 할 내용이 가변 크기이면 사용자가 암호를 풀었을 때 나오는 데이터 길이가 몇 인지 따로 관리를 하고 있어야 할까요?
Forums:
음 ..
데이터가 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 』
댓글 달기