우리는 이전전에 블록암호와 스트림암호 방식이 있다고 배웠습니다
자, 이젠 블록암호에 대해 조금 깊게 들어가 보겠습니다
ㅁ 블럭암호 - 어느 특정 비트수의 '집합'을 한번에 처리하는 암호알고리즘
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/
자, 이젠 블록암호에 대해 조금 깊게 들어가 보겠습니다
ㅁ 블럭암호 - 어느 특정 비트수의 '집합'을 한번에 처리하는 암호알고리즘
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/