Lattigo: lattice-based multiparty homomorphic encryption library in Go

Lattigo GitHub

Lattigo는 Go module로 구현된 homomorphic-encryption library입니다.

Lattigo는 Ring-Learning-With-Errors(RLWE) 기반의 homomorphic-encryption(동형암호화) 기본 요소와 Multiparty-Homomorphic-Encryption-based의 안전한 protocol을 구현하는 Go module입니다.

The library features:

  • An implementation of the full-RNS BFV, BGV and CKKS schemes and 그에 해당하는 multiparty versions.
  • Comparable performance to state-of-the-art(최신) C++ libraries.
  • Dense-key and sparse-key efficient and high-precision bootstrapping procedures for full-RNS CKKS.
  • A pure Go implementation that enables cross-platform builds, including WASM compilation for browser clients. -> 다양한 플랫폼에서 작동 가능하다.

Lattigo is meant to support HE(동형암호화) in distributed systems and microservices architectures, for which Go is a common choice thanks to its natural concurrency(동시성) model and portability(이식성).

Library overview

lattigo는 다음과 같은 패키지를 제공하는 라이브러리입니다:

  • lattigo/ring: RNS(RNS basis, Rescaling, Number Theoretic Transform) 기반의 다항식에 대한 모듈러 산술 연산을 제공합니다. RNS 기반 확장(extension), RNS 재조정(rescaling), 숫자 이론 변환(Number Theoretic Transform, NTT), uniform, Gaussian and ternary sampling 등이 포함됩니다.

RNS : Residue Number System / 숫자를 표현하고 처리하는 데 사용되는 특수한 숫자 체계이다. 모듈러 산술에 기반하며, 숫자를 작은 모듈러로 분해하여 처리한다.

  • lattigo/bfv: Brakerski-Fan-Vercauteren scale-invariant fully RNS(RNS 전체 범위) 변형의 동형 암호화 방식을 제공합니다 (homomorphic encryption scheme). 정수에 대한 모듈러 산술 연산을 제공합니다.

  • lattigo/bgv: Brakerski-Gentry-Vaikuntanathan 동형 암호화 방식의 fully RNS 변형을 제공합니다. 정수에 대한 모듈러 산술 연산을 제공합니다.

  • lattigo/ckks: Approximate Numbers(근사 숫자)에 대한 산술 연산을 위한 Full-RNS Homomorphic Encryption for Arithmetic for Approximate Numbers(HEAAN, a.k.a. CKKS) 방식을 제공합니다. 이 방식은 전통적인 형태의 복소수에 대한 근사 산술 연산과 켤레 불변(conjugate-invariant) 형태의 실수에 대한 근사 산술 연산을 제공합니다.

  • lattigo/dbfv, lattigo/dbgv and lattigo/dckks: BFV, BGV, CKKS 암호화 방식의 분산 또는 임계(threshold) 다중파티(multiparty) 버전입니다. 이를 통해 비밀 공유된 비밀 키를 사용한 안전한 다중파티 계산 솔루션을 구현할 수 있습니다.

  • lattigo/rlwe and lattigo/drlwe: 일반 RLWE 기반 multiparty 동형 암호화를 위한 공통 기반입니다. 이는 lattigo/bfv, lattigo/bgv, lattigo/ckks 패키지에서 사용됩니다.

  • lattigo/examples: Lattigo 라이브러리 사용 예제의 실행 가능한 Go 프로그램입니다. 각 하위 패키지에는 Lattigo 기본 기능을 더 자세히 보여주는 테스트 파일이 포함되어 있습니다.

  • lattigo/utils: 지원하는 구조체와 함수들입니다.

Versions and Roadmap

Lattigo 라이브러리는 초기에는 EPFL 데이터 보안 연구소에서만 개발되었습니다. 이후 버전 3.0.0부터는 Tune Insight SA에서 유지 및 지원되고 있습니다. Tune Insight SA

버전 3.0.0부터 모듈 이름은 github.com/tuneinsight/lattigo/v[X]로 변경되었으며, 공식 저장소는 https://github.com/tuneinsight/lattigo로 이동되었습니다. 이로 인해 Lattigo에 의존하는 모듈에는 다음과 같은 영향이 있습니다:

  • github.com/ldsec/lattigo/v2를 필요로 하는 모듈은 여전히 올바르게 빌드됩니다.
  • 버전 X.y.z >= 3.0.0으로 업그레이드하려면 의존하는 모듈은 github.com/tuneinsight/lattigo/v[X]/를 요구해야 합니다. 예를 들어, import를 github.com/tuneinsight/lattigo/v[X]/[package]로 변경하고 go mod tidy를 실행하여 의존성을 업데이트해야 합니다.

Lattigo의 현재 버전(v4.x.x)은 빠르게 진화하며 지속적으로 개발 중입니다. 따라서 이 주요 버전에서는 많은 버그 수정과 새로운 기능과 함께 역호환성이 없는 변경 사항이 여전히 있을 수 있습니다. 따라서 모든 Lattigo 사용자가 최신 Lattigo 버전으로 업데이트하는 것을 권장합니다.

See CHANGELOG.md for the current and past versions.

Stability (안정성)

포괄적인 기록 유지를 위해, 메인(main) 이외의 브랜치에 대해서는 병합(merge)보다 리베이스(rebase)를 우선시합니다. dev_ 접두사가 있는 브랜치는 활발히 개발 중인 브랜치로, 자주 리베이스됩니다. 따라서 이러한 브랜치에 의존하는 것은 권장하지 않습니다.

Pull Requests

외부 풀 리퀘스트는 우리 측에서 수행하는 것보다 상당한 작업량을 필요로 하는 신규 기능 제안에만 사용해야 합니다. 이러한 풀 리퀘스트를 열 계획이 있는 경우, 제안된 변경 사항이 개발 로드맵과 일치하는지 확인하기 위해 먼저 연락하십시오.

작거나 사소한 변경만 제안하는 외부 풀 리퀘스트는 이슈로 전환되어 닫힐 것입니다.

Support and Issues

GitHub 이슈는 라이브러리의 사용 또는 구현과 직접적으로 관련된 버그 보고 및 질문에만 사용해야 합니다. 다른 이슈는 닫힐 것이며, 이 경우 GitHub discussions이나 다른 주제별 포럼을 사용하는 것을 권장합니다. 라이브러리 또는 그 패키지의 예기치 않은 동작과 관련된 새로운 이슈는 원하지 않는 동작을 재현하는 self-contained main.go와 함께 제출되어야 합니다.

License

Lattigo is licensed under the Apache 2.0 License. See LICENSE.

Contact

If you want to contribute to Lattigo, to contact us directly or to report a security issue, please do so using the following email: lattigo@tuneinsight.com.

Citing

Please use the following BibTex entry for citing Lattigo:

@misc{lattigo,
    title = {Lattigo v4},
    howpublished = {Online: \url{https://github.com/tuneinsight/lattigo}},
    month = Aug,
    year = 2022,
    note = {EPFL-LDS, Tune Insight SA}
}

References

  1. Efficient Bootstrapping for Approximate Homomorphic Encryption with Non-Sparse Keys (https://eprint.iacr.org/2020/1203)
  2. Bootstrapping for Approximate Homomorphic Encryption with Negligible Failure-Probability by Using Sparse-Secret Encapsulation (https://eprint.iacr.org/2022/024)
  3. Somewhat Practical Fully Homomorphic Encryption (https://eprint.iacr.org/2012/144)
  4. Multiparty Homomorphic Encryption from Ring-Learning-With-Errors (https://eprint.iacr.org/2020/304)
  5. An Efficient Threshold Access-Structure for RLWE-Based Multiparty Homomorphic Encryption (https://eprint.iacr.org/2022/780)
  6. A Full RNS Variant of FV Like Somewhat Homomorphic Encryption Schemes (https://eprint.iacr.org/2016/510)
  7. An Improved RNS Variant of the BFV Homomorphic Encryption Scheme (https://eprint.iacr.org/2018/117)
  8. Homomorphic Encryption for Arithmetic of Approximate Numbers (https://eprint.iacr.org/2016/421)
  9. A Full RNS Variant of Approximate Homomorphic Encryption (https://eprint.iacr.org/2018/931)
  10. Improved Bootstrapping for Approximate Homomorphic Encryption
  11. Fully Homomorphic Encryption without Bootstrapping (https://eprint.iacr.org/2011/277)
  12. Homomorphic Encryption for Arithmetic of Approximate Numbers (https://eprint.iacr.org/2016/421)
  13. A Full RNS Variant of Approximate Homomorphic Encryption (https://eprint.iacr.org/2018/931)
  14. Improved Bootstrapping for Approximate Homomorphic Encryption (https://eprint.iacr.org/2018/1043)
  15. Better Bootstrapping for Approximate Homomorphic Encryption (https://eprint.iacr.org/2019/688)
  16. Post-quantum key exchange - a new hope (https://eprint.iacr.org/2015/1092)
  17. Faster arithmetic for number-theoretic transforms (https://arxiv.org/abs/1205.2926)
  18. Speeding up the Number Theoretic Transform for Faster Ideal Lattice-Based Cryptography (https://eprint.iacr.org/2016/504)
  19. Gaussian sampling in lattice-based cryptography (https://tel.archives-ouvertes.fr/tel-01245066v2)

The Lattigo logo is a lattice-based version of the original Golang mascot by Renee French.