GithubHelp home page GithubHelp logo

hdevalence / danake Goto Github PK

View Code? Open in Web Editor NEW
7.0 7.0 2.0 197 KB

Danake is a lightweight micropayment system which allows anonymous services to bill for resource usage without compromising privacy or performance.

Home Page: https://lightweight.money

Rust 100.00%

danake's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

redshiftzero

danake's Issues

Consider misuse-resistance of the Transcript parameters

#18 (comment)

The current API takes a Transcript parameter, as recommended by the Merlin API. This is good because it means that applications can add arbitrary data and are required to give a domain separator. But it also allows the potential for misuse, since if the arbitrary data is identifying, this compromises the anonymity properties of the system.

Streamline presentation of CMZ13 credentials.

The current text has all of the required details but they're not well-presented; rewrite them after the whole library is complete.

This corresponds to removing the (WIP) marker on the CMZ13 credentials section in the notes.

Write a protocol simulator.

This should exercise the protocol by:

  • defining a sequence of "moves" that a client could perform (state transitions),
  • defining how those moves affect the client's state,
  • writing code that can execute a sequence of moves against a server.

Then this can be hooked up to proptest to do automatic exploration of the protocol's state space.

Implement wallet rollover

This is described in §6.3. The structure should probably follow along the lines of the topup and issuance protocols, namely, there should be a wallet::rollover module that contains all of the functions, messages, and intermediate states for the rollover protocol.

For instance, in the topup protocol, this ends up with topup::{Request, AwaitingResponse, Response} types, which represent respectively the user's request message for a topup, their state while awaiting a response, and the server's response message. The module has impl blocks on the Wallet and Secrets structs to generate the request and process it into a response respectively. Impl blocks can go anywhere in the module tree, which lets us group the implementations of the functions for each protocol into that protocol's submodule.

Describe key generation for wallet credentials.

Very rough notes:

The epoch mechanism requires that new issuance parameters be generated for every epoch. These issuance parameters may need some number of secret bytes, but since we can symmetrically expand a short secret into as much data as we need, we only have to consider how we generate a secret seed for each epoch.

Loss of key material means loss of availability, since all existing credentials can no longer be verified. Compromise of key material means credentials can be forged.

Forward security for issuance secrets requires that we have additional random inputs, but this cuts against ease of maintaining availability, since if there was no forward secrecy, all keys could be derived from a single seed that can be backed up by the issuer.

For now, deriving all keys from a single seed is the easiest thing to do.

Note: because this is the key schedule for the issuer's side, it's all hidden from the client anyways, so it can be changed later without breaking anything (though doing so in an existing deployment would be awkward / horrible).

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.