Coder Social home page Coder Social logo

asynchronousratchetingtree's Introduction

Asynchronous Ratcheting Tree

Asynchronous Ratcheting Tree (ART) is a protocol for end-to-end encrypted group messaging. It aims to provide scalable group messaging while maintaining strong security guarantees.

This repository contains the implementation used for the results in our ART paper. It contains implementations of ART and a pairwise Diffie-Hellman based ratcheting protocol which we used for comparison.

The implementation in this repository is purely academic example code, and should not be used in any production or security-critical system.

Requirements

Asynchronous Ratcheting Trees requires or works with:

Building and executing

The Makefile in this directory will compile our source and then run the benchmarks; simply run

make run

The Team

The team who worked on the Asynchronous Ratcheting Tree paper are as follows:

From Facebook:

  • Jon Millican

From Oxford University:

  • Katriel Cohn-Gordon
  • Cas Cremers
  • Luke Garratt
  • Kevin Milner

We are grateful to our collaborators from Oxford University for the considerable time and expertise that they put in to this paper, and into the formal proofs of the ART protocol.

Contributing

See the CONTRIBUTING file for how to help out.

License

Asynchronous Ratcheting Tree is CC-BY-NC-licensed.

asynchronousratchetingtree's People

Contributors

jmillican 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

asynchronousratchetingtree's Issues

InvalidKeyException when running with export-grade crypto

For Reasons, standard JRE installs do not support sane cryptography by default; you have to install a policy file. This causes the benchmark runs to fail on a stock install with the error below. To make this more usable, we should either

  1. change the ART code to use only small key sizes, or
  2. add a human-readable error message and instructions for installing the policy file
[2018-21-08 15:21:09.886] Illegal key size
java.security.InvalidKeyException: Illegal key size
        at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
        at javax.crypto.Cipher.implInit(Cipher.java:805)
        at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
        at javax.crypto.Cipher.init(Cipher.java:1396)
        at javax.crypto.Cipher.init(Cipher.java:1327)
        at com.facebook.research.asynchronousratchetingtree.crypto.Crypto.encrypt(Crypto.java:123)
        at com.facebook.research.asynchronousratchetingtree.dhratchet.DHRatchet.sendMessage(DHRatchet.java:92)
        at com.facebook.research.asynchronousratchetingtree.dhratchet.DHRatchet.sendMessage(DHRatchet.java:23)
        at com.facebook.research.asynchronousratchetingtree.Main.testRun(Main.java:190)
        at com.facebook.research.asynchronousratchetingtree.Main.dhTestRun(Main.java:102)
        at com.facebook.research.asynchronousratchetingtree.Main.main(Main.java:28)
Exception in thread "main" java.lang.RuntimeException
        at com.facebook.research.asynchronousratchetingtree.Utils.except(Utils.java:65)
        at com.facebook.research.asynchronousratchetingtree.crypto.Crypto.encrypt(Crypto.java:138)
        at com.facebook.research.asynchronousratchetingtree.dhratchet.DHRatchet.sendMessage(DHRatchet.java:92)
        at com.facebook.research.asynchronousratchetingtree.dhratchet.DHRatchet.sendMessage(DHRatchet.java:23)
        at com.facebook.research.asynchronousratchetingtree.Main.testRun(Main.java:190)
        at com.facebook.research.asynchronousratchetingtree.Main.dhTestRun(Main.java:102)
        at com.facebook.research.asynchronousratchetingtree.Main.main(Main.java:28)
make: *** [run] Error 1

License of the algorithm

This repository has a CC-BY-NC license. Does this only apply to the reference implementation or also to the usage of the algorithm itself?

Is there any chance that the algorithm gets opened up to use by everybody, just like the double ratchet from Open Whisper Systems?

SecureRandom is inconsistently used

Main.java uses SecureRandom, but crypto.Crypto.java uses Random with a comment that SecureRandom fails out of the box on Ubuntu openjdk. We should settle on one of those two (either is fine I think, as long as all uses of Random are commented as Bad Ideas) and use it consistently.

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.