Cloudflare는 Cloudflare Workers 환경의 Web Crypto 인터페이스에 양자 컴퓨팅에 내성을 지닌 암호화 알고리즘 ML-KEM 및 ML-DSA에 대한 선택적 지원을 추가했다. 이번 변경으로 개발자는 JavaScript 또는 WebAssembly로 별도의 구현을 포함하는 대신 런타임 환경의 네이티브 인터페이스를 사용해 키 교환 및 디지털 서명을 위한 최신 대안을 테스트할 수 있다.
현재 지원은 호환성 플래그 webcrypto_modern_algorithms를 통해 제공된다. 최신 알고리즘 인터페이스가 아직 변경될 수 있는 초안에 기반하고 있기 때문이다. 첫 번째 버전은 키 캡슐화를 위한 ML-KEM-768과 서명을 위한 ML-DSA-44를 지원하며, ML-KEM-1024, ML-DSA-65 및 ML-DSA-87도 제공한다. 반면 ML-KEM-512는 Workers에서 사용되는 BoringSSL 버전이 이를 제공하지 않기 때문에 지원되지 않는다.
새로운 인터페이스가 제공하는 기능은 무엇인가?
이번 추가 사항에는 encapsulateBits(), decapsulateBits(), encapsulateKey(), decapsulateKey() 작업과 함께 getPublicKey(), SubtleCrypto.supports(), 그리고 이러한 알고리즘을 위한 JWK 키 가져오기 및 내보내기가 포함된다. 지원 여부 확인 인터페이스를 사용하면 라이브러리가 모든 JavaScript 환경에서 알고리즘을 사용할 수 있다고 가정하는 일을 피할 수 있다. 특히 Workers, Node.js, Deno 및 브라우저에서 코드를 실행할 때 유용하다.
ML-KEM은 자체적으로 완전한 암호화를 수행하지 않는다. 대신 Hybrid Public Key Encryption, 즉 HPKE와 같은 프로토콜이 키 스케줄링 및 AES-GCM과 같은 대칭 암호화 알고리즘과 함께 사용할 수 있는 공유 키 자료를 생성한다. ML-DSA는 Ed25519 및 ECDSA에 가까운 모델을 제공하며, 키 쌍을 생성하고 데이터를 서명하며 서명을 검증한다.
이 소식이 중요한 이유는 무엇인가?
양자 컴퓨팅에 내성을 지닌 암호화로의 전환은 한 번의 교체로 이루어지지 않으며, 프로토콜과 라이브러리, 서비스 및 배포 환경을 업데이트해야 한다. Cloudflare는 Web Crypto 내부에 네이티브 primitives를 제공하면 각 라이브러리와 함께 별도의 암호화 구현을 배포할 필요가 줄어들고, 개발자에게 ML-DSA를 사용한 JWT 서명이나 HPKE 내부에서 ML-KEM을 사용하는 것과 같은 통합을 테스트할 수 있는 실용적인 지점이 제공된다고 설명한다. 이는 OHTTP와 같은 프로토콜과도 관련이 있다.
실제로 이번 변경만으로 Workers 애플리케이션이 자동으로 양자 컴퓨팅 내성 애플리케이션으로 바뀌지는 않으며, 어떤 프로토콜에도 완전한 업그레이드 경로를 제공하지 않는다. 기본 구성 요소만 제공할 뿐이며, 적절한 프로토콜과 암호화 스위트 및 호환성 메커니즘을 선택하는 일은 여전히 라이브러리 개발자의 몫이다.
제약 사항과 다음 단계
Workers는 V8을 기반으로 구축된 workerd 환경의 Web Crypto 계층에서 BoringSSL의 primitives를 사용해 이러한 기능을 구현한다. 이번 추가에는 Web Platform Tests와 호환성 플래그 전용 테스트, 새로운 TypeScript 정의가 포함됐다.
현재 단계에는 최신 Web Crypto 제안에 포함된 다른 알고리즘인 SHA-3, cSHAKE, TurboSHAKE 및 ChaCha20-Poly1305가 포함되지 않았으며, HPKE도 Workers 자체의 인터페이스에 포함되지 않았다. Cloudflare는 ML-DSA 키와 서명이 RSA 또는 Ed25519의 대응 요소보다 훨씬 크다고 지적한다. 따라서 구현 포함 비용을 줄이고 성능을 개선하더라도 네트워크나 스토리지에서 키와 서명 및 암호문 크기가 증가하는 영향이 사라지는 것은 아니다.
지원 기능을 기본 모드로 전환할지는 초안이 안정화되고 라이브러리 개발자들의 피드백을 받을 때까지 아직 결정되지 않았다. 따라서 이번 추가 기능은 통합을 실험하고 검증하기 위한 수단으로 다뤄야 하며, 모든 애플리케이션이 즉시 전환할 준비가 되었다는 신호로 받아들여서는 안 된다.