릴리즈 노트
2.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개의 다항식을 가진 암호문에 대한 추가 연산도 지원할 예정입니다.
1.17.0 | 2026/09/28
- 키 스위칭 연산의 성능이 개선되었습니다. 켤레화, 회전, 재선형화, 부트스트랩이 빨라집니다.
gpu모드에서cuda_ntt_thread_count와cuda_random_thread_count파라미터가 적용이 안되는 문제를 해결하였습니다.
1.16.0 | 2026/08/05
- 병렬 CPU 모드의 NTT와 INTT 성능이 개선되었습니다.
gpu및async gpu모드에서의고밀도모드의 성능이 향상되었습니다.gpu및async gpu모드에서 설정 가능한 파라미터가 추가되었습니다.cuda_ntt_thread_count와cuda_random_thread_count를 통해 NTT 및 랜덤 연산의 CUDA 스레드 개수를thread_count와 별도로 설정할 수 있습니다. 두 파라미터의 기본값은 모두 512이며,async gpu모드에서는thread_count의 기본값이 1024로 증가했습니다.
1.15.1 | 2026/07/14
- GPU 성능이 전반적으로 개선되었습니다.
- GL 암호문에 대한 정수 및 실수 상수곱이 추가되었습니다.
1.15.0의 변경사항으로 인해 부트스트랩의 에러가 증가하는 문제를 해결하였습니다.- CPU 상의 pytorch tensor을
encode_matrix의 인자로 사용한 경우gpuorasync gpu모드의 엔진이 죽는 문제를 해결했습니다.
1.15.0 | 2026/07/08
- GPU 성능이 전반적으로 개선되었습니다.
async gpu모드에서의 부트스트랩 성능이 GPU에 따라 2~3배 빨라졌습니다. - CKKS 암호문 및 평문을 회전하는
roll함수가 추가되었습니다. 기존rotate함수와 동일한 동작을 합니다. 연내 출시 예정인2.0버전부터는rotate는 왼쪽 회전을,roll은 오른쪽 회전을 의미하게 됩니다. 이는 동형암호 논문에서 일반적으로 왼쪽 회전을 사용하는 관례와numpy의roll함수가 오른쪽 회전을 사용하는 관례를 따르기 위함입니다. - CKKS 암호문과 평문 행렬로
multiply_matrix함수를 호출 할 때, 암호문이 NTT 형태이고 두 자료구조의 레벨이 일치하면 결과값이 잘못되는 버그를 수정하였습니다.
1.14.1 | 2026/06/22
async gpu모드에서 부트스트랩 키 혹은 행렬 곱셈 키를 제대로 읽어들이지 못하는 버그를 수정했습니다.
1.14.0 | 2026/06/01
고밀도(compact)모드의14 레벨구성에서 부트스트랩 파라미터를 정밀도가 향상되도록 조정하였습니다. 기존 파라미터는 실제 활용에 충분하지 않은 수준의 정밀도를 제공하고 있었습니다. 이에 따라, 해당 구성에서 이전 버전의 라이브러리로 생성된 자료구조는 현재 버전 및 이후 버전과 호환되지 않습니다.- CUDA 13.2를 지원합니다.
1.13.0 | 2026/05/06
- 부트스트랩 연산 후에 17 레벨이 남는 새로운 파라미터를 추가하였습니다. 기존에는 최대 14 레벨까지 남았었습니다. 손실 부트스트랩과 부호 부트스트랩은 해당 파라미터를 지원하지 않습니다. 아직은 실험적인 구현이라 암호문이나 키가 추후에 호환이 안될 수 있는 점 주의 부탁드립니다.
async gpu모드를 지원합니다. 동형 암호 연산을 비동기적으로 처리하여 GPU에 따라 1.5배에서 2배 가량 빠릅니다. 정확한 속도 측정을 위해 sync 함수도 추가되었습니다. 아직은 실험적인 구현이라 이 모드에서 생성한 자료구조는 같은 엔진에서만 사용해야합니다. 같은 쓰레드의 다른 엔진에서 활용하면 문제가 발생할 수 있습니다.
1.12.0 | 2026/04/29
- Gentry-Lee (GL) 동형암호에 대한 다항식 연산을 지원합니다.
evaluate_polynomial함수를 통해 사용 가능합니다. 경량 평문과 암호문 간의 덧셈 및 뺄셈이 가능합니다.- 암호문과 평문, 혹은 암호문과 경량 평문의 덧셈과 뺄셈에 대해
제자리연산을 지원합니다. 제자리 연산은 메모리 접근량이 줄기 때문에 일반적으로 더 빠릅니다. 추후에 더 많은 제자리 연산을 지원할 예정입니다. path.Pathlib를 파일 입출력 함수에서 바로 사용할 수 있습니다. 기존에는str로 변환해서 사용해야 했었습니다.gpu모드에서의NTT연산의 성능이 개선되었습니다.- 파이썬
GIL(global interpreter lock) 을 대부분의 연산에서 해제합니다. 다른 쓰레드의 연산과 동형 암호 연산의 병렬 수행이 가능해집니다. 다음 연산들은 해제되지 않습니다:- encrypt, decrypt, encode, decode, read, write, serialize, deserialize, to_cpu, to_gpu
고밀도모드에서 덧셈을 너무 많이 하는 경우에 오버플로우가 발생하는 문제를 수정하였습니다.고밀도모드와gpu모드를 같이 사용하는 경우 발생하던 메모리 누수를 수정하였습니다.- 저장 방식을 수정하였습니다. 앞으로 추가될 기능들을 위한 수정이라 저장해둔 자료구조가 있다면 신규 라이브러리로 읽어서 다시 저장하는 것을 권장합니다. 기존 버전의 라이브러리로 저장한 자료구조는 새 라이브러리에서 읽어들일 수 있지만, 새 라이브러리에서 저장한 자료구조는 기존 버전의 라이브러리로 읽어들일 수 없습니다.
1.11.2 | 2026/03/31
- NTT 상태의 암호문에서 일반 배열을 빼는 경우에 대해서
parallel혹은gpu모드의 엔진이 죽는 문제를 해결했습니다.
1.11.1 | 2026/03/30
고밀도 (compact)모드의 버그들을 수정했습니다.gpu모드에서 최대 레벨 미만의 키들이 제대로 기능하지 않는 문제를 해결했습니다.parallel모드에서 레벨 다운이 우발적으로 오동작하는 문제를 해결했습니다.- 경량 평문과의 곱셈이 작동하지 않는 문제를 해결했습니다.
- 리스케일 되고 NTT 상태인 암호문 혹은 평문에 대한 레벨 다운이 작동하지 않는 문제를 해결했습니다.
1.11.0 | 2026/03/25
- 소형 부트스트랩 키를 활용한 부트스트랩 연산이 5~10% 가량 수행시간이 줄었습니다.
- 다음 키들의 크기가 줄었습니다.
- 부트스트랩 키, 손실 부트스트랩 키, 머지 부트스트랩 키, 행렬 곱셈 키
고밀도 (compact)모드를 지원합니다. 데이터를 보다 촘촘하게 저장하여 자료구조 크기가 전반적으로 줄어듭니다. 다자간 연산과 36 레벨 초과는 지원하지 않습니다.- 행렬 곱셈 키를 암호문의 최대 레벨만큼 생성하는 것이 가능해졌습니다. 많은 경우에 행렬 곱셈 키의 최대 레벨이 1만큼 증가합니다.
1.10.0 | 2026/02/11
병합 부트스트랩을 지원합니다. 실수 암호문 두개를 동시에 부트스트래핑하는 연산이라 효율적입니다. 일반, 손실, 사인 부트스트랩을 전부 지원합니다. 부트스트랩 키를 사용하는 부트스트랩의 경우 별도의 병합 부트스트랩 키를 사용합니다. 이외에는 기존의 키를 활용합니다.- 자료구조 대신에
None을 입력 값으로 사용하지 못하도록 변경되었습니다.
1.9.0 | 2026/01/29
- 부트스트랩 연산 후에 14 레벨이 남는 새로운 파라미터를 추가하였습니다. 기존에는 최대 10 레벨까지 남았었습니다. 손실 부트스트랩과 부호 부트스트랩은 해당 파라미터를 지원하지 않습니다. 아직은 실험적인 구현이라 암호문이나 키가 추후에 호환이 안될 수 있는 점 주의 부탁드립니다.
경량 평문 (Light Plaintext)을 추가하였습니다. 경량 평문은 일반 평문에 비해 훨씬 크기가 작습니다. 다만 저장할 수 있는 값 또한 작아서,[-1, 1]사이의 값들을 인코딩하는 것을 권장합니다. 다자간 연산에 대해서는 지원하지 않습니다.경량 행렬 평문 (Light Plain Matrix)을 추가하였습니다. 경량 행렬 평문은 일반 행렬 평문에 비해 훨씬 크기가 작습니다. 다만 저장할 수 있는 값 또한 작아서,[-1, 1]사이의 값들을 인코딩하는 것을 권장합니다. 다자간 연산에 대해서는 지원하지 않습니다.희소 행렬 평문 (Sparse Plain Matrix)을 추가하였습니다. 희소 행렬에 대한 인코딩을 가능케 해서 행렬 곱 연산의 시간을 줄이고 메모리 사용량 또한 줄입니다.희소 경량 행렬 평문 (Sparse Light Plain Matrix)도 생성할 수 있습니다. 다자간 연산에서는희소 행렬 평문은 지원하고희소 경량 행렬 평문은 지원하지 않습니다.- 부트스트랩 키 또는 손실 부트스트랩 키를 사용해서 암호문을 회전할 수 있게 되었습니다.
to_cpu와to_cudaAPI를 통해서 자료구조를 수동으로 GPU에 넣고 뺄 수 있게 되었습니다.
1.8.0 | 2025/12/05
- Gentry-Lee (GL) 동형암호를 지원합니다. 행렬에 특화된 신규 동형암호 기법으로 효율적인 행렬 연산 수행이 가능합니다. 아직은 실험적인 구현이라 암호문이나 키가 추후에 호환이 안될 수 있는 점 주의 부탁드립니다.
- 실수 값만을 포함한 암호문에 대해 손실 부트스트랩 및 부호 부트스트랩의 소요시간을 개선하였습니다.
- 레벨 다운 연산이 최적화되었습니다. 파급 효과로 부트스트랩 연산도 성능이 소폭 개선되었습니다.
- 18 레벨 혹은 19레벨로 인코딩 혹은 암호화를 하는 경우 CKKS 엔진이 CPU 병렬 모드에서 단일 스레드 모드로 변경되는 버그를 수정하였습니다.
1.7.0 | 2025/11/12
- 행렬 곱셈을 지원합니다. 행렬 곱셈 키를 사용해서 빠르지만 메모리를 많이 사용하는 방식과 회전 키를 사용해서 느리지만 메모리가 덜 필요한 방식 두가지를 지원합니다. 다자간 연산은 아직 지원하지 않습니다.
- 파이토치 텐서를 입력으로 지원합니다. 파이토치는 사용자 편의에 따라 다양한 버전을 사용할 수 있도록 의존성을 지정하지 않았습니다.
- 부호 부트스트랩을 지원합니다. 이 특별한 부트스트랩 방식은 부호 (-1, 1) 값들에 대한 더 정확한 부트스트랩을 지원합니다. 손실 부트스트랩 키를 사용합니다.
- 파이썬 버전 3.10부터 3.14까지를 지원합니다. 파이썬 3.9는 더이상 지원하지 않습니다.
- CUDA 13.0을 지원합니다.
1.6.0 | 2025/10/21
- 암호문의 합연산을 처리하는
sum함수를 지원합니다. 합연산을 수행할 때의 축도 지정 가능합니다. - 복수의 암호문을 하나의 큰 암호문으로 쌓는
vstack함수를 지원합니다.
1.5.1 | 2025/09/30
slot_count를 초과하는 인풋에 대해서 비밀 키를 사용한 암호화가 CPU Parallel 에서 제대로 처리되지 않는 문제를 해결하였습니다.
1.5.0 | 2025/09/25
- 희소 벡터에 대한 처리를 지원합니다. 암호문 및 평문에서 최대치보다 적은 양의 값들을 포함해서 부트스트랩 연산이 빨라집니다.
- 손실 부트스트랩 연산을 지원합니다. 손실 부트스트랩은 일반 부트스트랩에 비해서 오류가 늘지만 빠릅니다. 정확하게는
mod-raise연산 이전에slot-to-coeff를 하는 방식입니다. - 쳬비셰프 다항식 연산을 지원합니다. 고차항에 대한 오류가 적어 동형암호 활용에 자주 사용되는 연산 방식입니다.
- NTT와 INTT 연산에 대한 CUDA 커널 호출 방식을 최적화하였습니다.
- 길이 0의 인풋을 암호화할 때 엔진이 죽는 문제를 해결했습니다.
1.4.0 | 2025/08/26
- 인코딩과 디코딩이 온전히 GPU 환경에서 수행됩니다. 기존에는 CPU에서 연산하고 GPU로 옮기는 방식이었습니다.
- 저장 방식을 수정하였습니다. 앞으로 추가될 기능들을 위한 수정이라 저장해둔 자료구조가 있다면 신규 라이브러리로 읽어서 다시 저장하는 것을 권장합니다. 기존 버전의 라이브러리로 저장한 자료구조는 새 라이브러리에서 읽어들일 수 있지만, 새 라이브러리에서 저장한 자료구조는 기존 버전의 라이브러리로 읽어들일 수 없습니다.
- GPU 환경에서 NTT 상태의 암호문 혹은 평문을 리스케일 하는 경우에 엔진이 죽는 문제를 수정하였습니다.
- CUDA 12.9를 지원합니다.
- 부트스트랩 함수에 대한 일부 벤치마크를 공개합니다.
1.3.0 | 2025/07/24
- 비밀 키를 통한 암호화를 지원합니다.
- 덧셈과 뺄셈에 대해 제자리 연산을 지원합니다. 제자리 연산은 메모리 접근량이 줄기 때문에 일반적으로 더 빠릅니다. 추후에 더 많은 제자리 연산을 지원할 예정입니다.
- 리스케일된 암호문 혹은 평문에 대해
decode를 제외한 모든 연산을 지원합니다. 기존에는 레벨 감소와 곱셈과 같은 일부 연산만 가능했습니다. - NTT와 INTT를 공개적으로 지원합니다. 하나의 암호문 혹은 평문을 다른 인자들과 반복해서 곱하는 경우에 사용하면 더욱 효율적인 연산이 가능합니다.
1.2.0 | 2025/06/25
- 다항식 연산을 위한 보조함수들이 추가되었습니다. 다음 함수들이 추가되었습니다.
evaluate_polynomial,make_power_basis,weighted_sum - 다자간 연산의 경우 최대 곱셈 횟수가 1회 이하인 경우에 최적화된 파라미터를 추가하였습니다.
- 저장 방식을 수정하였습니다. 기존 버전의 라이브러리로 저장한 자료구조는 새 라이브러리에서 읽어들일 수 있지만, 새 라이브러리에서 저장한 자료구조는 기존 버전의 라이브러리로 읽어들일 수 없습니다.
- 곱셈 레벨이 많이 소진 되었을 경우의 정밀도를 개선하였습니다.
1.1.1 | 2025/06/12
- NVIDIA H100 GPU에서 NTT가 오동작하는 오류를 해결하였습니다.
1.1.0 | 2025/05/28
- 신규 기능
- 대형 부트스트랩 키로 더 빠르게 부트스트래핑을 할 수 있게 되었습니다. 메모리 사용량은 증가합니다.
- 회전 키를 사용한 부트스트랩이 5% 정도 빨라졌습니다.
- 비밀 키의 비밀 값을 지정할 수 있게 되었습니다.
- Mod raise 함수가 추가되었습니다.
- 다중 회전 함수를 추가해 하나의 암호문을 여러번 회전해야하는 경우 더 빠르게 연산할 수 있습니다.
- 디스크가 아니라 메모리로 직접 직렬화 및 역직렬화가 가능해졌습니다.
- 버그 해결
- CPU 병렬화에서 스레드 갯수를 \(2^{n}\)이 아닌 값을 준 경우의 오류를 해결하였습니다.
Mod raise 함수와 다중 회전 함수가 생겼기 때문에 이제 직접 부트스트래핑 함수를 구현해볼 수 있습니다.
1.0.3 | 2025/05/21
- 최대 곱셈 횟수를 초과하려는 경우에 대한 에러 메시지 추가
- 자료구조의 크기를 확인할 수 있는 nbytes / serialized_nbytes 속성 추가
- 회전 키를 사용한 부트스트래핑의 경우 stage count 4 에서 오류나던 버그 수정
1.0.2 | 2025/05/14
- 키 스위칭 연산의 오류 감소
- MacOS 11.0 이상 지원
1.0.1 | 2025/05/08
- encrypt 함수에서 level 파라미터가 사용되지 않던 버그 수정
- trio ciphertext decrypt 함수가 입력된 암호문을 수정하던 버그 수정
- CUDA 12.1 / 12.4 지원
1.0.0 | 2025/04/30
- 최초 공개 버전