암호화 알고리즘의 분류

3 분 소요

0. Intro

암호화 알고리즘은 크게 대칭형와 비대칭형 2가지로 나뉘는데 이는 암호화에 사용하는 Key와 복호화에 사용하는 Key가 같은지 다른지를 기준으로 분류된다.
통상적으로 대칭형 암호는 비밀키 암호에 사용되며 비대칭형 암호는 공개키 암호에 사용된다. 따라서 각각 대칭키(비밀키) 암호화 방식과 비대칭키(공개키) 암호화 방식 으로 불리기도 한다.

대칭형 암호화 방식은 또 블럭 암호화와 스트림 암호화로 분류될 수 있다.
블럭 암호화는 비트 수(단위, 또는 블럭)를 암호화 하는 방식이고 스트림 암호화는 연속적인 데이터를 암호화하는 방식이다.

또 다른 분류방법으로 양방향 암호화와 단방향 암호화가 있다. 양방향 암호화가 일반적으로 암호화 복호화라면 단방향 암호화는 복호화가 불가능한 것을 말한다. 즉, 암호문을 다시 평문으로 복호화 할 수 없는 것이다.

정리하면 아래와 같다.

분류방식 이름 또 다른 이름
Key에 따라 대칭형 암호화 대칭키 암호화, 비밀키 암호화
  비대칭형 암호화 비대칭키 암호화, 공개키 암호화
대칭형 암호화의 경우 구현 방식에 따라 블록 암호화  
  스트림 암호화  
암호화 방향에 따라 양방향 암호화  
  단방향 암호화  

1. 대칭형(대칭키, 비밀키) 암호화 방식

암호화에 사용되는 Key와 복호화에 사용되는 Key가 동일한 경우이다.
Key가 동일하기 때문에 대칭형 암호화에는 비밀키 암호화 방식이 사용된다.

현재 가장 보편적으로 쓰이는 암호화 방식은 현 미국 표준 방식인 AES 알고리즘이다. 128~256비트 Key를 적용할 수 있어 보안이 뛰어나고 공개된 알고리즘이라 누구나 사용할 수 있다.

이전에는 DES(Data Encryption Standard) 알고리즘이 주로 사용되었으나 너무 오래되어 취약점이 발견되었고 이를 대체하기 위해 등장한 것이 AES(Advanced Encryption Standard, AES) 이다.

1.1. 대칭형 암호화 알고리즘

DES, AES 외에도 RC4, Twofish, Serpent, Blowfish, CAST5, 3DES, IDEA 등의 암호화 알고리즘이 존재하며 국내에서 개발된 SEED와 ARIA라는 알고리즘도 있다.

1.2. 대칭형 암호화 방식의 문제점

대칭형 암호는 좋은 방식이지만 결정적으로 ‘키 배송’에 대한 문제가 발생한다. 어떻해서든 보내는 곳 입장에서는 받는곳에게 암호 Key를 전달해야 하는데 만약 이 Key가 유출되면 아무리 뛰어난 알고리즘을 사용했더라도 무용지물이 된다.

평문을 안전하게 전달하기 위해 만든것이 암호문인데 정작 Key를 안전하게 전달할 방법이 없는것이 문제이고 이를 해결하기 위한 발상의 전환으로 나온것이 다음의 비대칭형 암호화 방식이다.

2. 비대칭형(비대칭키, 공개키) 암호화 방식

암호화에 사용되는 Key와 복호화에 사용되는 Key가 서로 다른 경우이다.

암호화를 하면 하나의 키 쌍이 생기고 이 두 개의 키는 수학적으로 밀접한 관계를 가지고 있다.
두 개의 키를 각각 키 A, 키 B라고 했을 때 키 A로 암호화한 암호문은 키 B로만 복호화할 수 있고 키 B로 암호화한 암호문은 키 A로만 복호화할 수 있다.
따라서 이 중 하나의 키만 비밀로 보호하고(private key) 다른 하나의 키는 공중에게 공개해도 관계가 없다(public key).

이렇게 둘 중 하나의 키는 반드시 공개되어야 통상적인 사용이 가능하므로 공개키 암호라고도 불린다.

상호간에 공개키를 교환하고 상대방의 공개키로 암호화를 해서 데이터를 교환한다. 교환된 데이터를 복호화하는데는 자신의 개인키로 가능하기 때문에 키 배송 문제가 발생하지 않는다.

2.1. 비대칭형 암호화 알고리즘

비대칭형 암호에는 Diffie-Hellman 키 교환, DSS, ElGamal, ECC, RSA 등이 있다.

2.2. 비대칭형 암호화 방식의 문제와 SSL

키 배송 문제는 해결되었지만 비대칭형 암호화 방식은 대칭형 방식에 비해 현저하게 느리다는 문제점이 있다.

따라서 현실적으로는 대칭형과 비대칭형 방식을 혼합하여 사용한다.
즉, 비대칭형 암호화 방식을 이용해서 대칭형 암호의 키를 배송하고 이후 실제 암호문은 대칭형 암호를 사용하는 방식으로 사용되는 것이다.
참고로 이게 바로 표준 보안 방식인 SSL이다.

웹사이트에 접속하는 케이스로 flow를 정리하면 아래와 같다.

  1. 암호문을 주고받을 상대(서버)에게 접속 요청을 한다.
  2. 상대는 자신의 공개키를 나(브라우저)에게 보낸다.
  3. 나는 암호화할때 사용할 대칭키를 상대의 공개키로 암호화해서 보낸다.
  4. 상대는 내가 보낸 암호문을 자신의 개인키로 풀어서 대칭키를 알아낸다.
  5. 이제 대칭키 방식을 통해 암호문을 주고받는다.

그런데 이 방식에도 취약점이 있는데 바로 중간자 공격(MITM : Man In The Middle Attack)이다.
해커가 중간 통신을 가로채어 수신자에게는 송신자인척하고 송신자에게는 수신자인척 하여 양쪽의 공개키와 실제 암호화에 사용되는 대칭키를 모두 얻어내는 기법이다.

이런 문제때문에 verysign과 같은 제 3의 인증기관이 생겼다. 즉, 내가 접속한 사이트가 진짜인지 가짜인지를 구분하는 용도인 것이다.

전체 과정에 대한 자세한 내용은 SSL(Secure Socket Layer)과 인증서 참고

3. 단방향 암호화

평문을 암호문으로 암호화하는 것은 가능하지만 암호문을 평문으로 복호화하는 것은 불가능한 암호화 기법. 기본적으로 동일한 평문은 동일한 암호문으로 암호화되지만 이를 바탕으로 평문을 복원할 수는 없다.

단방향 암호화는 주로 패스워드를 저장할때 사용된다. 즉, 암호화된 암호문을 비교해서 동일한 암호인지는 확인할 수 있지만 실제 패스워드가 무엇인지는 모르는 것이다.

또 다른 사용처로는 원본 메세지가 손상되었는지를 확인하는데 있다. 주로 파일 무결성을 검사할때 사용한다.

3.1. 단방향 암호화 알고리즘

주로 해시 알고리즘을 사용하며 대표적인 해시 알고리즘으로 MD4(Message Digest 4), MD5(Message Digest 5), SHA(Secure Hash Algorithm) 등이 있다.


[참고 문서]

  1. 나무위키
  2. 참고 블로그

댓글남기기