Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

CIDY

[Cryptography] stage3_블록암호: 운영모드 본문

Hack/DreamHack(로드맵)

[Cryptography] stage3_블록암호: 운영모드

CIDY 2022. 7. 21. 02:08

DES의 경우 64비트를, AES의 경우 128비트를 한 블록으로 처리한다. UTF-8로 인코딩할 때, 알파벳 한 글자는 1바이트, 즉 8비트이다. -> DES는 알파벳 8글자, AES는 16글자를 한번에 암호화 할 수 있는 것이다.

 

하지만 일반적으로 사용되는 평문의 길이는 8글자나 16글자들보다는 훨씬 길다. 운영 모드(Mode of Operation)는 블록 암호가 다양한 크기의 데이터를 처리할 수 있도록 고안된 블록 암호 사용 방법이다.

 

블록 암호를 사용하는 서비스는 여러 종류의 운영 모드들의 장단점을 고려해 선택해야 한다.

 

 

*패딩(Padding)

블록 암호는 말 그대로 블록 단위로 암호화를 수행하므로 입력 길이가 블록 크기의 배수가 되어야 하지만 일반적으로는 그렇지 않다. -> 패딩을 통해 평문의 크기가 블록 크기의 배수가 되도록 만들어줘야 한다. 

 

패딩된 암호문을 복호화할 땐, 복호화된 평문에서 패딩을 제거해야 원래 평문을 얻을 수 있음 -> 패딩된 암호의 수신자는 어떤 패딩이 적용되었는지를 알 필요가 있다.

 

많이 사용되는 패딩 기법으로 비트 패딩(Bit Padding), 바이트 패딩(Byte Padding), PKCS#7패딩이 있다.

 

 

비트 패딩: 마지막 블록에서 블록의 배수에 모자란 만큼의 비트 중 최상위 비트를 1로, 나머지는 모두 0으로 채우는 패딩 기법이다. -> 수신자는 복호화한 평문의 마지막 비트에서부터 처음으로 1이 나올때까지를 패딩으로 인식하여 제거하면 된다.

 

단, 위 방식대로라면 평문의 크기가 정확히 블록의 배수여서 패딩이 필요없을 때, 수신자가 뒤쪽 일부분을 패딩으로 오인할 수 있다는 문제점이 발생한다. -> 평문 크기가 블록 크기의 배수라면, 패딩으로 한 블록을 추가한다. (1000...000추가)

 

 

바이트 패딩(ANSI X.923): 바이트 단위로 패딩을 수행하는 기법으로, 여러 종류가 있지만 ANSI X.923의 경우 마지막 블록의 남는 바이트를 임의의 값(보통 0)으로 채운 뒤, 마지막 바이트에 패딩의 길이를 기록한다. (기록 바이트 역시 패딩 1바이트로 카운트)

 

A3 B2 91 81 50 23 00 00 14 50 00 00 00 00 00 04

 

위와 같은 예시 상황의 경우 마지막 바이트의 값이 4이므로, 00 00 00 04가 패딩된 부분이다. -> 이 방식 역시 평문 크기가 블록의 배수일 때 수신자가 오인할 수 있으므로, 한 블록 패딩을 추가한다.

 

 

바이트 패딩(PKCS#7): PKCS는 (Public-Key Cryptography Standard) 공개키 암호의 표준 문서로, PKCS#7는 그중 7번째 문서이다. 이 기법은 추가할 패딩의 바이트 크기만큼 마지막 블록을 채우는 것이다. 

 

A3 B2 91 81 50 23 00 00 14 50 00 00 04 04 04 04

 

물론 얘도 평문이 블록 크기의 배수라면 한 블록 (08 08 08 08 08 08 08 08)을 추가한다.

 

 

 

*ECB모드

블록 암호로 평문을 암호화할 때, 평문은 패딩을 거쳐 여러 블록으로 나뉜다. 그리고 각 블록은 암호의 운영 모드에 따라 암호화된다. ECB(Eletronic Code Book)은 가장 간단한 운영 모드로, 각 블록은 모두 같은 키를 이용해 암호화된다. 

 

각 블록이 독립적으로 암호화되기에 여러 블록을 병렬적으로 암호화 할 수 있다는 장점이 있지만, 다른 운영모드에 비해 암호학적 안전성이 부족하다는 단점이 있다.

 

ECB모드에서 같은 블록은 같은 암호문으로 암호화된다. -> 암호문에서 평문의 정보를 획득하거나 리플레이 공격(replay attack)을 수행하는 것이 가능하다.

 

예를 들어 이미지를 픽셀 단위로 ECB암호화 할 경우, 같은 픽셀은 암호화해도 모두 같다. -> 따라서 암호화된 이미지에서 원본의 패턴 정보가 그대로 드러나게 된다. -> 암호문으로부터 평문의 특성을 유추하기 어려워야 한다는 혼돈 성질이 약하다. 

 

EBC

 

 

재전송 공격: 어떤 데이터를 재전송하여 시스템이 의도치 않은 행동을 하게 하는 것을 말한다.

 

Alice send 10000$ to Bob이라는 24바이트 평문을 4바이트 블록 암호로 암호화하여 a1ijc1ox0fdz0d1vforca3je를 은행에 전송하고, 은행은 이를 해석해서 10000$를 Bob의 계좌로 송금한다고 하자. 

 

여기서 Bob이 Alice가 암호화한 평문과, 은행에 전송된 암호문을 알 수 있다면, Bob은 평문의 0000이 암호문에서의 0d1v라는 사실을 알 수 있다. -> Bob이 a1ijc1ox0fdz0d1v0d1vforca3je 라는 암호문을 생성하고 은행에 전송하게 된다면, 은행은 100000000원을 Bob에게 송금하게 되는 것이다.

 

 

 

 

*CBC모드

Cipher Block Chaining모드는 어떤 블록을 암호화하기 전, 이 블록을 직전 블록의 암호문과 XOR한다. 평문의 첫 번째 블록은 이전 블록이 존재하지 않으므로, 초기 벡터(IV, Initialized Vector)라고 불리는 임의의 데이터와 XOR한다. 

 

이 모드를 사용하면 각 블록이 서로이 암호화에 영향을 미치므로, 같은 블록이라 하더라도 전체 평문과 IV에 따라 암호화 결과가 상이하다. 

 

송신자는 초기 벡터를 암호문의 0번째 블록 C0로 전송한다. 

 

암호화-> ,

복호화-> ,

 

 

 

 

 

CBC

 

CBC Bit-Flipping Attack: 공격자가 초기 벡터를 원하는 값으로 조작해 복호화된 평문의 첫번째 블록을 조작하는 공격을 말한다. 

 

첫 번째 암호문 블록의 복호화 과정은 아래와 같다. 

 

P1 ​= Dk​(C1​) ⨁ IV

 

공격자는 초기 벡터를  IV' =

 

=

=

= P1`

 

 

 

 

 

 

 

 

CTR