ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 블록 암호 운용 방식 (block cipher modes of operation)
    보안 & 보안 2017. 2. 18. 13:45

    블록 암호란?

    블록 암호(block cipher)란 기밀성있는 정보를 정해진 블록 단위로 암호화 하는 대칭키 암호 시스템입니다. 만약 암호화하려는 정보가 블록 길이보다 길 경우에는 특정한 운용 모드가 사용됩니다.(예, ECB, CBC, OFB, CFB, CTR)

    스트림 암호란?

    스트림 암호(stream cipher)는 대칭 키 암호의 구조 중 하나로, 유사난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가집니다. 일반적인 스트림 암호는 유사난수를 1비트 단위로 생성하고, 생성된 값과 암호화하려는 각 값을 XOR하여 1비트의 암호화된 자료를 얻습니다. 즉 키의 길이가 유동적입니다. 스트림 암호는 일회용 난수표(OTP)를 유사난수로 대체한 것으로 볼 수 있습니다. 스트림 암호는 하드웨어 구현이 간편하며 속도가 빠르기 때문에 무선 통신 등의 환경에 주로 사용됩니다. 

    블록 암호 운용 방식이란?

    블록 암호 운용 방식은 하나의 키 하에서 블록 암호를 반복적으로 안전하게 이용하게 하는 절차를 말합니다. 블록 암호는 특정한 길이의 블록 단위로 동작하기 때문에, 가변 길이 데이터를 암호화하기 위해서는 먼저 이들을 단위 블록들로 나누어야 하며, 그리고 그 블록들을 어떻게 암호화할지를 정해야 하는데, 이때 블록들의 암호화 방식을 운용 방식으로 부릅니다. 운용 방식은 주로 암호화와 인증을 목적으로 정의되어왔습니다. 역사적으로 암호화 방식은 다양한 시나리오의 데이터 수정 측면에서 오류 증식 특성과 관련하여 널리 연구되어 왔습니다. 나중에 무결성 보호는 암호화와는 완전히 별개로 다루게 되었습니다. 현대의 일부 운용 방식은 암호화와 인증을 효율적인 방식으로 병합해 놓고 있는데, 이를 인증된 암호 방식(authenticated encryption) 방식으로 부릅니다.

    운용 방식이 일반적으로 대칭형 암호화와 관련하는 것이 일반적이지만 RSA와 같은 공개 키 암호 방식 원칙에도 적용할 수 있습니다. (길이가 더 긴 메시지의 공개 키 암호 방식은 일반적으로 복합 암호 방식(hybrid encryption)이라 부름)

    종류

    ECB

    전자 코드북(electronic codebook, ECB)은 운용 방식 중 가장 간단한 구조를 가지며, 암호화하려는 메시지를 여러 블록으로 나누어 각각 암호화하는 방식으로 되어 있습니다.

    전자 코드북은 모든 블록이 같은 암호화 키를 사용하기 때문에 보안에 취약합니다. 만약 암호화 메시지를 여러 부분으로 나누었을 때 두 블록이 같은 값을 가진다면, 암호화한 결과 역시 같습니다. 이것은 공격자가 비슷한 메시지를 반복적으로 암호화하는 반복공격에도 취약한 성질을 가집니다.

    요약

    • 가장 단순한 모드로 블록단위로 순차적으로 암호화 하는 구조
    • 한개의 블록만 해독되면 나머지 블록도 해독이 되는 단점 (Brute-Force Arttack, Dictionary Attack)
    • 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 알기 위해서 Padding을 해야함
    • error propagation : 각 블록이 독립적으로 동작하므로 한블록에서 에러가 난다고 해도 다른 블록에 영향을 주지 않음. 해당 블록까지 에러 전파.

    CBC

    암호 블록 체인 (cipher-block chaining, CBC) 방식은 1976년 IBM에 의해 개발되었습니다. 각 블록은 암호화되기 전에 이전 블록의 암호화 결과와 XOR되며, 첫 블록의 경우에는 초기화 벡터가 사용됩니다. 초기화 벡터가 같은 경우 출력 결과가 항상 같기 때문에, 매 암호화마다 다른 초기화 벡터를 사용해야 합니다.

    CBC 방식은 현재 널리 사용되는 운용 방식 중 하나입니다. CBC는 암호화 입력 값이 이전 결과에 의존하기 때문에 병렬화가 불가능하지만, 복호화의 경우 각 블록을 복호화한 다음 이전 암호화 블록과 XOR하여 복구할 수 있기 때문에 병렬화가 가능합니다.

    요약

    • 블록 암호화 운영 모드 중 보안 성이 제일 높은 암호화 방법으로 가장 많이 사용
    • 평문의 각 블록은 XOR연산을 통해 이전 암호문과 연산되고 첫번째 암호문에 대해서는 IV(Initial Vector)가 암호문 대신 사용. 이 때, IV는 제 2의 키가 될 수 있음
    • 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 얻기 위해서 Padding을 해야함
    • 암호화가 병렬처리가 아닌 순차적으로 수행되어야 함. (단점)
    • error propagation : 깨진 암호문의 해당블록과 다음블록의 평문까지 영향을 미치게 됨

    CFB

    암호 피드백(cipher feedback, CFB) 방식은 CBC의 변형으로, 블록 암호를 자기 동기 스트림 암호로 변환합니다. CFB의 동작 방식은 CBC와 비슷하며, 특히 CFB 암호 해제 방식은 CBC 암호화의 역순과 거의 비슷합니다.

    요약

    • 블록 암호화를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같음 (패딩이 필요 없음)
    • 최초의 키 생성 버퍼로 IV가 사용되며, 이때 IV는 제2의 키가 될수 있음
    • 스트림의 기본단위를 bit단위로 설정할 수 있으며, bit단위에 따라 CFB8~CFB128로 쓰임
    • 암호화, 복호화 모두 암호화로만 처리할 수 있음
    • CBC모드와 마찬가지로 암호화는 순차적이고, 복호화는 병렬적으로 처리할 수 있음
    • error propagation : CBC모드와 마찬가지로 한 암호문블럭의 에러는 해당평문블록과 다음 평문블록, 이렇게 총 2개의 블록에 전파됨

     

    OFB

    출력 피드백(output feedback, OFB)은 블록 암호를 동기식 스트림 암호로 변환합니다. XOR 명령의 대칭 때문에 암호화와 암호 해제 방식은 완전히 동일합니다.

    요약

    • 블록 암호화를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같음 (패딩이 필요없음)
    • 암호화 함수는 키 생성에만 사용되며, 암호화 방법과 복호화 방법이 동일해 암호문을 한번 더 암호화하면 평문이 나옴 (복호화시에 암호화)
    • 최초의 키생성 버퍼로 IV가 사용되며, 이 때 IV는 제2의 키가 될수 있음
    • 스트림의 기본 단위를 Bit단위로 설정할 수 있으며, Bit단위에 따라 OFB8~OFB128로 쓰임
    • error propagation : 해당블록까지만 대응되는 한 블록에만 영향을 미치므로, 영상이나 음성과 같은 digitized analog신호에 많이 사용됨

    CTR 

    카운터(Counter, CTR) 방식은 블록 암호를 스트림 암호로 바꾸는 구조를 가집니다. 카운터 방식에서는 각 블록마다 현재 블록이 몇 번째인지 값을 얻어, 그 숫자와 nonce를 결합하여 블록 암호의 입력으로 사용합니다. 그렇게 각 블록 암호에서 연속적인 난수를 얻은 다음 암호화하려는 문자열과 XOR합니다. 카운터 모드는 각 블록의 암호화 및 복호화가 이전 블록에 의존하지 않아서 병렬적으로 동작하는 것이 가능합니다. 혹은 암호화된 문자열에서 원하는 부분만 복호화하는 것도 가능합니다.

    요약

    • 블록을 암호화할 때마다 1씩 증가해 가는 카운터를 암호화 해서 키 스트림을 만듬. 즉 카운터를 암호화한 비트열과 평문블록과의 XOR를 취한 결과가 암호문 블록이 됨
    • CTR모드는 OFB와 같은 스트림 암호의 일종
    • CTR모드의 암복호화는 완전히 같은 구조가 되므로 구현이 간단함 (OFB와 같은 스트림 암호의 특징)
    • CTR모드에서는 블록의 순서를 임의로 암/복호화 할 수 있음 (비표와 블록번호로부터 카운터를 구할 수 있기 때문)
    • 블록을 임의의 순서로 처리 할 수 있다는 것은 처리를 병행 할 수 있다는 것을 의미 (병렬처리 가능)
    • error propagation : 각 블록이 병렬처리 되므로 같은 블록내에서만 이루어짐


    댓글