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

Update Introduction in draft-bradleylundberg-cfrg-arkg.md #15

Merged
merged 8 commits into from
May 13, 2024

Conversation

AltmannPeter
Copy link
Collaborator

Restructured the text a bit so that the problem statement is earlier, that the procedures required are enumerated, and to position ARKG in relation to KBSS.

Changed some terms.

  • the seed is not private public. It is private, shared secret. If it was public, then any entity could derive the same keys, rendering the entire proposal moot.
  • reduced the number of terms used to describe similar concepts. For instance, 'intended private key holder' instead of delegating party, subordinate entity instead of public key consumer etc.
  • Changed the order of how the text uses examples. Examples are now used to illustrate the benefit of a certain ARKG property.

Overall changes to readability and clarity (I hope).

Restructured the text a bit so that the problem statement is earlier, that the procedures required are enumerated, and to position ARKG in relation to KBSS.

Changed some terms. 
- the seed is not private public. It is private, shared secret. If it was public, then any entity could derive the same keys, rendering the entire proposal moot.
- reduced the number of terms used to describe similar concepts. For instance, 'intended private key holder' instead of delegating party, subordinate entity instead of public key consumer etc.
- Changed the order of how the text uses examples. Examples are now used to illustrate the benefit of a certain ARKG property.

Overall changes to readability and clarity (I hope).
@AltmannPeter AltmannPeter changed the title Update draft-bradleylundberg-cfrg-arkg.md Update Introduction in draft-bradleylundberg-cfrg-arkg.md Apr 9, 2024
Copy link
Member

@emlun emlun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a lot I like here! I ended up rewriting and restructuring a lot of it, though, to cut down on some redundancy and try to say the same things in fewer words.

I also moved the "three procedures" to after the examples, I think the section flows a little better now with ending on the declaration that quantum-resistant instantiations exist and not ending abruptly after a bullet-point list.

I hope I've preserved the spirit of what you wanted to accomplish, do you agree?

The required cryptographic primitives are a public key blinding scheme, a key encapsulation mechanism (KEM),
a key derivation function (KDF) and a message authentication code (MAC) scheme.
Both conventional primitives and quantum-resistant alternatives exist that meet these requirements. [Wilson]
Asynchronous Remote Key Generation (ARKG) introduces a mechanism to generate public keys without access to the corresponding private keys, and without anyone other than the intended private key holder being able to generate these private keys.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and without anyone other than the intended private key holder being able to generate these private keys

This seems redundant, already covered by the first half?

a key derivation function (KDF) and a message authentication code (MAC) scheme.
Both conventional primitives and quantum-resistant alternatives exist that meet these requirements. [Wilson]
Asynchronous Remote Key Generation (ARKG) introduces a mechanism to generate public keys without access to the corresponding private keys, and without anyone other than the intended private key holder being able to generate these private keys.
Such a mechanism is pivotal for many scenarios where private key holders cannot engage in the generation of new key pairs whenever a public key is needed.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Replacing the "delegating party" term would have to be done throughout the document as a whole, not just the introduction. I'm reverting to using the "delegating party" term for now.


* __Initialization__: The intended private key holder generates a _seed pair_, disclosing the _shared secret seed_ to a subordinate entity while securely retaining the _private seed_.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the term "shared seed" (it does not always need to be secret, depending on application) as opposed to "public seed", but this also needs to be changed throughout the whole document. Reverting to "public seed" for now, but we can change to "shared seed" in a separate PR.

Unique single-use asymmetric keys prevent colluding verifiers from using the public key material as a correlation handle.
In online usage, ARKG enables public key generation on demand. This is useful when creating single-use certificates, single-use proof of possession keys to be included in (qualified) electronic attestations of attributes or personal identification data attestations.
In offline usage, ARKG enables pre-generation of single-use keys.
One candidate implementation for single-use keys is the W3C Web Authentication API [WebAuthn] (WebAuthn), which presently requires private key holder engagement whenever a WebAuthn operation is invoked.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

which presently requires private key holder engagement

Not just presently, it's unlikely that this restriction will ever be relaxed in WebAuthn.

"Since COSE is designed for a store-and-forward environment rather than an online environment,
\[...\] forward secrecy (see [RFC4949]) is not achievable. A static key will always be used for the receiver of the COSE object."
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These backslashes are needed so the RFC "compiler" doesn't interpret this as a reference.

* __Public key generation__: With the shared seed, the subordinate entity autonomously generates any number of new public keys alongside a unique _key handle_ for each invocation.
* __Private key derivation__: The intended private key holder jointly employs the key handle and the private seed to derive the private keys corresponding to the public keys generated by procedure two.

One application is key blinding where the private key is a function of a long-term private key and a freshly generated blinding key, and correspondingly where the public key is a function of the long-term public key and the same blinding key.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is mostly covered by the examples below?

Comment on lines 160 to 161
Notably, ARKG can be built entirely using commonly deployed cryptographic primitives. The required primitives are a key encapsulation mechanism (KEM),
a key derivation function (KDF), and a message authentication code (MAC) scheme. Both conventional primitives and quantum-resistant alternatives exist that meet these requirements. [Wilson]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why remove the key blinding scheme from the list of primitives?

- __Single-use asymmetric keys__:
Envisioned for the European Union's digital identity framework, ARKG facilitates the generation of unique key pairs for individual authentication processes.
Unique single-use asymmetric keys prevent colluding verifiers from using the public key material as a correlation handle.
In online usage, ARKG enables public key generation on demand. This is useful when creating single-use certificates, single-use proof of possession keys to be included in (qualified) electronic attestations of attributes or personal identification data attestations.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The online use case isn't a very strong motivation, as that can almost as easily be done with conventional key generation. The offline use case is much stronger in my opinion: pre-generating keys in large batches at once without having to call out to the secure element (possibly invoking a user gesture) for each key.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The online use case for single-use, just-in-time PID/(Q)EAA still looks valid:

  • Creating a brand new ECDSA key in the mobile SCE does not provide the issuer any assurance that it is bound to the same device as the PID that was presented to them. With ARKG, the issuer can have this assurance.
  • Creating a brand new ECDSA key in the mobile SCE requires additional key management, which brings the latency of key generation and in the Android case also the problem of key deletion. With ARKG, the SCE does not need to do any additional key generation or deletion.

emlun added 3 commits May 2, 2024 16:52
Refer to private keys instead of secret keys for asymmetric key pairs
Note that for online scenarios, ARKG gives assurance of same-hardware binding
@emlun emlun merged commit f2e637e into main May 13, 2024
2 checks passed
@emlun emlun deleted the proposal-2024-03-09/Introduction branch May 13, 2024 14:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants