Code Monkey home page Code Monkey logo

desilo / liberate-fhe Goto Github PK

View Code? Open in Web Editor NEW
95.0 4.0 6.0 3.26 MB

A Fully Homomorphic Encryption (FHE) library for bridging the gap between theory and practice with a focus on performance and accuracy.

Home Page: https://docs.desilo.ai/

License: BSD 3-Clause Clear License

Shell 0.04% Python 71.90% C++ 6.97% Cuda 20.75% C 0.34%
homomorphic-encryption cryptography cuda encryption fhe gpu-accelerated homomorphic-encryption-library privacy python data-science

liberate-fhe's People

Contributors

desilo-yongwoo avatar hanyul-ryu avatar inel-desilo avatar juwhan-k avatar yongwoo-lee-ccl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

liberate-fhe's Issues

Improve stability

Key switching renders the following additions unstable. Improve stability, and remove reduce_error in sum/mean utility functions.

For example, the following code snippet breaks the cipher text ca.

sk = engine.create_secret_key()
pk = engine.create_public_key(sk)
evk = engine.create_evk(sk)
gk = engine.create_galois_key(sk)

a = engine.example(0, 10)

ca = engine.encorypt(a, pk)

print("Encorypted")

total_it = 10
rot = 1

# Rotate test.
for i in range(total_it):
    ca = engine.galois_rotate(ca, gk, rot)
    a = np.roll(a, rot)
    err = np.abs(engine.absmax_error(a, engine.decrode(ca, sk, final_round=True)))
    print(f"{i}: {err}")


print('\n-------------------\n')

total_it = 40

# ca = engine.reduce_error(ca)
for i in range(total_it):
    ca = engine.add(ca, ca)
    a = a + a
    err = np.abs(engine.absmax_error(a, engine.decrode(ca, sk, final_round=True)).real)
    print(f"{i}: {err}")

v0.9.0

Liberate.FHE

  • set fhe
  • set csprng
  • set ntt
  • set cuda build
  • examples
  • readme
  • LICENSE

The recovered message breaks when the values are > 2^60.

Albeit decrypt and decode uses the by-the-book approach in recovering the message by using only the base channel, the fused version decrode does bias-guarding when an extra channel is available. However, the bias-guard only fixes the overflow of the first (DC) overflow. The bias guard consumes one level. That results in confinement of the recovered message into $-2^{60} < . < 2^{60}$ range. However, in the presence of yet another level (consuming one more level) after all the homomorphic operations, we can use 2 channels to recover the message and overcome the range limit.

If the base channel was denoted as b, and the extra channel e, we can convert the RNS representation $(e, b)$ to a Mixed Radix System (MRS) $(e', b)$, and then apply decrypt/decode (also may apply bias-guard) to each channel. Then sum them by $m = m_e * q_b +m_ b$, where m_e is the recovered message from $e'$, $m_{b}$ is from $b$, and $q_{b}$ is the base channel prime.

Additional computational cost will be minimal, since the MRS conversion is for only 2 channels. Also, it should be selectively performed according to the number of channels remaining after evaluating the homomorphic circuit, whatever that is.

Remove length parameter from the csprng API.

The length specifies the new length of the target state, i.e., a different polynomial length. That will result in striding of the state tensor and make the contiguous test fail. The length parameter is never used anyway.

Fix cov

cov doesn't need rescale_every as an input parameter.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.