상세 컨텐츠

본문 제목

암호화 패딩(Padding) & Base64 Encoding

IT 보안/이슈·동향

by 신시웨이 공식 블로그 2020. 12. 7. 23:38

본문

블록암호화(CBC, ECB, CFB, OFB)는 평문에 연속되는 Key Stream을 적용하여 1bit씩 암호화하는 스트림 암호화와 달리 블록 단위로 암호화가 이뤄지게 된다. 블록 암호화에는 CBC, ECB, CFB, OFB 모드가 있고 이때 CFB, OFB는 블록 암호화를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같기 때문에 패딩이 필요 없지만, CBC, ECB는 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 알기 위해서 Padding을 사용해야 한다. , 패딩(padding)이란 암호화 하고자 하는 데이터가 블록의 길이보다 부족할 경우 패딩을 사용하여 완전한 블록단위로 만들어준 후 암호화를 해야 한다는 것이다.

 

[아카데미] - 신입 보안 관리자가 꼭 봐야 할 암호화 상식 Ⅰ

 

신입 보안관리자가 꼭 봐야할 암호화 상식 Ⅰ

"암호화란 무엇인가" "대칭키 및 비대칭키 빠르게 알고 가자" 암호화(Encryption) IT 관련 업무를 하고 있다면 암호화(Encryption)라는 말을 수 없이 들었거나 앞으로 수 없이 들어야할 말이다. 암호화(En

blog.sinsiway.com

테스트 결과에서 보이듯 OFB모드에서는 원본 데이터와 암호화 데이터 길이가 같기 때문에 패딩이 필요 없으나 CBC모드는 블록의 배수가 되기 때문에 패딩이 필요한 것을 확인할 수 있다.

 

 

패딩(Padding)의 종류

제로 패딩(Zero Padding, Null Padding)

패딩이 필요한 부분을 0으로 채우는 방식이며 메시지 끝 부분에 0이 포함되어 있을 경우 어디까지가 데이터이고 어디까지가 패딩인지 구분이 되지 않기 때문에 보통 사용되지는 않는다.

Petra Cipher의 Zero Padding 처리 방법

 - enc[일반 데이터 + Zero Padding] + trailer
 - trailer에는 일반 데이터의 Length 정보가 들어가 있다.
 - 데이터의 Legnth 정보가 들어가 있는 이유는 일반 데이터의 제일 마지막 데이터가 ‘0’인 경우를 고려하여 Trailer를 붙인 것이다.

 

비트 패딩(Bit Padding)

패딩이 필요한 부분은 0으로 채우되, 최상위 비트는 1로 채우는 방식이며 최상위 바이트는 16진수로 80이 된다.(2진수로는 1000 0000)

, 맨뒤에서부터 앞으로 오면서 1이 나올 때 까지를 패딩으로 구분하며 메시지 길이가 블록 크기의 배수여서 패딩이 필요하지 않은 경우에는, 메시지의 일부를 패딩으로 판단하게 된다. 위와 같은 문제는 패딩을 위한 하나의 블록을 둠으로써 해결할 수 있으나, 최악의 경우 expansion ratio2가 된다.(하나의 블록 크기의 메시지를 보내기 위해서 하나의 블록 크기의 패딩을 붙여야 한다.)

8byte 기준으로 사용을 하며 평문이 블록 크기의 배수가 되지 못하면 필요한 바이트 값만큼 부족한 부분을 채운다.

[PKCS5 패딩(PKCS5 Padding) = 8byte 기준]

 

(데이터가 5byte 4byte인 경우)

 

(데이터가 8byte인 경우)

16byte 기준으로 사용을 하며 평문이 블록 크기의 배수가 되지 못하면 필요한 바이트 값만큼 부족한 부분을 채운다.

[PKCS7 패딩(PKCS7 Padding) = 16byte 기준]

 

(데이터가 10byte인 경우)

 

(데이터가 16byte인 경우)

 

인코딩(Encoding)

인코딩(Encoding)은 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식을 말한다.

 

Base64 Binary Data Text로 바꾸는 Encoding(binary-to-text encoding schemes)의 하나로써 BinaryDataCharacter set에 영향을 받지 않는 공통 ASCII 영역의 문자로만 이루어진 문자열로 바꾸는 Encoding이다.

Base64를 글자 그대로 직역하면 64진법이라는 뜻이다. 64진법은 컴퓨터한테 특별한데 그 이유는 64 2의 제곱수 64=2^6이며 2의 제곱수에 기반한 진법 중 화면에 표시되는 ASCII 문자들로 표시할 수 있는 가장 큰 진법이기 때문이다.(ASCII에는 제어 문자가 다수 포함되어 있기 때문에 화면에 표시되는 ASCII문자는 128개가 되지 않는다.) 변경하는 방식을 간략하게 설명하면 Binary Data 6bit씩 자른 뒤 6bit에 해당하는 문자를 아래 Base64 색인표에서 찾아 치환한다.(실제로는 Padding을 더해주는 과정이 추가된다.)

 

Base64 Encoding 특징

· 2진 데이터를 ASCII 형태의 텍스트로 표현 가능하다.
· Web 인증 중 기본 인증에 사용한다.
· 
끝부분의 padding(==) 식별 가능하다.
· 
64개의 문자 영문 대(26), 영문 소(26), 숫자(10),+,- 를 사용한다.

, 000000 A로 변한다기본 원리는 간단한다. 문자열 -> ASCII binary -> 6bit Cut -> base64 encoding 방식으로 진행이 된다. 그러나 한 가지 문제가 있다. 모든 문자열이 3개씩 남김 없이 끊어지진 않는다는 것이다. 그래서 Padding 사용하여 빈자리를 채운 후 인코딩을 하게 된다.

 

[Reference]

· 해쉬넷(블록암호) : http://wiki.hash.kr/index.php/블록암호

· 위키피디아(Padding) : https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

                              https://en.wikipedia.org/wiki/Padding_(cryptography)#Bit_padding

· 위키피디아(Base64) : https://en.wikipedia.org/wiki/Base64

 


글. 기술지원 2팀 | 정종찬

편집. 프리세일즈·마케팅팀 | 박병민

관련글 더보기