Computer Science/Cryptography

[Cryptography] 패딩과 운영모드(ECB, CBC, CTR, CFB, OFB)

LeeJaeJun 2023. 12. 27. 00:37
728x90
반응형

- 패딩

평문의 길이가 블록 크기의 배수가 되도록 평문의 끝에 데이터를 추가하는 기법입니다.

  • 비트패딩(Bit Padding)마지막 블록에서 평문이 채우지 못하는 비트 중 최상위 비트를 1로 설정하고, 나머지는 모두 0으로 채우는 패딩 기법입니다.  평문의 크기가 정확히 블록 크기의 배수일 때, 수신자가 메세지의 일부를 패딩으로 오인하게 되는 문제가 있기에 이를 막기 위해 비트 패딩을 적용할 때는 평문의 크기가 블록 크기의 배수이면, 패딩으로 한 블록을 추가합니다. ex) 평문이 1001 1011 1011 1000 이라면 끝의 1000을 패딩이라고 착각하고 평문 복구 시 지워버릴 수 있기 때문에 오해가 생기지 않도록 이런 경우에는 1001 1001 1011 1000 1000 0000 0000 0000 과 같이 한 블록을 추가합니다.
  • 바이트 패딩(Byte Padding): 바이트 단위로 패딩을 수행하는 기법. 
    • ANSI X.923:  마지막 블록의 남는 바이트를임의의 값(일반적으로 0)으로 채우고, 마지막 바이트에 패딩의 길이를 기록합니다. ex) 11 12 33 01 00 00 00 02이면 마지막 바이트 값이 2이므로 마지막 두 바이트(00 02)가 패딩. 평문의 크기가 블록크기의 배수이면 마지막에 한 블록을 패딩으로 추가합니다.
    • PKCS#7:  PKCS(Public-Key Cryptography Standard)는 공개키 암호의 표준 문서로서, 그중 7번째 문서인 PKCS#7은 AES와 같은 블록 암호의 패딩 기법을 제시하고 있습니다. PKCS#7에 소개된 패딩 기법은 추가할 패딩의 바이트 크기로 마지막 블록을 채우는 패딩 기법입니다. ANSI X.923과 다르게 남는 바이트를 마지막 바이트 값(패딩 길이)로 모두 채웁니다. ex) 11 12 33 01 00 00 02 02이면 마지막 바이트 값이 2이므로 마지막 두 바이트(02 02)가 패딩. 평문의 크기가 블록크기의 배수이면 마지막에 한 블록을 패딩으로 추가합니다. (08 08 08 08 08 08 08 08) -> 한 블록이 1바이트면 길이가 8이기 때문.

 

- 운영모드(Operation Mode)

여러 블록의 평문을 암호화하는 방법입니다.

  • ECB(Electronic Code Block): 각 평문 블록을 모두 같은 키를 이용하여 독립적으로 암호화하는 방법. 병렬 처리가 가능하지만, 평문의 패턴이 암호문에 나타나므로 혼돈속성이 약하며, 재전송 공격(Reply Attack)에 취약합니다.
  • CBC(Cipher Block Chaining): 현재 블록을 직전블록의 암호화 결과와 XOR하고, 암호화합니다. 각 블록의 암호화 과정에 이전 블록과 IV(Initialization Vector, 초기 벡터)(임의의 데이터임)가 영향을 주므로, 같은 평문 블록도 매번 다르게 암호화됩니다. 공격자가 IV를 조작하여 평문의 첫 번째 블록을 조작할 위험이 있으므로 송신자는 IV의 무결성을 보장하여야 합니다.
  • CTR(Counter): 임의의 난수(Nonce)와 평문 블록의 인덱스를 결합하고, 이를 블록 암호에 입력하여 키를 생성한다. 암호문의 블록은 이 키를 평문 블록과 XOR하여 생산한다. 병렬 처리가 가능하며, 다른 운영모드에 비해 구현이 간편하다. (Ek는 블록 암호)
    • 암호화 : Ci=Pi⨁Ek(nonce || counter)
    • 복호화 : Pi=Ci⨁Ek(nonce || counter)
  • CFB(Cipher Feedback): 암호 피드백(cipher feedback, CFB) 방식은 CBC의 변형으로, 블록 암호를 자기 동기 스트림 암호로 변환합니다. CFB의 동작 방식은 CBC와 비슷하며, 특히 CFB 암호 해제 방식은 CBC 암호화의 역순과 거의 비슷합니다.
  • OFB(Ouput Feedback): 블록 암호를 동기식 스트림 암호로 변환합니다. XOR 명령의 대칭 때문에 암호화와 암호 해제 방식은 완전히 동일합니다.
  • GCM(Galois/Counter Mode): 현재 네트워크 통신에서 많이 사용합니다.

 

- 재전송 공격

어떤 데이터를 재전송하여 시스템이 의도치 않은 행동을 하게 하는 것을 재전송 공격(Replay Attack)이라고 합니다.

ex) "김씨에게 이씨가 10000 원을 송금한다."라는 평문을 암호화하였을 때 0000이 예를 들어 e02d로 암호화 된다고 하면 나머지 암호화 된 부분은 그대로 두고 e02d 뒤에 e02d를 붙여서 은행에 암호문을 전송하면 은행 측에서 평문으로 바꾸었을 때 "김씨에게 이씨가 100000000 원을 송금한다."가 됩니다.

 

- CBC Bit-Fliiping Attack

 

공격자가 초기 벡터를 원하는 값으로 조작하여 복호화된 평문의 첫 번째 블록을 조작하는 공격입니다.

 

공격자는 초기 벡터를 IV′=P1⨁P1′⨁IV로 조작하여 첫 번째 평문 블록을 P1′으로 조작할 수 있습니다.

 

Dk(C1)⨁IV′

=(P1⨁IV)⨁IV

=(P1⨁IV)⨁P1⨁P1′⨁IV -> ⨁. XOR을 같은 것을 두 번하면 원래대로 돌아오는 성질이용.

=P1′

 

 

ex) "김씨에게 이씨가 10000 원을 송금한다."라는 평문을 암호화하였을 때 최씨가 이 통신을 중간에 가로채서 IV' = "김"⨁"최"⨁IV로 IV를 IV'으로 치환하고, 암호문을 재구성하여 은행으로 전송합니다. 은행에서 복호화하면 "최씨에게 이씨가 10000 원을 송금한다."가 됩니다.

728x90
반응형