대칭키와 비대칭키에 대해서 정보처리기사 자격증을 위해 거의 암기하다시피 외우기만 했기 때문에 제대로 기억이 나질 않았다. 따라서 이 대칭키와 비대칭키에 대해서 자세히 알아보면서 암기가 아닌 이해를 할 수 있도록 해봐야겠다!
암호화와 복호화에 사용하는 키가 동일한 암호화 방식
정의에서도 알 수 있듯이 사용되는 키의 개수는 한개이며 이 한개로 암호화와 복호화 모두 진행할 수 있다. 따라서 대칭키를 사용하여 암호화를 한 정보는 같은 대칭키를 가지고 있는 사용자만 복호화를 해서 정보를 알아낼 수 있는 것이다.
이러한 대칭키는 Stream과 Block 방식으로 나뉘게 된다.
평문과 키로 데이터를 암호화
연산의 속도가 빠르며 데이터 크기에 제한이 없어 대용량 데이터를 암호화하기에 용이하다.
대표적인 알고리즘은 RC4로, 변수 크기의 키를 입력받아 그 키를 사용하여 스트림 암호를 생성한다.
이처럼 구현이 쉽고 속도가 빠르다는 장점이 있지만 현재 여러 보안의 취약점이 발견이 되었다.
→ 구현을 할 때 컴퓨터가 무작위 난수를 생성해야 하는데 컴퓨터는 난수처럼 보이는 수열을 생성하게 된다. (이를 의사 난수 생성기 : PRNG 라고 한다.) 이는 예측이 가능하며 동일한 초깃값에서 시작을 하면 동일한 수열이 생성이 된다.
그러나 Stream 암호화 방식은 일부가 누락이 되어도 인접한 부분을 통해 복원을 할 수 있기 때문에 통신 네트워크 분야에서 아직 사용이 되고 있다.
평문을 블록 단위로 분할하여 암호화
암호화, 복호화의 연산시 블록의 크기에 따라 속도의 차이가 발생할 수 있다.
첫번째 대표적인 알고리즘으로은 DES가 있다. DES는 64비트의 블록 단위로 데이터를 암호화하며 56비트의 대칭키를 사용한다. 보안성이 높지만 키의 길이가 짧고 블록의 크기가 작아 보안성이 낮다.
이를 보안하기 위해서 3DES라는 알고리즘이 만들어졌는데 이 알고리즘은 DES의 방식을 3번 반복하여 사용하는 방식이다.
두번째 대표적인 알고리즘으로는 AES가 있다. 이 AES 알고리즘의 핵심은 행렬 연산을 사용한다는 것이며 현재까지도 많이 사용이 되는 암호화 알고리즘 중 하나이다.
이외에도 SEED, ARIA 등이 있다.
그렇다면 이 대칭키의 장점에는 무엇이 있을까?
우선 암호화 방식의 속도가 빠르다는 것이다. 동일한 키를 사용하기 때문에 암호화와 복호화의 속도가 이후 소개할 비대칭키보다 빠르다.
또한 대용량 데이터 암호화에 적합하다. Stream 방식을 살펴보면 데이터 용량에 제한이 없기 때문에 대용량의 데이터 암호화에도 걱정이 없다.
장점만 있다면 비대칭키라는 개념이 나왔을리가 없다.. 이 대칭키의 단점에는 무엇이 있을까?
우선 키를 교환해야한다는 문제이다. 키 배송 문제라고도 하는데 결국 대칭키를 사용하기 위해선 이 키를 알려줘야하는 작업이 필요하다. 하지만 이 키를 교환하는 도중 키가 탈취가 된다면 대칭키를 사용하는 이점이 사라지게 된다..
또한 사람이 증가할수록 전부 다르게 키 교환을 해야한다. 예를 들어 A ↔ B ↔ C 가 통신을 한다고 했을 때 B는 A와 사용하는 대칭키, C와 사용하는 대칭키를 관리해야한다. 그렇다면 여기서 B와 통신하는 사람이 늘어날 경우에는? 더욱 더 많은 키를 관리해야하는 문제가 발생한다.
이를 해결하기 위해서 키의 사전 공유, 키 배포센터, Diffie-Hellman, 비대칭키 암호화 라는 개념들이 생겨나게 되었다.
💡 각각의 간단 설명!
키의 사전 공유 : 미리 공유된 비밀 키를 사용하여 통신
키 배포센터 : 중앙 서버를 통해 키를 안전하게 분배
Diffie-Hellman : 비대칭키에서 사용되는 키 교환 방식
자 그렇다면 대칭키의 문제를 해결하기 위해 나온 이 비대칭키는 과연 무엇이며 어떻게 문제를 해결했을까?
암호화와 복호화에 서로 다른 키를 사용
같은 키를 사용하기 때문에 문제가 되는 것이었다면 해결하기 위해선 서로 다른 키를 사용하면 된다! 라는 느낌으로 만들어진 방식이다.
공개키 방식이라고도 하며 공개키와 개인키 한 쌍을 가지게 된다. 공개키는 모든 사람이 접근 가능한 키이고 개인키는 각 사용자만이 가지고 있는 키가 된다.
이때 공개키는 모든 사람이 접근 가능하지만 개인키로만 복호화가 가능하기 때문에 안전하게 사용이 가능하며 개인키는 절대 유출이 되어서는 안되고 자기 자신만 가지고 있어야한다.
비대칭키의 대표적인 알고리즘에 대해서 알아보자.
첫번째 대표적인 알고리즘으로는 RSA가 있다. RSA는 대규모 소수의 곱셈에 기반한 알고리즘으로 소인수분해 문제의 난해성을 기반으로 한다. 따라서 충분히 큰 소수를 사용하는 것이 RSA의 안전성을 보장한다. RSA는 널리 사용되는 알고리즘으로 SSL/TLS 프로토콜에서 인증서를 만드는데 사용이 된다.
두번째 대표적인 알고리즘으로는 DSA가 있다. DSA 알고리즘은 전자서명에 사용되는 알고리즘으로 소인수분해와 달리 이산로그 문제의 난해성을 기반으로 수행한다. DSA는 주로 디지털 서명 프로토콜인 SSL/TLS, SSH, IPSec 등에 사용이 되며 대부분의 공인인증기관에서 인증서를 발급할 때 DSA를 사용하기도 한다.
이외에도 ECC 등이 있다.
자 그렇다면 이 비대칭키의 장점에는 무엇이 있을까?
우선 키 배송 문제를 해결할 수 있다. 키를 교환하거나 분배를 할 필요가 없기 때문에 배송의 과정이 필요가 없어지게 되는 것이다.
또한 기밀성과 인증, 부인 방지의 기능을 제공한다. 기밀성과 인증 부인 방지가 무엇이냐하면
그렇다면 대칭키의 단점을 보완한 비대칭키는 과연 단점이 없을까?
아니다.. 비대칭키에도 단점은 존재한다..
이 비대칭키의 거의 유일한 단점은 속도가 느리다라는 것이다. 암호화와 복호화에 걸리는 시간이 대칭키보다 많은 시간이 소요가 되며 이는 컴퓨터에 많은 부담을 줄 수 있다.
그렇다면 어떻게 사용을 해야할까? 대칭키를 사용한다면 키의 배송이나 관리가 문제가 생기고 비대칭키를 사용한다면 컴퓨터에 부담이 될 정도로 많은 시간의 소요가 생길 수 있다.
그래서 우리는 이 두가지를 섞어서 사용을 하게 된다.
이전 블로그인 HTTP & HTTPS에서도 설명을 했지만 대칭키를 만들기 위해서 비대칭키를 사용하고 이후 대칭키를 사용하여 통신을 하게 되는 것이다.

조금 더 자세히 설명을 해보자면
이제 B와 A는 대칭키를 안전하게 얻었으므로 둘이서 대칭키로 통신을 하게 되는 것이다.
이렇게 대칭키를 전달하는 과정을 비대칭키를 통해 전달하게 되면 키 배송의 문제가 해결이 된다. 또한 안전하게 전달된 대칭키로 통신을 하게 되면 비대칭키만 사용했을 때의 속도 문제를 해결할 수 있다.
대칭키 암호화 방식은 암호화와 복호화에 사용되는 키가 1개이다!
비대칭키 암호화 방식은 암호화와 복호화에 사용되는 키가 1쌍(공개키, 개인키)이다!
대칭키만 사용하거나 비대칭키만 사용하는 것이 아니라 둘을 혼합해서 사용할 경우 서로의 단점들이 보완된다!