Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VRF implementation #100

Closed
3 tasks done
dcoutts opened this issue Apr 15, 2020 · 3 comments
Closed
3 tasks done

VRF implementation #100

dcoutts opened this issue Apr 15, 2020 · 3 comments
Assignees
Labels
crypto Implementations of cryptography primitives and algorithms priority high issues/PRs that MUST be addressed. The release can't happen without this; shelley mainnet issues/PRs that need to be done for the Shelley mainnet shelley testnet issues/PRs that need to be done for the Shelley testnet

Comments

@dcoutts
Copy link
Contributor

dcoutts commented Apr 15, 2020

This is the tracking ticket for the VRF crypto implementation to be used in Praos.

Needed for IntersectMBO/ouroboros-network#261.

For those able to access it, the requirement discussion is here https://jira.iohk.io/browse/CDT-59

The algorithm we have chosen ​is ECVRF-ED25519-SHA512-Elligator2 as described in the draft IETF specification https://tools.ietf.org/html/draft-irtf-cfrg-vrf-06.

We have verified with the Ouroboros Praos authors and our internal crypto auditors that this is a suitable algorithm choice for Praos -- provided that the validation in the IETF spec section 5.6 is done.

The underlying implementation we have chosen is the implementation by the Algorand, as implemented in their fork of the libsodium library
https://github.com/algorand/libsodium/tree/draft-irtf-cfrg-vrf-03/src/libsodium/crypto_vrf

Our internal crypto auditors have reviewed this implementation and are satisfied that it implements ECVRF-ED25519-SHA512-Elligator2 as described in the IETF draft, and are satisfied that it performs the extra validation checks from section 5.6 that are required for the use in the context of Praos.

The strategy to integrate is to implement a Haskell FFI binding to the VRF C code and use that binding library to instantiate the existing crypto class being used by consensus.

Tasks

  • decide where the binding code should live
  • establish and check the feasibility of the relationship between the C API and the target Haskell API
  • establish how to compile and link against the libsodium fork

Actual implementation split off into separate tickets:

@dcoutts dcoutts transferred this issue from IntersectMBO/ouroboros-network Apr 15, 2020
@dcoutts dcoutts added shelley mainnet issues/PRs that need to be done for the Shelley mainnet shelley testnet issues/PRs that need to be done for the Shelley testnet labels Apr 15, 2020
@tdammers
Copy link
Contributor

Compiling & linking, remaining sub-tasks:

  • move our fork somewhere more reasonable
  • document its existence and how to install it
  • instrument nix build setup to fetch, build, and use the fork

@kevinhammond kevinhammond added the priority high issues/PRs that MUST be addressed. The release can't happen without this; label Apr 20, 2020
@i-o-m
Copy link

i-o-m commented Apr 21, 2020

@tdammers and @nc6 Hi Tobias and Nick, could we please make sure to break down development and other tasks into separate GitHub issues. We need this to give visibility of activities within a Sprint.

Could you please also create a new label 'Cryto' to label all tickets.

@tdammers tdammers added the crypto Implementations of cryptography primitives and algorithms label May 4, 2020
@tdammers
Copy link
Contributor

tdammers commented May 4, 2020

Ticket / tasks split up into #110, #111, #112.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crypto Implementations of cryptography primitives and algorithms priority high issues/PRs that MUST be addressed. The release can't happen without this; shelley mainnet issues/PRs that need to be done for the Shelley mainnet shelley testnet issues/PRs that need to be done for the Shelley testnet
Projects
None yet
Development

No branches or pull requests

6 participants