보안/양자내성암호(PQC)

ML-KEM은 결국 KEM이다|PQC 전환에서 먼저 알아야 할 역할

깊음위에 2026. 9. 23. 14:33
반응형

PQC 얘기를 하다 보면 이름부터 사람이 지칩니다. ML-KEM, Kyber, 격자, 하이브리드…. 그런데 실제로는 먼저 한 가지만 잡으면 됩니다. ML-KEM은 KEM입니다. 양자내성이라는 말이 앞에 붙었을 뿐, 하는 일은 기존 KEM과 같습니다. 통신을 시작할 때 양쪽이 같은 비밀값을 갖게 만드는 일입니다.

예전에 이 블로그에 KEM(Key Encapsulation Mechanism)을 정리한 적이 있습니다. 그 다음 글로 ML-KEM을 쓰는 이유도 거기에 있습니다. KEM을 이해했다면, PQC 전환에서 왜 ML-KEM이 먼저 나오는지도 어렵지 않게 연결됩니다.

시점부터 바로잡고 가겠습니다. ML-KEM을 담은 NIST FIPS 203은 2024년 8월에 이미 확정됐고, KEM을 어떻게 안전하게 구현하고 써야 하는지를 다룬 SP 800-227도 2025년 9월 18일에 최종 발행됐습니다. “곧 표준이 나올 것”이라는 표현은 이제 맞지 않습니다.

KEM은 데이터를 암호화하는 도구가 아니라, 열쇠를 만나는 방법입니다

KEM은 파일이나 메시지 전체를 직접 잠그는 알고리즘이 아닙니다. 통신하는 두 쪽이 공개된 인터넷을 사이에 두고도 같은 공유 비밀값을 만들 수 있게 해주는 절차입니다. 그 비밀값에서 실제 세션 암호화에 쓸 AES 같은 대칭키를 뽑아냅니다.

흐름은 이렇습니다. 서버가 공개키와 개인키를 만들고, 공개키는 밖으로 내놓습니다. 클라이언트는 그 공개키를 이용해 암호문과 공유 비밀값을 만듭니다. 서버는 자기 개인키로 암호문을 처리해 똑같은 공유 비밀값을 얻습니다. 이후의 통신은 이 비밀값에서 파생한 대칭키로 처리합니다.

그래서 KEM은 비유하자면 금고 자체라기보다, 서로 한 번도 만나지 않은 두 사람이 같은 금고 열쇠를 안전하게 준비하는 방식에 가깝습니다.

DH/ECDH와 닮은 점, 다른 점

기존 인터넷 통신에서는 Diffie-Hellman(DH), 또는 타원곡선을 쓰는 ECDH가 이 자리를 많이 맡았습니다. 두 방식 모두 각자가 비밀값을 하나씩 들고 공개값만 교환한 뒤, 상대 공개값과 자기 비밀값을 조합해 같은 공유 비밀값을 얻습니다. 서로의 비밀값을 직접 보내지 않는다는 점이 핵심입니다.

다만 그 안전성은 이산로그 문제에 기대고 있습니다. ECDH라면 타원곡선 이산로그 문제입니다. 현재 컴퓨터로는 풀기 어려운 문제지만, 충분히 큰 양자컴퓨터가 가능해지면 Shor 알고리즘으로 이 계열을 공격할 수 있다는 것이 알려져 있습니다. PQC 전환이 필요한 이유가 여기 있습니다.

ML-KEM은 모양이 조금 다릅니다. DH처럼 두 사람이 대칭적으로 값을 섞는 대신, 수신자가 공개키를 내놓고 송신자가 그 공개키로 공유 비밀값과 암호문을 만듭니다. 수신자는 개인키로 그 비밀값을 복원합니다. 이름이 key exchange가 아니라 key encapsulation mechanism인 이유입니다.

그렇다고 ML-KEM이 DH/ECDH를 라이브러리 한 줄 바꿔서 그대로 대체한다는 뜻은 아닙니다. 예를 들어 순방향 비밀성(Forward Secrecy)은 ML-KEM이라는 이름만으로 생기지 않습니다. 세션마다 일회성 키를 만들고 지우는지, 상대 인증을 어떤 서명 방식으로 붙이는지까지 포함한 프로토콜 설계의 결과입니다. 알고리즘 하나를 바꾼 뒤에도 이 부분은 다시 확인해야 합니다.

ML-KEM은 무슨 수학을 쓰나

ML-KEM은 모듈 격자 기반 KEM입니다. 정식 이름도 Module-Lattice-Based Key-Encapsulation Mechanism입니다. 그 바탕에는 MLWE(Module Learning with Errors)라는 문제가 있습니다.

이름이 거창하지만 아이디어는 생각보다 단순합니다. 공개된 행렬 A와 비밀 벡터 s가 있을 때, 정확한 A × s만 보인다면 s를 추정할 여지가 생깁니다. MLWE는 여기에 작은 무작위 오차 e를 섞어 A × s + e만 보이게 만듭니다. 공격자는 그 작은 오차 때문에 관측값에서 원래 비밀을 분리하기가 매우 어려워집니다.

반면 정당한 송신자와 수신자는 정해진 키와 절차를 공유하므로 그 오차를 감안해 같은 비밀값을 얻을 수 있습니다. 공격자에게는 잡음이 장벽이 되고, 설계된 수신자에게는 감당 가능한 오차가 되는 구조입니다. 이 문제를 여러 차원의 규칙적인 점 배열, 즉 격자 위에서 다루기 때문에 격자암호라고 부릅니다.

물론 “양자내성”은 영원히 깨지지 않는다는 보증서가 아닙니다. 현재 알려진 고전·양자 공격에 대해 MLWE 계열이 충분히 어렵다는 연구와 검증 위에 놓인 판단입니다. 그래서 NIST도 ML-KEM 하나에만 걸지 않고, 다른 수학 기반의 HQC를 백업 KEM으로 선정해 표준화 절차를 진행하고 있습니다.

ML-KEM 하나로 PQC 전환이 끝나지는 않습니다

여기서 가장 많이 헷갈리는 부분이 있습니다. ML-KEM은 키 수립을 위한 알고리즘입니다. 서명까지 바꿔주지는 않고, 실제 대용량 데이터를 직접 암호화하는 알고리즘도 아닙니다.

  • ML-KEM은 통신 상대와 공유 비밀값을 만드는 데 씁니다.
  • ML-DSA는 전자서명에 씁니다. 누가 보냈는지, 내용이 바뀌지 않았는지를 확인하는 역할입니다.
  • AES 같은 대칭키 알고리즘은 실제 데이터 암호화에 계속 쓰입니다.

따라서 “RSA를 ML-KEM으로 바꾸면 끝”이라고 보면 곤란합니다. TLS, VPN, 서비스 간 API, 원격접속처럼 먼저 안전한 세션 키를 만들어야 하는 구간에서 ML-KEM의 자리를 보고, 인증서·서명·키 관리·장비 호환성은 따로 확인해야 합니다.

512, 768, 1024 중 무엇을 고를까

FIPS 203에는 ML-KEM-512, ML-KEM-768, ML-KEM-1024 세 가지 파라미터 세트가 있습니다. 숫자가 커질수록 보안 강도는 높아지고, 성능과 키·암호문 크기의 부담도 함께 커집니다.

그래서 숫자가 가장 큰 것을 무조건 고르는 문제는 아닙니다. 보호하려는 정보가 몇 년 뒤에도 가치가 남는지, 지연 시간이나 대역폭 제약은 어떤지, 지금 쓰는 TLS 장비·VPN·라이브러리가 무엇을 지원하는지까지 같이 봐야 합니다. 알고리즘 선택은 마지막 단계에 가깝고, 그 전에 더 먼저 할 일이 있습니다.

지금 할 일은 도입 선언보다 암호 위치 찾기입니다

“우리도 PQC를 도입한다”는 말은 쉽습니다. 실제 일은 지금 쓰는 RSA·ECC가 어디에서 어떤 역할을 하는지 찾아내는 데서 시작합니다. 외부 TLS, VPN, 내부 서비스 간 통신, 원격접속, 장기 보관 데이터부터 목록으로 만들고, 각 지점에서 키 교환·인증·암호화에 어떤 제품과 알고리즘이 쓰이는지 기록해야 합니다.

그 다음에야 교체가 어려운 장비, 오래 보관되는 데이터, 외부 파트너와 맞물린 통신 구간부터 순서를 정할 수 있습니다. 이 작업을 흔히 크립토 인벤토리라고 부릅니다. ML-KEM을 도입하는 일보다, 무엇을 어디서 ML-KEM으로 바꿔야 하는지 아는 일이 먼저입니다.

ML-KEM은 PQC의 전부는 아닙니다. 그래도 KEM이 필요한 구간에서 가장 먼저 검토할 수 있는 표준화된 답입니다.


참고 자료

반응형