Self-Improvement

암호학 패딩(비트 패딩, 바이트 패딩, 제로 패딩) 본문

개인

암호학 패딩(비트 패딩, 바이트 패딩, 제로 패딩)

JoGeun 2020. 4. 2. 17:28

1. 패딩
대칭키 암호 알고리즘은 블록 암호 알고리즘이라고 하기도 한다. 블록 단위라는 말은 특정 크기만큼 잘라서 사용한다는 것을 의미하며 DES 암호는 64비트 단위를 하나의 블록으로 보고 암호화를 수행한다.
그런데 암호화 대상 평문이 64비트 단위로 나눌 수 없는 경우에는 어떻게 암호화를 해야할까? 블록 암호는 블록 단위로만 암호화를 할 수 있는데 이럴 때 블록 단위의 길이가 되도록 원본 평문을 늘려주는 작업을 수행해야 하는데 이러한 과정을 패딩이라고 얘기한다. 암호의 안전성을 더욱 강화하기 위해 사용되며 패딩은 크게 비트 패딩, 바이트 패딩, 제로 패딩으로 나눈다.

2. 비트 패딩
블록의 크기가 8바이트(64비트)고 실제 원문은 5바이느(40비트)라고 하자. 그러면 블록의 크기로 밪추기 위해 3바이트가 더 필요한데 이 3바이트를 뭘로 채워야 하는가라는 문제가 생긴다. 이 경우에 비트 패딩에서는 첫번 째 비트는 1로 채우고 나머지 비트는 0으로 채우는 방식을 이용한다.
2진수 : 10000000 0000000 00000000 (3바이트)
16진수 : 80 00 00 (3바이트)

'ABCDE'을 패딩
16진수 : 41 42 43 44 45 80 00 00

원문의 크기가 8바이트라고 한다면 블록의 크기만큼 패딩을 하거나 패딩을 하지 않거나 하는 방법을 사용한다
일반적으로는 패딩이라는 것은 무조건 하는 것을 원칙으로 삼는다. 그래야 패딩을 제거하여 원문을 복원할 수 있기 때문인다

장점 : 바이트 단위가 아니라도 비트 단위로 패딩을 할 수 있다는 것이다. 즉 어떤 크기의 원문이라도 패딩을 할 수 있다는 장점이 있다. 참고로 비트패딩은 블록 암호에서는 잘 사용하지 않고 해시 함수에서 많이 사용된다.

3. 바이트 패딩
바이트 패딩은 비트 패딩보다 방법이 조금 더 많다. 비트 패딩과 차이점이 있다고 하면 비트 패딩은 비트 단위이므로 어떤 크기에도 적용할 수 가 있지만 바이트 패딩은 바이트 단위로만 할 수 있다는 것이 다른 점이다.
비트 패딩과 마찬가지로 패딩은 무조건 하는 게 원칙이다. 그래야만 나중에 원문을 추출하려고 패딩을 제거할 때 모호함이 없어지게 된다. 바이트 패딩은 ANSI X.923 ISO 10126, PKCS7 등이 있다.

ANSI X.923 패딩
모자란 부분을 0으로 채우고 맨 마지막 바이트는 패딩한 바이트 수를 넣는 방식이다. 
EX) DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04
만약 원문의 크기가 블록의 크기와 동일하거나 블록 크기의 배수와 동일하다면 다음과 같이 패딩을 한다
EX) DD DD DD DD DD DD DD DD | 00 00 00 00 00 00 00 08

ISO 10126 패딩
패딩하는 데이터를 랜덤하게 생성한 값으로 패딩을 하며 마지막 바이트가 패딩한 바이트의 개수를 나타낸다.
EX) DD DD DD DD DD DD DD DD | DD DD DD DD A7 1D AB 04
EX) DD DD DD DD DD DD DD DD | B3 27 34 BA A7 1D AB 08

PKCS7 패딩
패딩할 크기의 바이트를 모든 패딩의 바이트로 표현하는 것이다.
EX) DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04
EX) DD DD DD DD DD DD DD DD | 08 08 08 08 08 08 08 08
실제로 블록 암호 알고리즘에서 가장 많이 쓰이는 방식이다.

3. 제로패딩
제로 패딩은 패딩해야할 모든 바이트를 0으로 채우는 방식이다. 이 방식은 암호학에서 사용되지는 않는다 그리고 마지막이 0x00으로 끝나는 원문이 있다면 어디까지가 패딩 바이트인지를 알 수 있는 방법이 없다. 모호함이 발생하는 것이며 문자열만을 다루거나 문자열의 끝이 NULL로 표현되는 시스템에서는 의미가 있다.