ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 블록암호 모드(ECB, CBC, CTR)
    전공/컴퓨터보안 2020. 6. 5. 14:02

    스트림암호를 암호화하는 방식은 간단하다.

    평문 길이만큼의 키 길이를 생성해 XOR 연산을 하는 것이다.

    그렇다면, 블록암호는 어떻게 할까?

    블록암호는 스트림암호와 달리 여러 블록의 조합으로 이루어졌기 때문에 스트림 암호화하는 방식을 쓸 수는 없다.

    블록암호를 하는 방식은 크게 세 가지로 나뉜다.

    1. ECB

    ECB(Electric CodeBook)를 한글로 풀어 쓰면 '전자 코드북'이다.

    코드북과 비슷한 기능을 함을 유추할 수 있다. 구체적으로 설명하자면,

    키 K가 동일할 때 동일한 평문 블록은 동일한 암호문 블록으로 바뀐다는 소리다.

     

    ECB 방식은 블록을 독립적으로 암호화한다.

    그만큼 직관적이고 단순하다. 그렇기 때문에 치명적인 단점이 존재한다.

    트루디가 암호문을 보고 실제 뜻을 유추할 수는 없겠지만 최소한 동일한 블록이라는 사실을 알 수가 있게 된다.

     

    왼쪽의 사진을 ECB 모드를 사용하여 암호화했을 때 오른쪽의 그림이 나오게 된다.

    분명 변환은 되었지만 여자 아이가 있다는 사실은 알 수 있다.

    2. CBC

    CBC(Cipher Block Chaining)는 ECB의 단점을 보완하기 위해 만들어진 모드다.

    이름을 풀어쓰면 암호화된 블록이 서로 체이닝, 즉 연결되어있다는 뜻이다.

    CBC는 암호화할 때 이전 블록을 암호화한 블록을 암호화하는 데 사용한다.

    ECB 모드의 암호화, 복호화 방식

    공식은 위와 같다.

    n번째 블록을 암호화할 때 n-1번째 블록을 암호화한 블록과 XOR 연산을 하는 것이다.

    저기서 IV는 초기화 벡터(Initialization Vector)라고, 첫 블럭의 암호화를 할 때 필요하다.

    첫 블럭을 암호화할 때는 암호화한 블록이 존재하지 않기 때문이다.

    IV는 비밀은 아니지만 반드시 랜덤으로 선택되어야 한다.

    암호화를 할 때는 평문블록과 이전암호블록을 XOR 연산한 뒤, 키 K를 통해 암호화 를 하고

    복호화를 할 때는 암호블록과 키 K로 복호화를 한 뒤 이전암호블록과 XOR 연산을 한다.

    CBC는 무결성을 검증하기 위한 코드인 MAC(Message Authentiction Code)에도 사용된다.

    CBC로 구한 암호문 블록의 가장 마지막 부분을 MAC으로 지정해 암호문을 보낼 때 MAC도 같이 보내는 것이다.

     

    CBC를 MAC으로 활용

    이게 어떻게 무결성(비인가된 사람의 정보를 변경하는 행위를 막음)이 증명이 되냐면

    만약 평문 P3을 트루디가 X로 변경했다고 치자.

    그렇다면 잘못된 C3가 생성되고, 잘못된 C3는 잘못된 C4, 잘못된 C5, ... 잘못된 Cn-1을 연쇄적으로 생성하게 된다.

    결론적으로 어떠한 부분의 평문 블록값을 바꾸더라도 MAC의 값이 기존의 값과 변경되어 값이 바뀌었음을 알아차릴 수 있는 것이다.

    3. CTR

    CTR(CounTeR)는 블록 암호를 스트림 암호로 바꿔주는 모드다.

    이름대로 암호화를 할 때 몇 번째 블록인지 세어주는 카운터가 들어간다.

    CTR 모드의 암호화, 복호화 방식

    CBC 모드와 형태가 유사하다.

    CBC와의 공통점은 초기화 벡터인 IV가 쓰인다는 점이고,

    차이점은 CTR은 IV가 모든 블록의 암호화에 다 쓰인다는 점이다.

    그리고 XOR 연산의 피연산자가 다르고 이전 암호블록이 들어가지 않는 대신 카운터가 들어간다.

    댓글

Designed by Tistory.