인사이트로 돌아가기
Company News

DESILO FHE 라이브러리 v2.0.0 릴리즈 노트

라이브러리 팀라이브러리 팀 · 디사일로
·

DESILO FHE 라이브러리 v2.0.0 가 출시되었습니다 (릴리즈 일자: 2026-10-15). 주요 변경 사항:

2.0.0은 2025년 4월 이후 첫 메이저 릴리스입니다. 이번 릴리스에는 FHE 애플리케이션을 더 쉽게 작성하고 더 빠르게 실행할 수 있도록 다양한 신규 기능과 최적화가 포함되었습니다. 약 6개월간의 개발과 1,500개 이상의 풀 리퀘스트를 통해 완성되었습니다.

이번 메이저 릴리스에는 일반적인 마이너 릴리스에서는 적용하기 어려운 호환성을 깨는 변경 사항(Breaking Changes)이 포함되어 있습니다. 2.0의 변경 사항에 대응하려면 이 릴리스 노트와 함께 다음 문서를 참고하시기 바랍니다. 링크

주요 변경 사항

  • CKKS와 GL의 백엔드 통합: CKKS와 GL이 동일한 자료구조와 연산 백엔드를 공유하도록 변경되었습니다. 기존에는 대부분의 최적화가 CKKS 연산에만 적용되었지만, 백엔드 공유를 통해서 앞으로는 개선 사항이 두 스킴에 동시에 적용할 수 있게 되었습니다.
  • compact 형식으로 통일: compact가 CKKS의 기본이자 유일한 데이터 표현 형식이 되었습니다. GL의 compact 지원은 현재 개발 중이며 곧 제공될 예정입니다.
  • GPU 비동기 모드 기본 적용: NVIDIA GPU를 사용할 때 async gpu 모드가 기본이자 유일한 실행 방식이 되었습니다. 이를 통해 GL의 성능도 크게 향상되었습니다.
  • 연산 키(Evaluation Key) 도입: 암호화와 복호화를 제외하고 키가 필요한 모든 연산에 사용할 수 있는 통합 키인 연산 키가 추가되었습니다. 이를 통해 기존에 3~4개의 키를 인자로 전달해야 했던 부트스트랩 함수를 훨씬 간단하게 사용할 수 있습니다.

신규 기능

  • 다중 GPU 지원: 서로 다른 device id를 사용하는 gpu 모드 엔진을 하나의 프로세스에서 동시에 생성할 수 있습니다. 이를 통해 여러 GPU를 사용하는 애플리케이션을 더 쉽게 작성할 수 있습니다.
  • GPU 데이터 전송과 연산의 중첩 실행: 서로 다른 두 개 이상의 gpu 모드 엔진을 사용하여 GPU 데이터 전송과 연산을 중첩 실행할 수 있습니다. 엔진 A가 엔진 B에서 GPU로 전송 중인 자료구조에 접근하려고 하면, 엔진 A는 엔진 B의 데이터 전송이 완료될 때까지 기다린 후 연산을 수행합니다. 별도의 동기화 작업은 필요하지 않습니다. 향후에는 더 세밀한 단위의 동기화도 지원할 예정입니다.
  • 부트스트랩 키의 활용 범위 확대: 부트스트랩 키를 roll, roll_many, rotate 연산에도 사용할 수 있습니다. 따라서 별도의 순환 키나 회전 키가 필요하지 않아 메모리 사용량을 줄일 수 있습니다. rotate_many도 곧 지원할 예정입니다.
  • CKKS 다자간 연산의 레벨 확대: CKKS 다자간 연산에서 사용할 수 있는 곱셈 레벨이 크게 증가하였습니다.
  • GL 병렬 모드 지원: GL에 parallel 모드가 추가되었습니다. 여러 CPU 스레드를 사용하여 모든 연산을 가속할 수 있습니다.
  • GL 직렬화 지원: GL 자료구조를 직렬화하고 역직렬화할 수 있습니다. 이를 통해 분산 애플리케이션을 더 쉽게 작성할 수 있습니다.
  • GL의 CPU/GPU 데이터 이동 지원: GL에서 to_cpu와 to_cuda 함수를 사용할 수 있습니다. 이를 통해 자료구조를 CPU 메모리와 GPU 메모리 사이에서 이동할 수 있으며, 모든 자료구조를 GPU 메모리에 한 번에 올릴 수 없는 프로그램을 구현하는 데 유용합니다.
  • GL 자료구조의 크기 확인: GL 자료구조에서도 nbytes와 serialized_nbytes 속성을 사용할 수 있습니다. 대표적인 자료구조의 크기는 링크에서 확인할 수 있습니다.
  • GL 공개 키 지원: GL에서 공개 키를 사용할 수 있습니다. 비밀 키를 노출하지 않고도 메시지를 암호화할 수 있습니다.
  • GL 상수 연산 지원: GL에서 암호문과 상수 사이의 덧셈, 뺄셈, 곱셈을 수행할 수 있습니다.
  • GL 다항식 연산 지원: GL에서 make_power_basis와 weighted_sum 함수를 사용할 수 있습니다.
  • 보안 파라미터 공개: 라이브러리에서 사용되는 보안 파라미터가 공개되었습니다. 자세한 내용은 링크를 참고하시기 바랍니다.

최적화

  • 부트스트랩 성능 향상: 부트스트랩 연산이 약 15% 빨라졌습니다.
  • 키 스위칭 및 리스케일 최적화: 키 스위칭과 rescale 연산이 최적화되었습니다.
  • GL 연산 성능 향상: 모든 GL 연산을 새롭게 작성하고 CKKS와 동일한 수준으로 최적화하였습니다.
  • 다자간 연산 성능 향상: 동일한 레벨을 기준으로 다자간 연산이 최대 2배 빨라졌습니다.
  • 키 메모리 사용량 감소: 비밀 키, 공개 키, 재선형화 키, 소형 부트스트랩 키를 제외한 모든 키의 메모리 사용량이 약 3% 감소하였습니다.
  • 난수 생성 성능 향상: 난수 생성 속도가 향상되었습니다. 난수 생성은 모든 키 생성, 암호화 및 다자간 복호화 과정에서 내부적으로 사용됩니다.

호환성을 깨는 변경 사항

이번 메이저 릴리스에는 여러 호환성 변경 사항이 포함되어 있습니다. 일반적으로 제거된 기능이나 설정은 실용성이 낮거나 실제 사용 사례가 거의 없는 반면, 유지보수와 테스트에 상당한 부담을 주던 것들입니다.

직렬화 형식

  • 직렬화 형식 전면 개편: 직렬화 형식이 전면 개편되었습니다. 이는 향후 계획된 다양한 신규 기능과 최적화에 대비하기 위한 변경입니다.
  • 하위 호환성 미지원: 이전 버전과의 하위 호환성은 제공되지 않습니다. 변경 사항이 너무 많아 하위 호환성을 유지하기가 지나치게 복잡해졌기 때문입니다. 이러한 호환성 변경은 일반적인 마이너(기능) 릴리스에서는 없을 예정입니다.

엔진 생성

  • 키워드 인자 필수: Engine 생성자의 모든 인자는 키워드 인자로만 전달할 수 있습니다. 이는 실수로 잘못된 인자를 전달하는 것을 방지하기 위함입니다.
  • 인자 이름 변경: use_bootstrap과 use_multiparty 인자의 이름이 각각 bootstrap과 multiparty로 간소화되었습니다.
  • 기본 엔진 설정: 인자 없이 엔진을 생성하는 것은 여전히 가능합니다. 기본값은 곱셈 레벨이 7인 CKKS 엔진입니다.

행렬 곱셈 및 희소(sparse) 인코딩

  • CKKS 행렬 곱셈 지원 중단: CKKS 행렬 곱셈은 더 이상 지원되지 않습니다. 희소 인코딩을 사용하지 않으면 행렬의 크기가 지나치게 커져 실행 시간과 메모리 요구량 모두 실용적인 수준을 벗어나기 때문입니다.
  • 희소 인코딩 지원 중단: 희소 인코딩도 더 이상 지원되지 않습니다. 희소 인코딩은 행렬의 크기를 줄이기 위해 도입되었지만, 행렬의 크기를 지나치게 줄이면 처리량도 감소하는 문제가 있었습니다.
  • 향후 행렬 곱셈 지원 계획: 현재는 희소 인코딩 대신 효율적인 패킹 기법을 사용하여 CKKS 행렬 곱셈을 최적화하는 방향으로 연구가 활발히 진행되고 있습니다. GL을 사용할 수도 있지만, 소규모 프로그램에서는 필요한 형상이 지나치게 클 수 있습니다. 향후 행렬 곱셈 코드를 쉽게 작성할 수 있도록 예제 코드나 라이브러리 기능을 제공할 예정입니다.

부트스트랩

  • 17레벨 부트스트랩으로 통일: 이제 17레벨 부트스트랩만 지원됩니다. 이 방식은 이전 릴리스에서 제공하던 세 가지 일반 부트스트랩 중 가장 많은 레벨과 가장 낮은 오차를 제공하면서도 성능 저하는 최소화한 방식입니다.
  • 손실 및 부호 부트스트랩 지원 중단: 손실 부트스트랩은 오차가 지나치게 커서 실용성이 낮았으며, 부호 부트스트랩은 적절한 활용 사례를 찾지 못하여 지원이 중단되었습니다.
  • mod_raise 및 사용자 지정 비밀값 지원 중단 예정: mod_raise와 사용자 지정 비밀값을 사용하는 비밀 키는 더 이상 사용을 권장하지 않습니다. 이 기능들은 사용자 지정 부트스트랩을 지원하기 위해 도입되었지만, 17레벨 부트스트랩의 모듈러스 구성에서는 더 이상 이러한 연산을 지원할 수 없습니다.
  • 대형 부트스트랩 키 지원 중단: 대형 부트스트랩 키는 더 이상 제공되지 않습니다. GPU 구현이 최적화되면서, 연산량을 줄이더라도 키의 메모리 사용량이 커지면 오히려 연산 속도가 느려질 수 있게 되었습니다. 향후 다른 최적화 기법을 통해 대형 부트스트랩 키를 다시 도입할 가능성은 있습니다.
  • 스테이지 수 지정 기능 제거: 부트스트랩의 스테이지 수를 직접 지정할 수 없습니다. 이 기능은 기존의 10레벨 부트스트랩에서만 사용할 수 있었습니다.

대형 CKKS 파라미터

  • 32768 슬롯 지원 중단: CKKS에서 슬롯 수 32768은 더 이상 지원되지 않습니다. 키의 크기가 지나치게 커서 실용성이 낮았으며, 특히 낮은 레벨(약 0~5레벨)에서는 인코딩과 디코딩 과정의 오차가 지나치게 컸습니다.
  • 더 높은 레벨을 위한 대안: 가장 큰 CKKS 엔진이 제공하는 36레벨보다 많은 레벨이 필요한 애플리케이션에서는 부트스트랩 엔진을 사용할 수 있습니다.

GL 형상

  • 가장 안쪽 차원의 최대 크기 256: 일부 GL 키는 가장 안쪽 차원의 크기에 비례하여 다른 키보다 커집니다. 가장 안쪽 차원의 크기가 256을 초과하는 GL 형상은 메모리 요구량이 지나치게 높아 더 이상 지원되지 않습니다.
  • 새로운 배치 크기 162 및 486 지원: 3의 거듭제곱에 대한 오일러의 파이 함수에 기반한 새로운 배치 크기 162와 486이 지원됩니다. 향후 5와 7의 거듭제곱을 기반으로 하는 배치 크기도 지원할 계획입니다. 현재 지원되는 형상은 링크에서 확인할 수 있습니다.

회전 및 순환

  • 이동 방향 구분: 이제 roll과 rotate는 서로 다른 방향으로 이동합니다. roll은 오른쪽으로, rotate는 왼쪽으로 이동합니다. 일반적으로 rotate는 FHE 전문가들이, roll은 데이터 사이언티스트들이 사용하는 용어입니다. 두 사용자 집단을 모두 지원하기 위해 양방향을 제공하게 되었습니다. 자세한 내용은 링크를 참고하시기 바랍니다.
  • 기존 rotate 코드의 변경 방법: 이전 버전의 이동 방향을 유지하려면 기존의 모든 rotate 호출을 roll 호출로 변경해야 합니다. 1.15 버전에서 도입된 roll을 사용하여 작성한 코드는 별도의 변경이 필요하지 않습니다.
  • 순환 키 지원 통합: 고정 순환 키와 순환 키를 CKKS와 GL 모두에서 사용할 수 있습니다. 이 키들은 이전 릴리스의 고정 회전 키 및 회전 키와 동일한 기능을 제공합니다.
  • GL 고정 순환 키 도입: GL에서는 기존에 고정 회전 키를 지원하지 않았으므로, 고정 순환 키가 새롭게 추가되었습니다.
  • axis 속성 추가: GL의 고정 순환 키에는 axis 속성이 추가되었습니다. CKKS에서는 이 속성의 값이 None입니다.
  • level 키워드 인자 필수: level 인자는 키워드 인자로만 전달할 수 있습니다. 이는 shift, axis, level이라는 세 정수 인자 사이의 혼동을 방지하기 위한 변경입니다.

CUDA 지원

  • CUDA 13.2 및 13.4만 지원: 구버전 CUDA 지원이 중단되었습니다. 이제 CUDA 13.2와 13.4만 지원됩니다. 이는 빌드 및 유지보수 비용을 줄이고 테스트를 간소화하며, 최신 CUDA 툴체인에 집중하기 위한 결정입니다.
  • CUDA 13.0 컴파일러 버그: CUDA 13.0에는 중첩된 스레드 분기(thread divergence)가 있는 커널에서 잘못된 결과를 조용히 생성할 수 있는 컴파일러 버그가 있습니다. 이 문제는 CUDA 12.8에서 처음 발생하였으며 CUDA 13.2.2에서 수정되었습니다. 따라서 CUDA 13.2와 13.4를 지원 대상으로 선정하였습니다. DESILO FHE 라이브러리에서 해당 버그가 발현된 적은 없지만, 예방적 조치로 CUDA 13.0 지원을 중단합니다.

사용자 지정 파라미터

  • 사용자 지정 계수 지원 중단: 다항식 계수 개수의 로그값과 특수 소수의 개수를 직접 지정하는 기능은 더 이상 지원되지 않습니다. 이 기능들은 실제 사용 빈도가 매우 낮았으며 사용자에게 제공하는 실질적인 이점도 크지 않았습니다.

GL 아다마르 곱셈

  • multiply 함수로 이름 변경: hadamard_multiply가 CKKS와 동일한 의미를 갖도록 multiply로 변경되었습니다.
  • 재선형화 키로 이름 변경: 아다마르 곱셈 키의 이름이 재선형화 키로 변경되었습니다.
  • 재선형화 없는 곱셈 지원: 이제 재선형화 키 없이도 아다마르 곱셈(즉, 일반적인 multiply)을 수행할 수 있습니다. 재선형화되지 않은 암호문은 일반적인 2개 대신 3개의 다항식을 포함하는데, 이 암호문을 직접 복호화할 수 있어 재선형화에 필요한 연산 비용을 절약할 수 있습니다. 향후 3개의 다항식을 가진 암호문에 대한 추가 연산도 지원할 예정입니다.

전체 릴리즈 노트: https://fhe.desilo.dev/latest/ko/release_notes/