Git Product home page Git Product logo

coniks-java's Introduction

CONIKS

Build Status Coverage Status

http://coniks.org

Introduction

CONIKS is a key management system that provides transparency and privacy for end-user public keys. CONIKS protects end-to-end encrypted communications against malicious or compromised communication providers and surveillance by storing users' encryption keys in tamper-evident and publicly auditable key directories on the server side. This allows messaging clients to verify the identity of users automatically, and prevents malicious/compromised servers from hijacking secure communications without getting caught.

Java Library

The pckages in this library implement the various components of the CONIKS system and may be imported as jar files individually.

  • coniks_common: Common message format definitions
  • coniks_server: Prototype key server
  • coniks_test_client: Prototype client CLI
  • crypto: Cryptographic algorithms and operations
  • util: Utility functions

The protos directory contains the Protocol Buffer message definitions for the client-server messages.

Disclaimer

Please keep in mind that this CONIKS Java implementation is under active development. The repository may contain experimental features that aren't fully tested. We recommend using a tagged release.

Documentation

Read the package's Java API (javadoc)

Current Core Developers

Releases of coniks-java will be signed with one of the following GPG keys:

coniks-java's People

Contributors

liamsi avatar marisbest2 avatar masomel 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

Watchers

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

coniks-java's Issues

Refactor server

Modularize the server a bit more and update any remaining terminology from older versions of the paper.

Use a client instance per user

Right now, the test client uses a single client instance which performs a given operation (e.g. registration) for x users and x keys, and no real mapping of usernames to keys is recorded client-side. The more realistic model is to have one client instance per user-key mapping.

Private mappings

Section 4.3.1 of the CONIKS paper and section 5 of the CONIKS 2.0 report describes a mechanism for making name-to-key mappings in the server private. This is mostly to protect the visibility of public keys via encryption, but could potentially be extended to hiding usernames as well. Only a whitelisted group of users could then access the private mappings. Implementing this requires a whitelisting protocol as well as a corresponding verification protocol.

Move protos to separate repo?

Maintaining the protobufs in a separate repo would make it easier to ensure that both CONIKS implementations use compatible protobuf messages. Any changes to the protobufs could then be easily propagated to both implementations. This repo would contain the compiled protobufs for each supported language, which can then be imported by each implementation.

Update terminology

Update any remaining terminology from older versions of the paper in the server and client. Also make sure messaging functions denote data format (e.g. Proto), and abstract away any data structure-specific terms in public API as much as possible (specifically, rename functions that say ULN change).

Switch to non-String keys

For simplicity, we were using Strings as the keys, but we should be allowing any key type. This issue should be solved when #2 is done.

Restructure code as in coniks-go repo

The existing code base should be reorganized into the following packages:

  • crypto
  • client
  • merkletree
  • keyserver
  • protocol
  • utils

These packages should be considered for the future:

  • bots for third-party account verification
  • storage for persistent storage backend hooks

Facilitate testing, prep time

Streamline testing, make it simpler for users to get server+client references running:

  • Replace in-class variables with env vars
  • Add no-ssl run option for testing

Write client and server unit tests

The past release removed a lot of functionality that made automated testing easier. The only way to test the system is by running the server and client directly since they can only communicate over the network.
#16 made interactive testing easy, but removed the ability to test the client automatically.

Cannot find required jar files

Hello,

When I run the command “mvn install” in path “coniks-java/coniks_server” it throws such error.

pastedgraphic-5

The same error will throw if I try to build a .jar by running “mvn package”. Therefore, I guess it may be because the target jar files are not in https://repo.maven.apache.org/maven2. May I know if there is any way that I can fix it, please?

Change protos to use bytes instead of repeated ints

Repeated ints in protos are compiled into ArrayLists of ints, so the current server and client demo implementations have utility functions to convert between byte[] and these ArrayLists. Instead ByteStrings should be used where the protos are used in the server and client.

Protos broke after key change code merge-in

From #8: something is wrong with the mixture of proto files, generated Java code, and the provided classes, for instance the field unknownFields in Hash isn't defined anywhere (not in the generated class nor in the underlying com.google.protobuf classes).

Implement cryptographic commitments

These are needed to keep the username and key data private from other CONIKS clients, and will be integrated into the upcoming Merkle tree library.

Build with Maven

We should replace building with make to building with Maven. This should facilitate automated testing and building with new features.

Remove any auditor functionality from server

Since the CONIKS auditor will be a separate software package, the CONIKS key server doesn't need to contain any functionality that also makes it an auditor (e.g. reply to observed STR requests). However, once auditors are implemented, the server may end up needing a mechanism for distributing its signed tree roots to auditors.

This also includes editing the protobufs.

Doesn't build currently

The project currently doesn't compile as it is:

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.