Code Monkey home page Code Monkey logo

rlwe's Introduction

Note: This repository will no longer be maintained. It is being replaced by: https://github.com/Art3misOne/newhope

This software is an implementation of the Ring Learning With Errors (RLWE) key exchange using the style guide from Open Whisper Systems. This implementation originally followed the one published by Singh and Chopra:

More recent work was published by Microsoft introducing additional optimizations for Number Theoretic Transform computations. These have now been incorporated making the average runtime per exchange about 2.75 times faster.

With these optimizations, a new parameter has been introduced to support regression testing and facilitate compatibility between different Fourier optimizations. Keys can either be transmitted in the Fourier domain (for greater efficiency) or the Ordinary domain (for interoperability). Preliminary tests indicate that it takes about 1.17 times as long to complete an exchange transmitting in the ordinary domain than in the Fourier domain.

Note of caution: This implementation (and the RLWE key exchange in general) is not a drop-in replacement for ECDH. In ECDH, both parties generate a key pair, transmit their public keys, and compute the shared agreement from their own private key and the other party's public key.

   Generate key pair                               Generate key pair
   Transmit public key                             Transmit public key
   Wait (receive public key)                       Wait (receive public key)
   Agreement (their public, my private)            Agreement (their public, my private)

The only required synchronicity is that one must receive the other party's public key before computing the shared agreement. In RLWE, one party must compute the reconciliation data which both parties use for computing the shared key.

   Generate key pair                               Generate key pair
   Transmit public key
                                                   Wait (receive public key)
                                                   Compute rec data
                                                   Transmit public key and rec data
   Wait (receive pub key, rec data)                Agreement (their public, my private, rec data)
   Agreement (their public, my private, rec data)

Greater synchronicity is required and care must be taken when replacing an existing key exchange with RLWE.

rlwe's People

Contributors

art3misone avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

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.