콘텐츠로 이동

릴리즈 노트

1.15.1 | 2026/07/14

  • GPU 성능이 전반적으로 개선되었습니다.
  • GL 암호문에 대한 정수 및 실수 상수곱이 추가되었습니다.
  • 1.15.0 의 변경사항으로 인해 부트스트랩의 에러가 증가하는 문제를 해결하였습니다.
  • CPU 상의 pytorch tensor을 encode_matrix 의 인자로 사용한 경우 gpu or async gpu 모드의 엔진이 죽는 문제를 해결했습니다.

1.15.0 | 2026/07/08

  • GPU 성능이 전반적으로 개선되었습니다. async gpu 모드에서의 부트스트랩 성능이 GPU에 따라 2~3배 빨라졌습니다.
  • CKKS 암호문 및 평문을 회전하는 roll 함수가 추가되었습니다. 기존 rotate 함수와 동일한 동작을 합니다. 연내 출시 예정인 2.0 버전부터는 rotate는 왼쪽 회전을, roll은 오른쪽 회전을 의미하게 됩니다. 이는 동형암호 논문에서 일반적으로 왼쪽 회전을 사용하는 관례와 numpyroll 함수가 오른쪽 회전을 사용하는 관례를 따르기 위함입니다.
  • 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_cputo_cuda API를 통해서 자료구조를 수동으로 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

  • 최초 공개 버전