HeYStRanGeR
article thumbnail

 

(2022.04.09)

네보실 3주차 실습 강의 정리

 


 

Padding

: block cipher 암호화에 필요한 block 의 빈공간을 채우는 것

 

더보기

1 byte = 8  bit 

 

 

즉, block의 길이를 완성하기 위해서 부족한 공간을 채우는 것을 padding이라고 한다.

padding의 방법에는 여러가지가 있다. (6개 정도)

 

  • pad with 1 bit followed by 0 bits
  • pad with zero (null) characters
  • pad with space characters
  • pad with zeroes except make the last byte equal to the number of padding bytes
  • pad with random values except make the last byte equal to the number of padding bytes
  • pad with bytes all of the same values as the number of padding bytes

 

1. OneAndZeros padding (ISO/IEC 7816-4, bit padding)

: 1 bit (0x80) 추가하고 나머지는 0 bit (0x00) 로 채우는 방법

  -> 1 bit를 추가했는데 block 에 부족한 부분이 없다면 padding 끝

  -> block이 처음부터 부족한 부분이 없다면, padding 안함

 hex 값으로 나타내므로 1은 80, 0은 00으로 채워짐

 

2. zero padding 

: 모든 byte를 0x00으로 채우는 방법

  -> ASCII Text 같은 평문 메시지에 사용하는 것은 문제없지만, EXE 파일 과 같은 바이너리 데이터에는 사용할 수 없음

  -> 바이너리 파일은 0x00으로 끝날 수 있기 때문

  -> 암/복호화 보다는 hash 값 생성에 자주 쓰임 (복호화가 필요없는 hash 값 생성)

 

3. pad with spaces

: 모든 byte를 space (0x20) 로 채우는 방법

  -> 원본 데이터의 마지막에 0x20이 들어간 경우는 사용할 수 없음

  -> 어디까지가 평문이고, 어디가 padding인지 구분할 수 없기 때문

  -> zero padding 과 마찬가지로 hash 코드 생성에 쓰임

 

4. ANSI X9.23

: 마지막 byte를 제외하고 모두 0x00으로 채우고, 마지막 byte에는 padding 크기를 채우는 방법

  -> block이 부족하지 않아도 padding 함. (input block 크기와 암호화 알고리즘에서 사용하는 block 크기가 같아도)

 

5. ISO 10126

: 마지막 byte를 제외하고 모두 랜덤 값으로 채우고, 마지막 byte 에는 padding 크기를 채우는 방법

  -> block이 부족하지 않아도 padding 함. (input block 크기와 암호화 알고리즘에서 사용하는 block 크기가 같아도)

 

6. PKCS#5/7

: 모든 byte를 padding 크기로 채우는 방법

  -> block이 부족하지 않아도 padding 함. (input block 크기와 암호화 알고리즘에서 사용하는 block 크기가 같아도)

 


 

Block cipher 의 운영모드

stream mode는 stream cipher랑은 다른것임

  • ECB
  • CBC
  • CFB
  • OFB
  • CTB

 

 

1. ECB - Electronic Code Book

--> 가장 취약한 방식이라 실사용 x

장점 - 한 블록에 오류가 발생해도 해당 블록을 제외하고는 다른 블록에서 오류가 발생하지 않는다.

          (오류 증식 error propagation 없음)

        - 구조가 단순하고, 병렬화 용이하다.

단점 - 반복되는 평문은 반복되는 암호문을 초래하고 이는 공격자에게는 큰 힌트가 된다.

 

 

 

2. CBC - Cipher Block Chaining

 

첫번째 블록은 초기화 벡터 IV와  xor 연산 , 그 후 암호화 진행

암호화된 암호문은 다음 블록의 xor 연산에 이용 

--> error 발생시, 다음 블록에 영향 줌 (error propagation 존재)

--> 암호화 이전 단계의 결과로 다음 블록 암호화에 사용하여 암호화는 병렬화가 불가능

--> 복호화는 이미 존재하는 암호문을 다음 블록 복호화에 사용하기 때문에 복호화는 병렬화 가능

 

 

 

 

3. CFB - Cipher FeedBack

 

 

CBC모드와 유사하다.

--> 이전 블록이 다음 블록에 영향을 줌

--> CBC 와 마찬가지로 암호화는 병렬화 불가능, 복화는 병렬화 가능

 

 

 

 

4. OFB - Output FeedBack

 

CFB 와 구조, 특징이 거의 같다.

암/복호화 방식이 동일하여 구현이 용이하다.

암/복호화가 순차적으로 동작하지만, 모든 중간값을 미리 생성해둔다면 병렬화가 가능하다.

--> stream 암호와 구조가 유사하여 미리 생성해둔 키 스트림과 XOR 하는 것과 유사하다.

 

 

 

5. CTR - CounTeR

----> 가장 많이 쓰인다.

 

임의의 난수 nonce와 매 블록마다 1씩 증가하는 Counter를 결합하여 key로 만든다 --> 키스트림 생성이라고 볼 수 있다.

암/복호화 과정이 동일하여 구현이 용이하다.

각 단계가 독립적으로 수행될 수 있어 병렬처리가 가능하고, 임의의 순서대로 암/복호화할 수 있다.

 

 

 

 

 

 

 

 

 

728x90
profile

HeYStRanGeR

@HeYStRanGeR

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!