우리가 인터넷을 통해 주고받는 데이터나 개인 정보를 안전하게 보호하려면 암호화를 잘 이해하고 활용해야 합니다.
암호화란 무엇인가?
우선 암호화가 무엇인지 간단히 짚고 넘어가겠습니다. 암호화란 읽을 수 있는 평문 데이터를 읽을 수 없는 암호문으로 변환하여 무단 접근으로부터 데이터를 보호하는 과정을 말합니다.
즉, 누구나 알아볼 수 있는 평문(plain text)을 어떤 규칙과 키(key)를 사용해 알아볼 수 없는 암호문(cipher text)으로 바꾸는 것입니다.
이렇게 해두면 올바른 키 없이는 암호문을 다시 평문으로 되돌릴 수 없으므로, 민감한 정보를 안전하게 숨길 수 있습니다.
예를 들어 메시지를 암호화해 두면 권한 없는 사람이 중간에 그 메시지를 가로채도 내용을 이해할 수 없게 되죠.
암호화를 수행하는 암호화 알고리즘(또는 암호 방식)과 키는 한 세트로 동작합니다. 암호화 알고리즘은 누구에게나 공개되어 있어도 괜찮지만, 어떤 키를 사용하느냐에 따라 결과가 완전히 달라지기 때문에 키를 어떻게 생성하고 관리하는지가 보안의 핵심입니다 .
키 없이 알고리즘만 알아서는 암호문을 풀 수 없도록 알고리즘이 설계되어 있기 때문입니다.
현대 암호화 기법은 크게 두 가지 방식으로 나뉩니다.
- 대칭키 암호화: 암호화와 복호화에 같은 하나의 키를 사용하는 방식입니다. (동일한 키를 쓰기 때문에 비밀키 암호, 공통키 암호라고도 불립니다.)
- 공개키 암호화: 암호화와 복호화에 서로 다른 키 쌍을 사용하는 방식입니다. (한 쪽 키를 공개하기 때문에 비대칭키 암호 또는 공개키 암호라고 부릅니다.)
두 방식은 사용하는 키의 구조가 다르며, 각자 장단점과 사용되는 분야가 조금씩 다릅니다.
1. 대칭키 암호화 (Symmetric Key Encryption)
대칭키 암호화는 말 그대로 대칭적인 키를 사용하는 암호 방식입니다.
암호화할 때와 복호화할 때 똑같은 키 하나를 사용하며, 송신자와 수신자는 동일한 비밀 키를 미리 공유하고 있어야 합니다 .
예를 들어 A와 B가 대칭키 암호화를 통해 통신하려면, A가 가지고 있는 암호화 키와 똑같은 키를 B도 가지고 있어야 하고, 그래야만 B가 암호문을 복호화해서 원래 평문을 얻을 수 있습니다.
이처럼 한 개의 키로 양쪽에서 암호화/복호화가 이루어지기 때문에 비밀 키 암호, 공통 키 암호라고도 불립니다.
대칭키 암호화 장점
대칭키 암호화의 가장 큰 장점은 구조가 단순하고 속도가 매우 빠르다는 것입니다. 하나의 키만 관리하면 되므로 연산도 효율적이고, 암호화/복호화 속도가 빨라 대용량 데이터를 처리하기에 유리합니다 .
실제로 AES(Advanced Encryption Standard)나 DES(Data Encryption Standard)와 같은 대칭키 알고리즘은 한 번에 큰 블록의 데이터를 빠르게 암호화하도록 설계되어 있어서, 파일 암호화나 하드디스크 암호화, 데이터베이스 암호화 등 많은 양의 데이터 보호에 주로 사용됩니다 .
예를 들어 우리가 쓰는 VPN이나 Wi-Fi 암호, 압축 파일 암호 등이 모두 대칭키 암호화 방식을 활용하고 있습니다.
대칭키 암호화 단점
하지만 대칭키 방식에는 중요한 단점도 있습니다. 바로 “키 교환(Key Exchange)” 문제인데요. 암호화와 복호화에 같은 키를 쓰므로 상대방에게 그 키를 안전하게 전달하는 것 자체가 하나의 난관입니다 .
만약 키를 미리 공유하지 못한 상대와 통신하려면, 암호화한 메시지를 보내기 전에 어떤 방법으로든 동일한 비밀키를 상대에게 전달해야 합니다.
이 키가 노출되거나 가로채이면 암호화된 내용은 모두 무용지물이 되므로, 키 전달 과정이 매우 중요하고 어려운 거죠. 실제로 과거에는 특수전령이나 밀봉된 봉투 등을 이용해 사전에 키를 주고받는 방식을 썼지만, 이는 규모가 커질수록 비현실적입니다 .
여러 사람이 통신하려면 사람 수만큼 별도의 비밀키 쌍을 관리해야 하므로 키 관리가 급격히 복잡해지는 문제도 있습니다.
대칭키 암호화 대안
대칭키 암호의 이러한 문제점을 해결하기 위해 키 배송(key distribution) 문제를 연구한 결과, 1976년 Diffie-Hellman 키 교환과 같은 방법이 고안되기도 했습니다 . 이 방법은 수학적 원리를 이용해 공개된 정보를 주고받아도 최종적으로 같은 비밀키를 공유할 수 있도록 해줍니다. 하지만 더 근본적인 해결책은 바로 공개키 암호화의 발명이었습니다. 공개키 암호화는 애초에 키를 교환하지 않고도 안전하게 통신할 수 있도록 고안된 방법입니다.
2. 공개키 암호화 (Public Key Encryption)
공개키 암호화는 1970년대에 등장한 혁신적인 방식으로, 한 쌍의 키(공개키와 개인키)를 사용하여 데이터를 암호화/복호화합니다.
원리는 다음과 같습니다:
- 개인키(Private Key): 본인만 알고 비밀로 간직하는 키.
- 공개키(Public Key): 누구에게나 공개할 수 있는 키.
이 두 키는 수학적으로 서로 연관되어 한 쌍을 이루며, 한 쪽으로 암호화하면 반대 키로만 복호화가 가능한 관계를 가집니다.
예를 들어 A(송신자)가 B(수신자)*게 메시지를 보낼 때, B의 공개키로 암호화하면 B의 개인키로만 복호화가 가능합니다.
따라서 B는 자신의 개인키를 절대 공개하지 않고 안전하게 보관하기만 하면, 누구든 B의 공개키로 암호화한 메시지는 오직 B만 열어볼 수 있게 되는 것입니다.
공개키 암호화 장점
이 방식의 가장 큰 장점은 앞서 이야기한 키 교환 문제가 사라진다는 점입니다.
통신하기 전에 비밀 키를 미리 주고받을 필요 없이, 공개된 채널로 공개키를 전달해도 안전한 통신이 가능하기 때문입니다 .
마치 열쇠 구멍이 달린 우체통에 비유할 수 있습니다. 우체통의 위치를 누구나 알 수 있고 (공개키) 그 투입구로는 누구나 편지를 넣을 수 있지만, 열쇠(개인키)를 가진 사람만이 우체통을 열어 내용을 꺼내볼 수 있는 식입니다.
이렇게 공개키 암호화는 사전에 비밀을 공유하지 않은 사람들도 인터넷과 같은 공개된 통신망에서 안전하게 통신할 수 있도록 해주었습니다 .
공개키 암호화 단점
그러나 공개키 암호화도 단점이 전혀 없는 것은 아닙니다. 먼저, 수학적으로 복잡한 연산에 기반하기 때문에 속도가 느리고 계산 자원이 많이 소모됩니다.
대칭키 암호화에 비해 1,000배 이상 느리다고 할 정도로, 많은 양의 데이터를 직접 암호화하기에는 비효율적입니다.
또 공개키를 모두에게 배포한다고 했을 때, 그 공개키가 진짜 본인의 것인지 증명하는 문제도 있습니다.
예를 들어, 누군가 B인 척 가짜 공개키를 건네주면 A는 그걸로 암호화해서 보내겠지만 사실 공격자의 공개키일 수 있습니다.
이 문제를 해결하기 위해 인증서(Certificate)라는 개념이 등장하고, 신뢰할 만한 **인증 기관(CA)**이 공개키에 서명을 해주어 신원을 보장하는 체계가 구축되었습니다.
공개키 암호화 알고리즘
공개키 암호화의 대표적인 알고리즘으로는 RSA와 타원곡선 암호(ECC) 등이 있습니다.
RSA 알고리즘은 큰 숫자의 소인수분해가 어렵다는 수학적 원리를 기반으로 하여, 하나의 개인키와 하나의 공개키를 생성하는 방식입니다 . RSA에서 공개키로 암호화한 내용은 개인키로만 복호화되며, 그 반대도 마찬가지입니다.
반대로 ECC(Elliptic Curve Cryptography)는 이산로그 문제의 어려움에 기반한 것으로, 더 짧은 키 길이로도 RSA와 유사한 보안 강도를 얻을 수 있어 최근 많이 사용됩니다 .
어떤 알고리즘이든 핵심은 두 개의 키가 수학적으로 연결되어 있지만 공개키만으로는 개인키를 역산하기 매우 어렵게 만들어졌다는 점입니다 .
전자서명 (Digital Signature)의 개념
공개키 암호화는 암호화뿐만 아니라 전자서명이라는 중요한 활용도 제공합니다.
만약 위 원리를 거꾸로 이용해서, 내가 가진 개인키로 어떤 데이터를 암호화(서명 생성)하고, 다른 사람들이 내 공개키로 이를 복호화해본다면 어떻게 될까요?
공개키로 제대로 복호화가 된다면 “분명 이 데이터는 해당 개인키로 암호화되었구나”, 즉 개인키 소유자가 이 데이터를 보냈음을 증명할 수 있습니다 .
이때는 데이터를 숨기는 것이 목적이 아니므로 중요한 데이터 자체를 개인키로 암호화하지는 않고, 주로 해시(hash) 값을 암호화하여 서명으로 사용합니다.
어쨌든 개인키로 서명하면 공개키로 누구나 검증할 수 있기 때문에, 송신자의 신원 인증과 무결성 검증 용도로 공개키 기반 전자서명이 널리 쓰입니다 .
예를 들어 소프트웨어 배포 사이트에서 제공하는 전자서명, 블록체인에서의 서명, 그리고 TLS 인증서 자체도 모두 이러한 공개키 서명 기술에 해당합니다.
하이브리드 암호화: 대칭키 + 공개키의 결합 (RSA + AES)
실제 환경에서는 대칭키 암호와 공개키 암호의 장단점을 모두 활용하는 똑똑한 방법이 있으니, 바로 하이브리드 암호화입니다.
하이브리드 암호화 구조에서는 공개키 암호화의 안전한 키 교환 능력과 대칭키 암호화의 효율적인 데이터 처리 능력을 조합합니다 . 현대의 거의 모든 보안 통신 프로토콜(예: TLS/SSL)이나 보안 파일 전송 방식이 이 하이브리드 개념을 사용하고 있습니다.
하이브리드 암호화의 동작 방식을 단계별로 살펴보면 다음과 같습니다.
- 통신을 시작하는 송신자 A가 무작위의 대칭키(Symmetric Key)를 하나 생성합니다. (예: AES-256용 256비트 키)
- A는 이 대칭키를 이용해 평문 데이터를 암호화하여 암호문을 얻습니다. (이 단계까지는 대칭키 암호화 방식이므로 매우 빠르게 진행됩니다.)
- A는 수신자 B의 공개키를 입수하여, 방금 생성한 대칭키 자체를 공개키로 암호화합니다. 이렇게 하면 대칭키가 안전하게 보호된 형태로 전달될 수 있습니다.
- A는 암호화된 데이터(암호문)와 암호화된 대칭키를 함께 B에게 전송합니다.
- 수신자 B는 자신의 개인키로 암호화된 대칭키를 복호화하여 원래의 대칭키를 획득합니다.
- B는 확보한 대칭키를 사용해 받은 암호문을 복호화함으로써 원래의 평문 데이터를 얻어냅니다.
이 과정을 통해, A와 B는 서로 비밀키를 미리 주고받은 적 없어도 안전하게 대칭키를 공유하게 되었고, 이후에는 대칭키로 암호화된 대용량 데이터도 문제없이 주고받을 수 있게 됩니다 .
요약하면 공개키 암호화 기술로는 작은 “세션 키”만 암호화하고, 실제 메시지 내용은 효율적인 대칭키 암호로 암호화함으로써 두 방식의 장점을 모두 취하는 것입니다 .
실제로 PGP(OpenPGP)와 같은 보안 이메일 시스템이나 파일 암호화 도구에서 RSA+AES 조합을 많이 사용하는데, 이는 RSA 공개키로 AES 키를 안전하게 교환한 후 AES로 본문을 암호화하는 방식입니다. 또한 뒤에서 다룰 TLS 통신 역시 하이브리드 암호화의 한 예로 볼 수 있습니다.