암호화의 진화, 비대칭키의 등장
기존의 대칭키 방식은 암호화와 복호화에 동일한 키를 사용하기 때문에, 키가 유출될 경우에는 보안성이 크게 약화될 수 있습니다. 또한 대칭키 방식은 상대방에게 키를 전달해야하는데, 이 과정에서 중간자 공격 등의 위협이 발생할 수 있습니다.
이러한 대칭키의 한계를 극복하기 위해, 1970년대에 비대칭키 암호화 방식이 개발되었습니다. 이 방식은 암호화와 복호화에 각각 다른 키를 사용하여, 키를 교환하는 과정에서 발생할 수 있는 위협을 최소화할 수 있습니다. 따라서, 비대칭키 방식은 대칭키 방식보다 안전하고 효과적인 암호화 방식으로 인정받고 있습니다.
비대칭키의 장점은 다음과 같습니다:
- 보안성 향상: 대칭키는 암호화와 복호화에 같은 키를 사용하기 때문에, 키가 유출되면 해독될 위험이 큽니다. 반면에, 비대칭키는 암호화에 사용하는 공개키는 유출되어도, 복호화에 필요한 개인키는 유출되지 않는 한 안전하게 보호됩니다.
- 쉬운 키 관리: 대칭키는 모든 참여자가 같은 키를 공유해야 하므로, 그 수가 늘어날수록 키 관리가 어려워집니다. 반면에, 비대칭키는 각 참여자가 공개키만 공유하면 되므로, 키 관리가 훨씬 쉬워집니다.
- 인증 보장: 공개키를 이용하여 암호화한 데이터는 오직 개인키를 가지고 있는 수신자만이 복호화할 수 있기 때문에, 데이터의 송신자가 정당한 수신자인지를 인증할 수 있습니다. 이를테면, 웹 사이트의 SSL 인증서는 공개키를 이용하여 서버와 클라이언트 간의 통신을 암호화하며, 서버가 정당한 웹 사이트임을 인증합니다.
공개키와 개인키: 비대칭 암호화의 핵심
공개키(Public Key)와 개인키(Private Key)는 비대칭키 암호화 방식에서 사용되는 두 개의 키입니다.
공개키는 이름 그대로 공개되어 있으며, 모든 사람이 접근할 수 있는 키입니다. 공개키는 메시지를 전송할 때 사용되며, 이를 이용하여 암호화된 메시지를 보낼 수 있습니다. 또한, 공개키를 이용하여 암호화된 메시지를 해독할 수 있는 개인키를 가지고 있는 사람만이 이를 해독할 수 있습니다.
개인키는 공개되지 않으며, 보안이 유지되어야 하는 키입니다. 개인키는 자신만이 가지고 있는 키로, 이를 이용하여 암호화된 메시지를 해독할 수 있습니다. 또한, 개인키를 이용하여 서명을 할 수 있으며, 이 서명은 공개키를 이용하여 인증될 수 있습니다.
(이해하기 쉽게 공개키는 은행의 계좌번호, 개인키는 비밀 PIN으로 비유할 수 있습니다)
대표적인 비대칭키 알고리즘
현재까지는 수백 가지 이상의 비대칭키 암호화 알고리즘이 개발되어 있습니다. 이들 알고리즘은 모두 서로 다른 수학적인 원리와 방식을 사용하여 개인키와 공개키를 생성하고, 이를 이용하여 데이터를 암호화하고 서명합니다. 비대칭키 알고리즘은 소인수분해 기반과 이산대수 기반으로 분류됩니다. 대표적으로 사용되는 알고리즘을 정리하면 다음과 같습니다:
소인수분해 기반:
- RSA - 두 개의 소수를 랜덤하게 선택하여 공개키와 개인키를 생성합니다. (RSA 알고리즘)
- Rabin - 소인수분해 문제를 기반으로 하는 공개키 암호화 기법으로, RSA와 유사하지만 암호화된 메시지를 복호화하는 과정에서 중복된 값이 생길 가능성이 있습니다. (Rabin 알고리즘)
이산대수 기반:
- Diffie-Hellman - 이산대수 기반의 알고리즘으로, 통신 상대와 공유 비밀 키를 생성하기 위해 사용됩니다. (Diffie-Hellman 알고리즘)
- DSA - 이산대수적인 연산을 기반으로 하며, 디지털 서명 및 인증 기능을 제공합니다. (DSA 알고리즘)
- ElGamal - 이산대수적인 연산을 기반으로 하는 공개키 암호화 기법 중 하나로, RSA와 유사하지만, 더 높은 수준의 보안성과 다양한 응용이 가능합니다. (ElGamal 알고리즘)
- ECC - 타원곡선 기반의 공개키 암호화 기법으로 RSA와 비교해 같은 보안 강도에서 더 짧은 키 길이를 사용하여 더 빠른 암호화와 복호화가 가능합니다. (ECC 알고리즘)
비대칭키 알고리즘은 안전한가?
지금까지 여러 비대칭키 알고리즘에 대해 살펴 보았습니다. 모두 공통적으로 공개키와 개인키 쌍을 생성하여, 공개키는 사용되는 네트워크에 공개적으로 배포됩니다. 이 때 공개된 공개키와 암호화나 서명이 진행될 때 같이 배포되는 값으로 역산을 할 수 있지 않은가에 대한 의문점이 들 수도 있습니다. 결론부터 말씀드리면, 역산이 불가능하기 때문에 비대칭키 알고리즘에서 공개키는 공개되어 있어도 안전합니다. 대칭키 알고리즘과는 다르게 공개키와 개인키가 서로 다른 형태의 수학적 연산을 기반으로 하기 때문입니다. 비대칭키 알고리즘은 소인수분해 기반과 이산대수 기반으로 구성되는데, 구체적인 숫자로 보안성을 확인해보겠습니다.
현재 세계에서 가장 빠른 컴퓨터는 미국 에너지부가 운영하는 오크리지 국립 연구소의 '프론티어'라는 슈퍼컴퓨터입니다. 최초의 엑사급 연산이 가능한 컴퓨터로, 442,010 개의 프로세서와 15,600 개의 그래픽 카드를 사용해 1초당 10^18회의 연산을 수행할 수 있습니다.

소인수분해 기반의 알고리즘인 RSA의 경우, 암호화된 메시지를 해독하려면 해당 메시지가 암호화될 때 사용된 소수의 인수분해를 수행해야 합니다. 보통 RSA 알고리즘에서 사용되는 소수의 비트 수는 2048비트 이상입니다. 현재 가장 강력한 알고리즘 중 하나인 GNFS 알고리즘을 사용하면, 인수분해에 필요한 컴퓨팅 파워는 대략 2^110입니다. 계산해보면 다음과 같습니다: 2^110 / 10^18 = 1.2*10^11 초 = 약 4000천년에 해당하기 때문에, 현존하는 슈퍼컴퓨터의 연산으로 역산이 불가능합니다.

이산대수의 기반의 알고리즘인 ECC의 경우, 암호화된 메시지를 해독하기 위해 이산 로그 문제를 해결해야 됩니다. 이산 로그 문제는 현재까지 알려진 가장 효과적인 알고리즘으로도 극도로 느린 속도로 풀릴 뿐만 아니라, 비선형성과 대칭성이 없어서 병렬 연산이 불가능하며, 가장 효과적인 pollard's p-1 알고리즘을 적용해도 2^128번의 연산이 필요합니다. 마찬가지로 계산해보면, 2^128 / 10^18 = 3.4*10^26 초 = 약 10억년에 해당하기 때문에, 현존하는 슈퍼컴퓨터의 연산으로 역산이 불가능합니다.

따라서 현존하는 가장 강력한 슈퍼컴퓨터의 연산 능력으로도 비대칭키 알고리즘을 해독하는 것은 극도로 오래 걸리기 때문에, 비대칭키 알고리즘은 일상 생활에 적용할 수 있는 매우 안전한 알고리즘입니다.
Usecase 1: 비트코인 & ECDSA
비트코인은 공개키/개인키 기반의 암호화 기술을 사용하는데, 이 때 ECDSA 알고리즘을 사용하여 공개키를 생성합니다. RSA 알고리즘과 비교했을 때 ECDSA는 보안성이 더 강하면서도 계산 비용이 더 적게 들기 때문에 비트코인에서 널리 사용됩니다. ECDSA 알고리즘은 타원곡선 이론(ECC 알고리즘)을 기반으로 하며, 이론적으로 보안성이 높은 256비트 타원곡선을 사용합니다. 공개키 생성 과정에서 사용되는 ECDSA 알고리즘은 공개키를 생성하기 위해 개인키와 타원곡선 상의 점 연산을 수행합니다. 이렇게 생성된 공개키는 다른 사용자들에게 공개됩니다.
공개키 및 주소 생성
비트코인에서 개인키는 256비트의 난수로 구성된 값입니다. 키 생성이 요청되면, 거대한 난수표에서 무작위로 값이 선정됩니다.
이후 ECDSA의 타원 곡선 함수에 해당 개인키를 대입하여 공개키를 얻게 됩니다. 비트코인에서 사용되는 타원 곡선 함수는 y^2 ≡ x^3+7 (mod p)이며, 곡선 함수에 개인키를 대입하여 (x,y) 좌표의 공개키를 얻을 수 있게 됩니다. 공개키의 (x,y)좌표에서, x 값으로 쉽게 y값이 연산되기 때문에, 일반적으로 공개키는 256비트의 x값을 사용합니다.
마지막으로 비트코인 주소는 공개키를 연산해서 얻을 수 있게 됩니다. SHA-256의 보안 해싱 알고리즘과 RIPEMD 함수로 연산 처리 과정을 추가하여 일반적으로 사용되는 20바이트의 주소를 사용하게 됩니다.
Usecase 2: 텔레그램 & Diffie-Hellman
텔레그램에서는 사용자들 간의 메시지 교환에 Diffie-Hellman 기반의 암호화 프로토콜인 MTProto를 사용하고 있습니다. 이 프로토콜은 텔레그램에서 개발된 고유한 암호화 방식으로, 사용자들의 메시지를 안전하게 보호하는 데 사용됩니다. Diffie-Hellman 알고리즘은 이 프로토콜에서 중요한 역할을 담당하며, 사용자 간에 비밀키를 공유함으로써 메시지를 암호화하고 복호화합니다. 이러한 방식으로 암호화된 메시지는 서버를 거치지 않고 직접 사용자들 간에 전송됩니다. 이를 통해 텔레그램은 사용자들의 개인 정보를 안전하게 보호하고, 사용자들이 안전하게 메시지를 교환할 수 있도록 지원하고 있습니다.
메세지 암호화와 복호화
송신자와 수신자 간의 통신에서, 송신자는 먼저 랜덤한 값을 생성하고 이를 Diffie-Hellman 알고리즘을 사용하여 수신자의 공개키와 함께 공유합니다. 이후 송신자는 메시지를 AES 알고리즘을 사용하여 대칭키로 암호화합니다. 이 때 비밀키는 이전에 공유한 랜덤한 값과 송신자의 개인키, 수신자의 공개키를 사용하여 생성됩니다.

암호화된 메시지와 함께 송신자는 이전에 공유한 랜덤한 값을 Diffie-Hellman 알고리즘을 사용하여 수신자에게 전송합니다. 수신자는 송신자가 전송한 랜덤한 값을 이용해 비밀키를 생성한 후, 이를 이용하여 암호화된 메시지를 복호화합니다.

이 과정에서 메시지와 비밀키는 암호화되어 전송되지만, 랜덤한 값을 제외한 모든 값들은 공개되어도 상관이 없는 값들입니다. 이러한 방식으로 공개키 암호화와 대칭키 암호화를 결합함으로써 안전하고 효율적인 메시지 전송이 가능해집니다.

Usecase 3: 공인인증서 & RSA
한국의 공동인증서에서는 RSA 알고리즘이 사용됩니다. 공동인증서는 인터넷 뱅킹, 전자세금신고, 공공기관 등에서 사용되는 인증서이며, 이를 통해 사용자의 신원을 확인하고 안전한 통신을 보장합니다. RSA 알고리즘은 대표적인 비대칭키 암호화 알고리즘으로, 공개키와 개인키를 사용해 암호화 및 복호화를 수행합니다. 공동인증서는 개인키를 보유한 사용자가 암호화한 데이터를 공개키로 복호화하여 인증서를 확인하고, 서버로부터 받은 데이터를 개인키로 복호화하여 확인합니다. 이러한 방식을 통해 공동인증서는 안전하고 신뢰성 있는 인증서비스를 제공합니다.
공인인증서 발급과 사용자 인증
공동인증서는 안전성이 확인되고 신뢰성 있는 알고리즘을 사용하기 위해, HMAC-SHA256-DRBG를 이용 하여 2048-bit RSA 비대칭키를 생성합니다. 공동인증서는 SHA256 With RSA 알고리즘으로 서명되며, 개인키는SEED 알고리즘을 이용하여 암호화 됩니다.
사용자는 인증을 요청할 때 공동인증서를 사용해 자신의 신원을 증명할 수 있습니다. 이 때, 사용자는 개인키로 디지털 서명을 생성하여 인증기관에 전송을 하고, 암호화된 디지털 서명을 전달받은 인증기관은 기존에 보관하고 있던 공개키로 검증하여 사용자 인증을 수행합니다.
Pros & Cons?
비대칭키는 대칭키의 한계를 극복하고, 데이터 전송의 안전성과 보안성을 높이기 위해 발전되었습니다. 하지만, 계산 비용이 많이 들고 중간자 공격 등의 보안 문제가 여전히 존재합니다. 또한, 공개키의 유효성을 검증하는 기능이 필요하며, 암호화된 데이터의 길이가 한정되어 있는 등의 한계가 있습니다. 이러한 문제들은 연구와 기술 발전을 통해 해결될 수 있으나, 현재까지 완벽한 해결책이 제시되지 않았습니다.
장점:
- 보안성이 높습니다. 암호화와 복호화에 사용되는 공개키와 비공개키는 서로 다르기 때문에 중간자 공격이나 도청에 대한 위협을 줄일 수 있습니다.
- 키 교환 없이도 암호화된 데이터를 안전하게 전송할 수 있습니다. 공개키를 이용하여 암호화하고, 비공개키를 이용하여 복호화하기 때문에, 데이터를 전송하는 동안 키를 교환할 필요가 없습니다.
- 키 관리가 용이합니다. 대칭키 암호화 방식과 달리 공개키는 공개되어 있으므로, 키를 안전하게 관리하고 배포하는데 용이합니다.
- 인증과 전자서명 등 다양한 보안 기능을 제공할 수 있습니다. 비대칭키 암호화를 사용하여 전자서명을 만들면, 해당 전자서명은 공개키를 가진 사람만이 만들 수 있으므로, 인증 기능을 제공할 수 있습니다.
단점:
- 대칭키 암호화에 비해 계산 비용이 많이 듭니다. 비대칭키 암호화는 계산량이 큰 과정을 포함하기 때문에, 대칭키 암호화에 비해 더 많은 리소스가 필요합니다.
- 암호문의 길이가 평문과 같아서 긴 데이터를 암호화하는 데에 한계가 있습니다.
- 향후 양자컴퓨터와 같이 연산량이 높은 컴퓨터가 나오면 보안성이 크게 취약해질 수 있습니다. 이는 양자컴퓨터가 기존의 암호화 방식에서 사용하는 문제해결 알고리즘을 빠르게 해결할 수 있기 때문입니다.
비대칭키 암호학의 대안은 있는가?
현재 비대칭키 암호학에서 가장 큰 보안 위협은 개인키 유출과 중간자 공격과 같은 기존의 위협들입니다. 하지만, 양자컴퓨터 기술이 발전하면서, 양자컴퓨터를 이용한 새로운 암호 분석 기술이 개발될 가능성이 있습니다. 따라서 암호화 기술을 계속해서 발전시키는 것이 중요하며, 양자 안전한 암호화 알고리즘과 같은 보안 기술을 연구하고 개발하는 것이 필요합니다.
새로운 암호화 기술?
현재까지는 비대칭키 암호화가 최선의 선택 중 하나로 여겨지고 있으며, 대체재로 널리 사용되는 암호화 방법은 없습니다. 하지만, 양자 컴퓨팅과 같은 기술의 발전으로 현재 사용되는 비대칭키 알고리즘에 대한 보안 위협이 존재할 수 있다는 우려가 있습니다. 따라서, 이에 대비하기 위해 post-quantum cryptography라는 새로운 암호화 기술을 개발 중이며, 이 기술은 양자 컴퓨팅에 대한 내성성을 가진 새로운 암호화 방법을 연구하는 것입니다. 이러한 노력들이 암호학 분야에서 계속해서 진행될 것으로 예상됩니다.
Post-quantum cryptography는 양자 컴퓨터의 발전으로 인해 기존의 대칭키와 비대칭키 암호화 방식이 안전하지 않게 될 가능성이 높아지면서, 대안으로 주목되고 있는 암호화 방식입니다. 이 방식은 양자 컴퓨터가 해결하기 어려운 수학적 문제를 활용하여 보안성을 보장합니다. 이를 위해 여러 가지 알고리즘들이 개발되었으며, 대부분의 경우 기존의 암호화 방식과는 완전히 다른 구조를 가지고 있습니다. 하지만 아직까지는 표준화가 이루어지지 않아서, 향후 적용 가능성이나 보안성 등이 더욱 검증되어야 합니다. Post-quantum cryptography는 양자 컴퓨팅 시대를 대비하여 미리 대비하는 방식으로, 암호화 분야에서 매우 중요한 연구 분야입니다.
암호화 기술의 대안?
암호화 기술을 발전하는 방향 외에 개인키/공개키가 필요없이 계정에 접근하는 방법이 블록체인 플랫폼 중 하나인 이더리움에서 제안되었습니다. 이더리움 ERC-4337은 계정 추상화(account abstraction)를 구현하기 위한 제안입니다. 이 제안은 기존의 합의 계층 프로토콜을 변경하지 않고 계정 추상화를 달성하려는 것이 특징입니다. 계층 상위에 위치한 의사 트랜잭션 객체인 UserOperation을 도입하여, 사용자는 UserOperation을 별도의 메모리 풀로 보내면 이를 패키징하여 특수한 역할을 하는 Bundler가 해당 트랜잭션을 처리하고 블록에 포함시킵니다.
이 제안은 계정 추상화의 목표를 달성하면서도 사용자가 EOA를 가질 필요 없이 스마트 계약 지갑을 사용할 수 있도록 하고 분산화를 보장합니다. 또한 블록체인 상의 모든 활동이 공개 메모리 풀 상에서 처리될 수 있게 하며, 이더리움 합의 계층에 대한 변경 없이도 빠른 채택이 가능합니다. 이 제안은 개인 정보 보호 애플리케이션, ERC-20 토큰을 사용한 수수료 지불, 스폰서링된 트랜잭션 등 다양한 용도를 지원할 수 있도록 노력하고 있습니다.
'암호화 알고리즘' 카테고리의 다른 글
ElGamal 알고리즘 (0) | 2023.10.11 |
---|---|
DSA 알고리즘 (0) | 2023.10.11 |
Diffie-Hellman 알고리즘 (1) | 2023.10.11 |
Rabin 알고리즘 (0) | 2023.10.11 |
RSA 알고리즘 (2) | 2023.10.11 |