1P by neo 10달전 | favorite | 댓글 1개

Go 생태계를 위한 양자 내성 암호화

  • filippo.io/mlkem768은 ML-KEM-768의 순수 Go 구현체로, 정확성과 가독성에 최적화됨.
  • ML-KEM은 NIST에 의해 표준화 과정 중이며 대부분의 산업에서 채택 중인 양자 내성 키 교환 메커니즘임.
  • 패키지는 코드 약 500줄, 주석 200줄, 테스트 650줄로 구성되어 있으며, golang.org/x/crypto/sha3를 제외하고는 의존성이 없음.
  • Go 표준 라이브러리로 통합될 예정이며, 리뷰의 용이성, 단순성, 철저한 테스트를 통해 높은 보안 확신을 제공하도록 설계됨.

사양 검증을 위한 구현

  • 대부분의 구현체와 달리, 이 코드는 참조 pq-crystals 라이브러리에서 포팅되지 않았으며, 다른 코드베이스를 자세히 읽지 않고 처음부터 작성됨.
  • FIPS 203 문서는 상세한 의사 코드, 철저한 정의, 일관된 타입 정보를 제공하여 훌륭한 구현 가이드임.
  • 코드의 가독성과 학습 자원으로서의 가치를 높이기 위해 함수와 변수 이름, 연산 순서를 FIPS 사양에 맞춰 신중하게 선택함.

구현을 위한 충분한 다항식과 선형 대수

  • 사양은 상대적으로 제한된 수학적 배경을 요구하지만, 구현자의 작업을 용이하게 하기 위해 'Kyber 구현을 위한 충분한 다항식과 선형 대수'를 작성함.
  • 나머지 부분은 독자에게 남겨진 연습 문제로, 1) 소수 3329에 대한 모듈로 산술, 2) [0, 3329)에서 [0, 2ᵈ)로의 압축 및 해제 함수의 구체적 구현, 3) 상수 시간 연산 보장이 포함됨.

가독성과 교육적 가치

  • 가독성은 구현의 주요 목표 중 하나로, 효과적인 리뷰와 차세대 유지 관리자 및 암호화 엔지니어를 위한 교육 자원으로서의 역할을 함.
  • 복잡한 함수의 가독성을 높이기 위해 코드를 길고 재사용성이 낮게 만드는 경우도 있음.

테스트를 통한 높은 보안 확신

  • 키 생성, 캡슐화, 탈캡슐화가 올바르게 이루어지는지 확인하고, 95% 이상의 테스트 커버리지를 유지함.
  • NIST 및 다른 구현체로부터 얻은 테스트 벡터와의 상호 운용성을 보장하고, 기대값과 비교하여 기본 필드 산술 연산을 철저히 테스트함.
  • CCTV 프로젝트의 일환으로 다른 구현체에서 재사용 가능한 테스트 벡터를 공개함.

성능

  • 성능은 주요 목표가 아니지만, 패키지는 유용할 만큼 충분히 빠를 필요가 있음.
  • ML-KEM은 충분히 빠르며, 이 간단한 구현체는 어셈블리 최적화된 P-256 및 X25519 구현체와 경쟁할 수 있음.
  • 성능 향상을 위해 Go 프로그래밍 패턴을 따르고 힙 할당을 최소화하는 등의 노력을 함.

ML-KEM 구현체를 Kyber v3로 사용하기

  • NIST는 Kyber의 Round 3 제출에 몇 가지 작은 변경을 함.
  • 몇 가지 실험적 프로토콜은 Kyber v3(또는 "draft00")를 기반으로 정의되어 있으나, 별도의 패키지를 만들 필요는 없음.
  • ML-KEM을 사용하여 공유 비밀 K를 생성한 다음, Kyber 공유 비밀을 생성하기 위해 추가적인 키 파생을 적용할 수 있음.

GN⁺의 의견

  • 양자 내성 암호화의 중요성: 양자 컴퓨팅의 발전으로 기존 암호화 기술이 취약해질 가능성이 있으므로, ML-KEM과 같은 양자 내성 암호화 기술의 개발과 표준화는 매우 중요함.
  • Go 언어의 확장성: 이 구현체는 Go 언어의 확장성과 유연성을 보여주며, 암호화 라이브러리를 표준 라이브러리에 통합할 계획을 갖고 있어 Go 개발자 커뮤니티에 유용한 자원이 될 것임.
  • 교육적 가치: 코드의 가독성과 교육적 가치에 중점을 둔 접근 방식은 다음 세대의 암호화 엔지니어와 관심 있는 개발자들에게 학습 자원으로서 큰 도움이 될 것임.
Hacker News 의견
  • 양자 컴퓨팅의 현재 상태에 대한 질문

    양자 컴퓨팅이 실제로 필요한 수준에 도달했는지, 아니면 AI처럼 정의가 변화하여 기존 제품을 새로운 이름으로 출시하는 것인지에 대한 의문 제기.

  • Kudelski Security로부터의 인사 및 공유

    Kudelski Security에서 양자 내성 암호화를 위한 Go 언어 라이브러리 중 하나를 중단해야 했던 최근 사례 소개. 자세한 내용은 링크된 글에서 확인 가능.

  • Go 언어로 구현된 암호 시스템에 대한 책 추천

    John Arundel의 Go 1.22 버전에 대한 암호 시스템 구현 책 소개. 책의 마지막 부분에서 양자 내성 암호화에 대한 언급이 있으며, NIST PQ 표준화 이후 책이 업데이트될 수 있음.

  • 다른 언어(Java, C# 등)의 구현에 대한 질문

    다른 프로그래밍 언어에서의 유사한 구현에 대한 정보를 묻는 질문.

  • Go 언어로 작성된 순수 구현에 대한 우려

    순수 Go 언어로 작성된 경우 타이밍/전력 사이드 채널 공격에 취약할 수 있다는 우려 표현.

  • Kyber v3 지원에 대한 흥미와 질문

    draft00/kyber v3를 지원하는 것에 대한 긍정적 평가와 SHA-3 없이 Kyber 90's 모드를 지원하기 위한 가능성에 대한 질문.

  • 32비트 시스템 콜 테이블에 대한 농담

    32비트 시스템 콜 테이블이 '곧 출시될 예정'이라는 농담.

  • 유니코드 변수명 사용에 대한 호감

    알고리즘 또는 구현의 질을 판단할 능력은 없지만, 변수명에 유니코드 사용을 매우 긍정적으로 평가.

  • FiloSottile의 다른 프로젝트에 대한 칭찬

    FiloSottile이 개발한 다른 도구인 'age'에 대한 호감 표현.

  • NIST FIPS 203 문서 링크 공유

    기사에서 언급된 NIST FIPS 203 문서에 대한 링크 공유.