Shine's dev log
암호란 무엇인가? (암호의 원리와 공격유형) 본문
1. 암호의 원리
암호를 사용한 과정으로는 크게 암호화(Encryption)과 복호화(Decryption)을 생각해볼 수 있다.
암호화(Encryption)란 본래의 메시지 내용을 인코딩하여 그 의미를 없애는 과정이고
복호화(Decryption)란 암호화의 역과정이다.
이 관계를 수식으로는 C = E(P), P = D(C) = D(E(P)) 이렇게 나타낼 수 있다.
2. 키(Key)
암호화와 복호화시에 계속해서 등장하는 개념중 하나가 바로 키(Key)이다.
키는 암호화시에 사용되는 일련의 정보로서, 송신자와 수신자만 알고 있는 정보이다.
물론 키 없이도 암호화 알고리즘을 사용할 수 있지만(e.g. caesar cipher) 1) 비밀유지가 힘들고 2) 새로운 알고리즘을 만들기 어렵고 3) 알고리즘을 설명하기도 힘들다는 단점들이 있다.
키의 종류에는 대칭키(Symmetric Key)와 비대칭키(Asymmetric Key)가 있다.
1) 대칭키(Symmetric Key)알고리즘
- 암호화와 복호화에 같은 키를 사용.
- 대칭키는 외부에 노출되면 안되므로 private key나 secret key라고도 불린다.
- 대표적으로 DES와 AES가 있다.
- 키를 사전에 분배해야 하는데 이때 여러 문제점들이 발생할 수 있다.
- n명의 사람이 있을 경우 n(n-1)/2개의 키가 필요하다. -> 너무 많은 키가 필요..
- 한번 비밀키가 노출되면, 모든 메시지가 해독가능하고 가짜 메시지도 생성 가능하다.
2) 비대칭키(Asymmetric Key)알고리즘
- 암호화와 복호화에 다른 키를 사용.
- 암호화시에는 외부에 공개된 공개키(Public key)를 사용하고, 복호화시에는 수신자의 개인키(private key)를 사용한다.
- 대표적으로 RSA와 전자서명시 이용한다.
- 스트림 암호(바로바로 암호화)와 블록암호(블록단위로 암호화)로 나눌 수 있다.
3. 공격의 유형
1) Ciphertext only attack (암호문 단독 공격)
- 공격자가 굉장히 불리한 유형
- 오로지 암호문만을 가지고 평문이나 키를 찾는 과정 (암호화알고리즘은 알수도 있음)
- 만약 암호화 알고리즘을 안다면 모든 키를 대입해보는것 가능 (Brute Force Key Search)
2) Known plaintext attack (알려진 평문 공격)
- 암호문에 대응하는 일부 평문을 아는 상황
- 평문을 다 알지는 못하지만, 일부 알려진 평문과 암호문의 관계로부터 키와 전체평문을 추론하는 과정
- 평문 전체를 다 아는 경우도 포함
- 공격자가 키를 알아낸다면 같은키로 암호화된 모든 암호문은 복호화가능
3) Chosen plaintext attack (선택 평문 공격)
- 평문을 선택하면 그에 대응하는 암호문을 알 수 있는 상황
- 알려진 평문공격보다 훨씬 강력
- 세계2차대전시 미드웨이 반격때 실제 사용 ("AF"라는 암호문이 미드웨이인지 오아후인지 헷갈렸는데, 직접 미드웨이에서 평문을 보내고, 대응하는 암호문을 가로챔으로써 AF가 미드웨이인것을 알아냄)
4) Chosen ciphertext attack (선택 암호문 공격)
- 암호문을 선택하면 대응하는 평문을 얻을 수 있는 상황
- 공격자가 선택한 암호문에 대응하는 평문을 얻을 수 있을 뿐 아니라, 선택한 평문에 대응하는 암호문도 얻을 수 있는 상황이다.
- 굉장히 공격자에게는 유리한 조건이다.
앞서 살펴본 이 네가지 공격유형은 어쨌든 궁극적으로 키를 알아내는것이 목표이다.
또한, 제대로된 암호 시스템은 이 네가지 공격유형을 모두 버틸수 있어야 한다.
오늘 내용을 정리해보면,
1. 암호는 암호화와 복호화의 과정으로 운영된다.
2. 키를 취급하는 방법에 따라 대칭키와 비대칭키 암호로 나뉜다.
3. 공격의 유형에는 4가지가 있는데, 제대로된 암호시스템은 모두 버틸 수 있어야 한다.
본 내용은 공부하며 정리한 것으로 오류가 있을 수 있습니다.
'보안' 카테고리의 다른 글
RC4 암호 알고리즘 (0) | 2020.05.14 |
---|---|
AES 암호화 (0) | 2020.05.08 |
DES 암호화 (0) | 2020.05.07 |
블록암호(Block cipher)와 스트림암호(Stream cipher) (0) | 2020.05.06 |
치환암호와 전치암호 (0) | 2020.05.05 |