-
Notifications
You must be signed in to change notification settings - Fork 4
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
Multiplicative blinding with ARKG #7
Comments
What do you mean by "easier"?
Yes, but with the caveat that I haven't yet seen a formal security proof for this ARKG construction (I'm sure it's easy to produce, I just haven't taken the time to assemble it).
I don't think so? As far as I'm aware, the main use case for specifically multiplicative blinding is that it's what needed for Split-ECDSA (SECDSA) - but SECDSA is a transformation that is applied outside the secure element that holds the base key (assuming the caller sends the message hash to the secure element, not the unhashed message), which is useful for backwards compatibility with existing secure hardware. But ARKG requires a new hardware operation anyway, so I see little relevance in combining SECDSA and ARKG. Is there some other reason to prefer multiplicative blinding over additive blinding if a new hardware operation is required either way? |
For ECDH:
My idea for HDK is to never require calling ARKG-Derive-Private-Key or its dependency BL-Blind-Private-Key within the secure cryptographic device. We only apply ARKG-Derive-Private-Key in the “Attestation issuance” use case (06bf213) step 3.ii, using So for HDK, no hardware operations are needed beyond the creation of a single root key for P-256 ECDH or ECSDSA, and the default operation upon that key using some pre-processing or post-processing within the general-purpose execution environment in BlindAuthenticate. |
I see, I suspected something like that. Thanks! Just note that this would also require clarifying that the ECDH implementation must not apply a KDF to the shared point, and that it needs to output both the x and y coordinates, not just the x coordinate as is most common. (I don't think this is a problem for X25519/448 though)
In that case, honestly I don't think you need ARKG. 🙂 The point of ARKG is that it's a two-party protocol, so the spec defines what steps the two parties need to take in order to preserve the key pair relationship through the blinding transformation and without revealing the base secret key to the subordinate party. If there's only one party, that party doesn't need a protocol to agree with itself on a transformation of an unknown value. For example Split-ECDSA is a transformation performed unilaterally by just one party - just the party requesting and relaying the signature, without involvement by the party holding the private key - so there's no need for a protocol for how the private key holder should behave. Or am I misunderstanding something? Is there somewhere in HDK where two distinct parties need to perform the same transformation without revealing the transformed value to one of them? As far as I can see, the procedure in the Attestation issuance section could just as well use just a bare KEM since the process reveals |
No, wait, my mistake - it doesn't reveal |
Good point. I thought it would easy to find y for P-256, but this would require EC element addition in itself. So to resolve this:
Benefits I hope to gain from keeping the ARKG-Derive-Public-Key dependency:
In HDK:
In 3, the issuer needs to be assured that the child BL key is protected using the same secure cryptographic device as the parent BL key. We achieve this by blinding. I’m aware of three approaches to determine the blinding factor τ:
Approach 2 risks leaking τ to web infrastructure. Approach 1 is currently required in the ARF, but I don’t like the reliance on additional proofs. Approach 3 is in the current HDK draft. So indeed I’m aiming to involve two distinct parties: the issuer and the holder. They will both learn the value τ. Does the above clarify the intention?
The procedure does not provide the issuer or reader with any knowledge about
The issued attestation will be bound to |
I’ve checked: Apple’s Secure Enclave indeed only returns the x coordinate. Indeed for several HSMs it is the same. So indeed multiplicative blinding is not “easier” for ECDH than additive. Multiplicative blinding is also not needed for ECDSA in HDK: I’m omitting it due to patent and possibly security issues. I’ll close the issue since the original request is resolved, but feel free to continue the discussion to ensure shared understanding of the ARKG application in HDK. |
Reopening this thread: since ECDH typically returns x coordinates only, we have no way to compute
outside of the WSCD without performing ECDH inside the WSCD twice, and thus possibly authenticating the user twice. With multiplicative blinding, we can compute
Therefore, it looks like we need multiplicative blinding in HDK. |
I thought briefly about this too - in theory it should indeed be easy to find the y coordinate, it's just the matter of whether it's positive or negative. But therein also lies the problem: the party computing a blinded public key Unless there's some way to check which sign is correct? I had some thought that something like that might be possible... Say you blind a public key Now say you sign something in the WSCD using private key Does that check out?
Fair enough! |
Indeed, it looks like we could construct a method to compute EC-Scalar-Mult with at most one WSCD call, if we have a blindable signature that can be verified using the element as public key. As of 5f1a31d I see these use cases for such a method:
So we need to implement elliptic curve multiplication or addition anyway on both the issuer and the holder sides. So my “ease of implementation” argument should not support a multiplicative versus additive blinding decision.
One new reason for multiplicative versus additive blinding could be the Proof of Association requirements (#19). |
Since it still seems we need multiplicative blinding for ECDH, if we want to use off-the-shelf WSCDs without authenticating the user twice, let’s look for security proofs. There seem to be some related publications in the context of draft-irtf-cfrg-signature-key-blinding and SECDSA. Here’s a first attempt at the BL security properties [Wilson]:
Does this make sense? What could be a good next step to bring this further? In We may be able to avoid implementing the low-level EC-Scalar-Mult in the wallet instance by importing |
2024-07-15: it still seems we need multiplicative blinding. Then we need the proper security proofs, possibly at a similar level as the last paragraph of ARKG § 9.1 Using a MAC. Once we have found the arguments, we can propose the change to ARKG. |
ARKG still provides additive blinding ciphersuites only, while for ECDH (and possibly ECDSA) multiplicative blinding is easier. For now I've cheated and assumed an additional “ARKG-P256mul” ciphersuite. Is it feasible and necessary to add to ARKG?
The text was updated successfully, but these errors were encountered: