정보보안/암호학2009. 2. 23. 12:39

우리는 이전전에 블록암호와 스트림암호 방식이 있다고 배웠습니다
자, 이젠 블록암호에 대해 조금 깊게 들어가 보겠습니다
 
ㅁ 블럭암호 - 어느 특정 비트수의 '집합'을 한번에 처리하는 암호알고리즘
    ex) DES - 64bit / AES - 128bit(키와 헷갈리지 마세요~^^)
 
ㅁ 스트림암호 - 데이터의 흐름(스트림)을 순차적으로 처리해가는 암호 알고리즘
   ex) 일회용 패드
 
ㅁ 모드 - 평문이 긴 경우 블록단위로 반복하여 암호화하는 방법
    ㅇ ECB(Electric CodeBook mode)
    ㅇ CBC(Cipher Block Chaining mode)
    ㅇ CFB(Cipher-FeedBack mode)
    ㅇ OFB(Output-FeedBack mode)
    ㅇ CTR(CounTeR mode)
 
ㅁ ECB(Electric CodeBook mode) 모드
    ㅇ 구조 : 평문블럭을 암호화 한것이 그대로 암호문 블럭이 됨. -> 평문블럭 - 암호문 블럭 이라는 일대일 대응표를 갖게됨.
       * 패딩 - 마지막 평문 블럭이 블럭을 다 채우지 못하고 길이에 미치지 못할 때 적당한 길이의 비트열을 추가, 데이터를 블록길이에 맞게 채워넣는다(패팅 마지막 바이트에 마지막 블록에 몇바이트를 패딩시켰는지를 2진수로 표현)
    ㅇ 특징 : 기밀성이 낮다 -> 같은 값을 갖는 평문에 대해 패턴의 반복을 찾으면 암호가 해독될 수 있다.
    ㅇ 공격 : 공격자가 암호의 해독을 하지 않고도 평문 조작이 가능하다
                - 블록 순서를 바꿈 -> 복호화했을때 의도하지 않은 결과
                - 블럭 삭제 -> 대응하는 평문 블록도 삭제됨
                - 블럭 복제 -> 대응하는 평문도 복제됨


위에서 보면 평문은 그대로 키에 의해 암호화 된다.


복호화도 마찬가지.. 이것과 다른 모드의 차이를 한번 느껴보자~
 
ㅁ CBC(Cipher Block Chaining mode) 모드
    ㅇ 구조 
       - 최초의 평문 블럭 암호할 때 초기화 벡터(IV)를 평문과 XOR
         * 초기화 벡터 - 1단계 앞의 암호문블럭을 대신할 비트열로써, 공개된 값이어도 상관 없고, 암호화 때마다 다른 랜덤비트열 이용
       - 결과를 블럭암호 알고리즘에 키와 함께 들어가 암호문 생성
       - 다음 단계에서는 1단계 앞에서 수행되어 결과로 출력된 암호문 블록에 평문 블록을 XOR하고 나서 암호화를 수행한다
    ㅇ 특징
       - 평문 1, 2가 같더래도 이전의 암호문의 영향을 받아 암호화 하기 때문에 암호문 1, 2는 같지 않다(EBC단점 극복)
    ㅇ 단점
       - 암호화 시 평문이 파손되면 다음단계로의 파급이 계속 이어진다. 반면에 복호화는 암호문 블럭이 파손되면 두블럭만 영향
       - 비트가 누락되면 암호문 블럭 길이가 변해서 그 이후 암호문은 모두 복호화가 불가능해 진다(치명적)
    ㅇ 공격
       - 복호화시에 초기벡터에 대한 비트반전 공격이 가능하다
       - 공격은 공격자의 의도대로 공격이 이루어 져야함을 감안해 볼 때, 복호화 될 암호문에 대해서 변경시에 두 블록에 영향
    ㅇ 인증 - MAC코드로 블럭을 체크 / 마지막 블럭의 전부 혹은 일부를 MAC 코드로 사용한다.
    ㅇ 활용 - IPsec(인터넷 보안 제공 프로토콜), Kerberos ver 5


주의깊게 보셔야 할 부분은 평문이 초기벡터와 XOR 연산 후 암호 알고리즘에 의해 암호화 된 암호문이 그대로 내려간것과 그 것을 다시 다음 평문과 XOR 하여 암호알고리즘에 적용시키는 과정이라 할 수 있겠다~ 전 단계의 암호문으로 다음단계에 영향을 주는것이 포인트


복호화의 경우에는 마찬가지 암호문이 다음계에 영향을 준다는것을 염두해 두자. 그리고 암호화와 다르게 위에서 변조가 일어나도 파급은 해당블럭과 다음블럭까지만 이라는 것을 기억해 두자
 
ㅁ CFB(Cipher-FeedBack mode) 모드
    ㅇ 구조
         - 1단계 앞의 암호문 블럭을 암호 알고리즘의 입력으로 사용
            -> 여기서 지켜봐야 할 것은 평문을 암호화 하는것이 아니라는 것이다. 보다시피 평문은 전단계의 암호문 블럭을 암호화 시킨 값에 XOR만 취해주고 있다.
         - 복호화에서 "암호화 알고리즘" 사용, 형태도 똑같음(평문블록과 암호문 블록의 위치만 변화)
    ㅇ 특징
         - 초기화 벡터 사용(랜덤 비트열)
         - XOR하여 암호화 한다는 점에서 일회용 패드와 비슷
         - 키스트림 이용 : 암호 알고리즘(의사난수 생성기의 기능)에 의해 생성되는 비트열
    ㅇ 공격
         - 재전송 공격이 가능
            -> 전날 암호문 중 변조를 의도한 블럭을 획득해 놓는다 -> 다음날 보내지는 암호문 블록에 삽입한다 -> 삽입 시작부분만 에러, 뒤의 나머지 블럭은 정상적으로 복호화 되어버린다.



똑같은 구조이다. 주의할 것은 암호화/복호화 시 암호화 알고리즘을 이용한다는 것이고, 평문과 암호문 사이에는 XOR 연산이라는 점, 암호화 알고리즘이 키스트림을 생성하는 의사난수생성기처럼 이용되었다는 점, 그리고 구조가 암호화/복호화 구조가 쪽같다는것.
 
ㅁ OFB(Output-FeedBack mode) 모드
    ㅇ 구조
         - CFB와 비교해서 보면 다음 단계에 영향을 미치는 것이 1단계 앞의 암호문 블럭이 아닌 XOR 이전 단계의 암호 알고리즘 출력이다
    ㅇ 특징
         - 암호 알고리즘에 영향을 미치는 입력이 평문-암호문과 관계없이 파급됨
            -> 평문으로부터 암호문을 만들 때 암호알고리즘을 구동할 필요가 없이 XOR만 취해줌 => XOR연산 속도 빠름 => 키스트림을 미리 만들어 두면 고속으로 암호화 수행 / 키스트림 생성과 XOR 연산작업 병행 가능
    ㅇ 단점
         - 암호문 블록에 1비트 반전 발생 시, 복화화 할 때 얻게되는 해당 평문 블럭의 비트만 반전되어 있다


 
ㅁ CTR(CounTeR mode) 모드 -> 스트림암호
    ㅇ 구조
         - 1씩 증가해 가는 카운터를 암호화해서 키스트림을 생성
            => 마찬가지로 평문 / 암호문 블럭은 암호화 알고리즘에 독립적이다.
          - 결과값을 평문블럭과 XOR 연산
    ㅇ 특징
         - 암호화/복호화가 완전히 같은구조 -> 구현이 간단
         - 블록을 임의의 순서로 암호화/복호화 가능 -> 비표와 블럭번호로 금방 '카운터'를 구할 수 있음(CTR만의 특징)
         - OFB와 같은 스트림 암호의 일종. 단지 한단계 앞의 암호문 블럭 대신 CTR을 이용 
            * 카운터 = 비표와 블럭번호로 나누어져 블럭번호가 1씩 증가.
    ㅇ 단점
         - 암호문 블록에 1비트 반전 발생 시, 복화화 할 때 얻게되는 해당 평문 블럭의 비트만 반전되어 있다(OFB와 동일)
         - 키스트림의 1블럭을 암호화한 결과가, 암호화 전의 결과와 우연히 같다고 가정할 때 그 이후 키 스트림은 완전히 같은 값의 반복



 출처 : http://blog.naver.com/tkdgjs99/
Posted by Huikyun