(암호학) 002. 공격자와 암호의 분류

공격자와 암호의 분류

1. 암호 공격

암호는 왜 필요할까?

보호해야할 내용을 탈취하고자 하는 공격자를 방어하기 위해서이다.

암호문을 평문으로 바꾸는 것은 두 종류가 존재하는데,

정당한 수신자가 암호문을 평문으로 바꾸는 것은 복호화 이지만

공격자가 암호문으로부터 평문이나 키를 탈취하려는 시도를 암호분석 또는 암호공격 이라고 한다.

공격자가 암호문을 분석하는 방법은 아래와 같다.

1. 전수조사

일종의 Brute Force 방법론이다.

평문을 암호화할 수 있는 모든 키 또는 모든 경우의 수에 대하여 조사하는 방법으로,

모든 경우의 수를 조회하기때문에 가장 확실한 방법이라고 볼 수 있다.

하지만 컴퓨터를 사용한다고해도 경우의 수가 너무 많기에 실현 가능성이 떨어지는 방법이다.

2. 통계적 분석

각 나라의 언어에 사용하는 문자는 각자 고유한 출현빈도를 가지고 있다.

이를 근거로 암호문을 공격하는 방법이다.

3. 수학적 분석

수학적인 이론을 이용하여 암호문을 공격하는 방법이다.

위의 분석 방법들을 이용하여 암호문을 공격하는 것은 크게 세 종류로 분류할 수 있다.

  • 암호문 단독공격 : 부당한 방법으로 탈취한 암호문을 이용하여 평문을 찾는다.
  • 알려진 평문공격 : 일부 암호문에 대한 평문을 알고 있을때, 이를 이용하여 복호화키를 찾는다.
  • 선택된 평문공격 : 특정 평문을 자유롭게 선택하여 이에 대응하는 암호문을 얻은 경우, 이를 이용하여 복호화키는 찾는다.

2. 암호의 분류

암호들도 크게 세 종류로 분류할 수 있다.

2.1. 키의 형태에 따른 구분

암호화에 사용하는 키를 비밀로 하느냐, 공개하느냐에 따라서 비밀키 방식공개키 방식 으로 구분할 수 있다.

비밀키 방식은 복호화 과정이 암호화 과정의 역산이므로, 암호화 키와 복호화 키가 동일하다는 특징이 있다.

키가 동일하기때문에, 송신자와 수신자는 통신 전에 이미 비밀키를 공유하고 있어야 한다.

공개키 방식은 암호화 키는 공개하고, 복호화 키는 비밀로 하는 방식을 뜻한다.

이 공개키와 비밀키가 한 쌍으로, 비밀키는 사용자가 안전하게 보관하여 외부로 반출되지않도록 한다.

공개키 방식에서는 송신자와 수신자가 사전에 키를 공유할 필요도 없기때문에 불특정 다수 사용자 간에도

별도의 준비없이 암호 통신망을 구축할 수 있다.

비밀키
암호화와 복호화의 사용되는 한 쌍의 키가 동일하며, 대칭키라고도 불린다.

공개키
암호화에 사용되는 공개키와, 복호화에 사용되는 비밀키가 서로 다르기 때문에 비대칭키라고도 불린다.

표로 정리하면 아래와 같다.

구분 비밀키 암호 방식 공개키 암호 방식
특징 암호화와 복호화에 동일한 키를 사용 암호화엔 공개키, 복호화엔 비밀키 사용
장점 키가 동일하므로 암복호화 속도가 빠름 공개키의 분실에 따른 파급효과가 없음
단점 암호화키 분실에 따른 파급효과가 큼 암복호화 과정에서 수학적 계산이 많아 속도가 느림

2.2. 암호화 단위에 의한 분류

현대 사회에서는 대부분의 통신이 컴퓨터로 이루어지고 있다.

따라서 암호화의 단위가 문자의 단위인 알파벳에서 컴퓨터의 단위인 비트/바이트로 바뀌게 되었다.

이에 따라 평문을 암호화할때 비트 단위로 암호화하는 지 블록으로 나누어 블록별로 암호화하는지에 따라 분류할 수 있다.

스트림 암호
이진화된 평문 또는 암호문에 키를 한 번에 1비트 혹은 1바이트씩 논리합(XOR) 연산을 적용하여 암호화 복호화를 수행하는 암호이다.

스트림 암호는 평문의 길이와 키의 길이가 같기때문에 평문의 길이에 맞추어 키를 생성하여 사용한다.

또한 이름 그대로 데이터의 흐름(stream)에 따라 1비트 혹은 1바이트씩 순차적으로 암호화가 진행되기 때문에 암호화 진행 상황을 알 필요가 있다.

스트림 암호는 주기 및 선형복잡도 등 안정성과 관련된 수학적 분석이 용이하고 알고리즘의 구현이 쉬운 편에 속도도 빨라 널리 쓰이고 있다.

대표적인 예시로는 난수발생기를 이용한 암호, RC4, SEAL A5/1, A5/2 등이 있다.

블록 암호
평문 또는 암호문을 일정한 길이의 블록으루 구분하여 암호화 및 복호화를 수행하는 암호이다.

스트림 암호화는 다르게 라운드를 사용하여 반복적으로 암호화 과정을 수행하여 안정성을 높이며, 키를 재사용한다.

여기서 재사용이란 블록 암호는 블록의 길이만큼의 키를 생성하고, 해당 키로 다른 블록을 서명하는 식의 행위이다.

이는 키를 매번 생성하기위해 난수를 생성하지않아도 되기 때문에 큰 장점이다.

결국 블록으로 구분한다는 것의 다른 의미는 암호화를 할때 평문의 길이를 고려하지않고 고정된 길이의 각 블록을 암호화하는 방식만 결정하면 된다는 의미이다.

표로 정리하면 아래와 같다.

구분 스트림 암호 블록 암호
암호화 단위 1비트 2비트 이상
징점 빠른 속도, 채널에 대한 오류가 하나의 비트에만 영향 블록 단위로 키가 적용되므로 엄격한 동기화가 필요 없음
단점 엄격한 동기화 느린 속도, 채널에 대한 오류가 블록 내의 다른 비트에도 영향

2.3. 평문 문자의 변경 유무에 따른 분류

평문을 암호화할 때,

원래 있던 평문을 구성하는 문자의 종류는 그대로 둔채 위치만을 서로 바꾸는지, 다른 종류의 문자로 아예 바꾸는 지에 대해서도 분류할 수 있다.

전치 암호
평문을 구성하는 문자 또는 기호의 형태를 바꾸지않고 문자 또는 기호의 순서만을 재배열 한다.

대치 암호
평문을 구성하는 문자 또는 기호를 다른 문자 또는 기호로 바꾼다.

한 문자가 단 한 종류의 문자로만 치환되는 경우 단순대치식, 한 문자가 두 종류 이상의 문자로 치환되는 경우 다중대치식 이라고 분류한다.