8. 공격 유형과 공격 모델
1. 공격 유형
수동적 공격(암호문을 만드는데 사용한 비밀키를 찾아 내는 것)
- 도청 : 전송되는 메시지를 도중에 가로챈다.
- 트래픽분석 : 전송되는 메시지의 길이, 전달빈도 등을 관측해서 메시지의 특성을 파악하는 것
능동적 공격(의도적으로 메시지 내용을 조작)
- 메시지 변조 : 메시지의 순서를 바꾸거나 메시지의 일부분을 다른 메시지로 대체
- 메시지 삭제 : 서비스 거부 공격(DoS & DDoS)
- 위장 공격 : 불법적 침입자가 정당한 송신자로 가장해 메세지 보냄
- 재전송 공격 : 송수신자간의 도청 내용을 재생하여 다시 전송하는 것
2. 공격 모델
암호 공격 모델
- 암호문 단독 공격(Ciphertext-Only Attack)
- 알려진 평문 공격(Known-Plaintext Attack)
- 선택 평문 공격(Chosen-Plaintext Attack)
- 선택 암호문 공격(Chosen-Ciphertext Attack)
(1). 암호문 단독 공격(COA, Ciphertext-Only Attack)
- 앨리스와 밥이 데이터를 암호화한 후 공격자가 볼수 있는 것은 암호문 자체뿐이다.
- 암호문 자체를 메시지를 복호화하려는 시도를 암호문 단독 공격이라고 한다.
- 이 공격은 가장 정보가 적으므로 가장 어려운 유형의 공격이다.
(2). 알려진 평문 공격/기지 평문 공격(KPA, Known-Plaintext Attack)
- 공격자가 평문(일부)과 암호문을 모두 알고 있는 공격이다.
- 이 공격의 최종 목표는 복호키를 찾는 것이다.
- 만약 공격자가 키를 발견한다면, 앨리스와 밥이 같은 키를 교환한 모든 다른 메시지도 복호화 할 수 있다.
- 알려진 평문 공격은 암호문 단독 공격보다 휠씬 강력하다. 공격자는 암호문 단독인 경우보다는 더 많은 정보를 얻는다.
(예) 평문(일부)과 암호문을 알수 있는 경우의 예
- 앨리스가 휴가를 가 있는 동안 모든 수신 메일에 대해 '휴가 중입니다.'라는 자동 응답 이메일을 보낸다고 가정하자.
- 공격자는 앨리스에게 이메일을 보내 자동 응답 메시지 사본을 얻을 수 있다. 밥이 앨리스에게 이메일을 보낼 때 자동 응답기가 역시 자동 메일을 발송하는데, 이 때 메시지가 암호화 된다.
- 일반적으로, 앨리스가 공격자를 포함해 같은 메시지를 대다수 사람에게 보낼 때, 공격자는 평문과 다른 사람에게 보낸 사본의 암호문을 가진다.
(3). 선택 평문 공격(CPA, Chosen-Plaintext Attack)
- 공격자가 평문을 선택할 수 있는 형태인데, 알려진 평문 공격보다 휠씬 강력한 유형의 공격이다.
- 이런 경우 공격자는 암호 시스템을 공격하기 쉽게 특별히 준비된 평문을 선택한다. 공격자는 얼마든지 평문을 선택해서 해당하는 암호문을 얻을 수 있다.
(예) 평문(전체)과 암호문을 알수 있는 경우의 예
- 앨리스는 상당수 외부 자료에서 정보를 얻어 암호화된 형태로 밥에게 그 정보를 포워딩한다고 가정해 보자.
- 공격자는 앨리스가 밥에게 포워딩할 것이라는 사실을 알고, 앨리스가 구하는 외부 자료를 임의로 제공하고 앨리스가 밥에게 보내는 암호화된 이메일을 도청한다.
- 공격자의 선택된 평문이 암호화되어 밥에게 전달되는 것을 확인할 수 있는 것이다.
(4). 선택 암호문 공격(CCA, Chosen-Ciphertext Attack)
- 선택 암호문이란 용어는 부적절한 명칭이다. 실제로는 선택 암호문 평문 공격이라고 불러야 할것 같다.
- 선택 평문 공격에서 공격자는 평문 값을 선택했다. 선택 암호문 공격에서는 평문 값과 암호문 값 모두를 선택한다.
- 선택 암호문 공격에서는 평문 값과 암호문 값 모두를 선택한다. 공격자가 선택하는 모든 평문에 대응하는 암호문을 얻고 공격자가 선택한 각 암호문에 대해 대응하는 평문을 얻는다.
- 선택 암호문 공격은 선택 평문 공격보다 훨씬 강력하다. 목표는 역시 키를 알아내는 것이다. 키를 이용해 공격자는 다른 암호문을 해독할 수 있다.
요점정리
정보보호의 목표
* CIA(비밀성, 무결성, 가용성) + 인증, 부인방지
암호시스템의 강도을 높일 수 있는 중요한 요소
* 암호 키
* 암호 키 생성시 - random
* 암호 키 길이 - bit number
암호기술의 종류
* 대칭키 암호
* 블록 암호(EX:AES)
* 스트림 암호(EX:RC4)
* 비대칭키 암호
* 공개키 암호(pub -> pri)
* 공개키 서명(전자서명)(pri -> pub)
* 해시함수 -> MAC, 전자서명
정보보호의 위협과 방지 기술
* 암호화 -> 비밀성, 무결성, 인증
* 해시 함수 -> 무결성
* 디지털 서명/인증서 -> 부인 방지, 인증, 무결성
* 메시지 인증코드 -> 인증, 무결성
암호화 시스템에 대한 공격 방법
* 암호문 단독 공격(Ciphertext-Only Attack)
* 알려진 평문 공격(Known-Plaintext Attack)
* 선택 평문 공격(Chosen-Plaintext Attack)
* 선택 암호문 공격(Chosen-Ciphertext Attack)
[실습] 뒤집기 암호 만들기
간단한 암호화 과정 이해하기
- 평문
- 암호화 시스템(암호 알고리즘) + KEY
- 암호문
키(Key) | V 평문(plaintext) ---> 암호시스템 ---> 암호문(ciphertext) 암호 알고리즘 input('abcd') output('dcba') |
reverseCipher.py
import random
import sys
import transposition
def main():
random.seed(42) # 무작위 랜덤 함수의 초기화를 위한 시드값을 상수로 설정 한다.
for i in range(20): # 20회 테스트 한다.
# 테스트용 무작위 메세지를 생성한다.
# 생성된 메세지는 길이가 임의의 값이 될것이다.
message = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' * random.randint(4, 40)
# plaintext 문자열을 뒤섞기 위해 리스트를 만든다.
message = list(message)
# 리스트의 요소 뒤섞기
random.shuffle(message)
# 리스트를 다시 문자열로 전환
message = ''.join(message)
print("Test #%s: |%s|" % (i+1, message[:50]))
# 각 message에 대해 가능한 모든 키 값을 확인한다.
for key in range(1, int(len(message)/2)):
encrypted = transposition.transposition_cipher_encrypt(message, key)
decrypted = transposition.transposition_cipher_decrypt(encrypted, key)
# 원래 message의 복호화된 message가 틀리면 에러 메세지를 출력하고 종료
if message != decrypted:
print('Mismatch with key %s and plaintext %s' % (key, message))
print('Decrypted as: ' + decrypted)
sys.exit(1)
print('Transposition cipher test passed.')
if __name__ == '__main__':
main()
'현대 암호학' 카테고리의 다른 글
[현대 암호학] 03-4. 전치 암호와 치환 암호 (0) | 2021.06.21 |
---|---|
[현대 암호학] 03-2. 단일 치환 암호 (0) | 2021.06.18 |
[현대 암호학] 03. 암호의 역사(고전 암호학) - 1. 시저(Caesar) 암호 (0) | 2021.06.18 |
[현대 암호학] 02. 암호의 세계(1) (0) | 2021.06.18 |
[현대 암호학] 01. 정보 보호 개요 (0) | 2021.06.18 |