Skip to content
Alexander Viand edited this page Jan 18, 2021 · 7 revisions

Microsoft SEAL is an FHE library written in C++ (it also provides a C# wrapper) developed by the Cryptography and Privacy Research Group at MSR Redmond.

SEAL implements the BFV and CKKS schemes, with a majority of the API being common to both. It offers leveled FHE operations and does not implement bootstrapping for either scheme.

Similar to other libraries such as HElib and Palisade, SEAL uses the double-CRT representation to store plaintexts. This involves performing a NTT, which is a specialization of the DFT over finite fields, on the polynomial. The polynomial's coefficients are stored in RNSformat relative to their prime.

Besides the standard homomorphic operations like addition and multiplication, SEAL offers plaintext-ciphertext operations that are significantly more efficient than their ciphertext-ciphertext equivalents but must be explicitly selected by the user. There are also dedicated optimized operations for squaring and exponentiation or multiplying/adding many ciphertexts that offer lower noise growth than naive approaches. As multiplication significantly increases noise, the multiply_many method automatically performs necessary noise maintenance and chooses the optimal execution order.

Earlier versions of SEAL included automated parameter selection based on estimating the noise growth. Since the estimated parameters were frequently non-competitive, this feature was removed. However, SEAL still ensures that the chosen parameters offer 128-bit security. The source code is available under an MIT license, is well documented, and includes a wide range of examples for both schemes. In addition, there are several demo applications (e.g., [AsureRun]) that demonstrate more complex use cases.

Tips & Tricks

Things built on top of SEAL

See also https://github.com/jonaschn/awesome-he

Clone this wiki locally