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

System API for threshold key derivation (vetKD) #3763

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

mraszyk
Copy link
Contributor

@mraszyk mraszyk commented Nov 15, 2024

Proposes two new system APIs for the prospective threshold key derivation (vetKD) feature in the management canister.

Notes

  • The API is designed so that it allows for implementing the scheme referred to as An aggregatable vetBLS scheme (2) in the related talk at the Real World Crypto Symposium (RWC) 2023.
  • The APIs are designed to be similar to the ones for threshold ECDSA.
  • Information regarding usage of vetKD keys is not included in the interface spec on purpose. The idea is that the relevant information will later be provided in the Internet Computer Developer Docs.

Alternatives considered

We considered the following alternative API, where one would have two sets of API pairs: one pair for threshold key derivation, and a second one for threshold BLS signatures.

  // Threshold key derivation
  vetkd_public_key : (record {
    canister_id : opt canister_id;
    key_id : record { curve : vetkd_curve; name : text };
  }) -> (record { public_key : blob; });
  vetkd_encrypted_key : (record {
    derivation_id : blob;
    key_id : record { curve : vetkd_curve; name : text };
    encryption_public_key : blob;
  }) -> (record { encrypted_key : blob; });
  // Threshold BLS signature
  bls_public_key : (record {
    canister_id : opt canister_id;
    derivation_path : vec blob;
    key_id : record { curve : vetkd_curve; name : text };
  }) -> (record { public_key : blob; });
  sign_with_bls : (record {
    message : blob;
    derivation_path : vec blob;
    key_id : record { curve : vetkd_curve; name : text };
  }) -> (record { signature : blob; });

This alternative was discarded, however, because there is a concern that not all possible future use cases can be covered with this split API approach.

TODOs

  • Determine if we should specify further constraints on input data (e.g., max size of derivation_id, etc.)

Copy link

github-actions bot commented Nov 15, 2024

🤖 Here's your preview: https://6ke4v-3aaaa-aaaam-abc3q-cai.icp0.io

@mraszyk mraszyk added the interface-spec Changes to the IC Interface Specification label Nov 18, 2024
github-merge-queue bot pushed a commit to dfinity/ic that referenced this pull request Nov 19, 2024
…ints (#2633)

This PR defines names and arguments of the new functions:

- ReshareChainKey
- VetKdPublicKey
- VetKdEncryptedKey

A corresponding interface spec PR can be found
[here](dfinity/portal#3763). For now, all
functions remain unimplemented.

In addition, we implement routing of these methods by calling
`route_idkg_message` with the correct `MasterPublicKeyId`. This function
will be renamed and tested for the vet KD case in a follow up PR.
DFINITYManu pushed a commit to dfinity/ic that referenced this pull request Nov 19, 2024
…ints (#2633)

This PR defines names and arguments of the new functions:

- ReshareChainKey
- VetKdPublicKey
- VetKdEncryptedKey

A corresponding interface spec PR can be found
[here](dfinity/portal#3763). For now, all
functions remain unimplemented.

In addition, we implement routing of these methods by calling
`route_idkg_message` with the correct `MasterPublicKeyId`. This function
will be renamed and tested for the vet KD case in a follow up PR.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
interface-spec Changes to the IC Interface Specification
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant