distributed secret key
Erich Eckner
openssl at eckner.net
Wed Jun 3 09:26:05 UTC 2020
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Hi Phillip,
@all: If this goes too far off-topic for the openssl mailing list, let me
know, and I'll continue the discussion off-mailing-list.
On Mon, 25 May 2020, Phillip Hallam-Baker wrote:
>
>
> On Sun, May 24, 2020 at 4:17 PM Erich Eckner <openssl at eckner.net> wrote:
>
> On Sun, 24 May 2020, Phillip Hallam-Baker wrote:
>
> >
> > I do indeed have running code but not (necessarily) for this
> particular
> > variant (yet).
> >
> > What I have right now is a scheme that allows
> >
> > 1) An existing secret key to be split into (n,t) shares where
> the threshold
> > t < number of shares.
>
> I suppose, this includes also the part to use/reconstruct the
> secret key?
> May I ask, what we need to do to sign something with the
> splitted key?
>
>
> It is all explained in the draft but basically for the n=t version, you have
> a minimum of two rounds. In round 1, everyone has to agree on their secret
> key blinding value k_i and make a commitment to R_i = k_i.P. Then the dealer
> has to gather up the commitments to calculate the value R as their sum -
> from which the message digest value can be calculated. Then each signer just
> signs as normal.
>
> It is all very straightforward. Very little has to change.
>
> To do n<t then you have to calculate the lagrange coefficient and multiply
> your secret key by that factor. Again explained in the draft.
>
Sry, I missed that before. I have just read the draft, now.
>
>
> Nope, I haven't got a fully finished scheme for the Shamir Secret Sharing
> t<n version (yet) that begins with a distributed key generation scheme.
ok, I see.
>
> In fact, I have yet to fully grock how that starts. Do we have n people
> participate or t? I can carry the math part. But there seems to be this gap
> when I try to move to ceremony...
Well, there is only t parts of information in there (e.g. if t parties
would share their secrets, the other n-t secrets could be reconstructed).
So one way would be to have t parties "settle on a shared key" and
calculate the n-t other secrets - but this creates some asymmetry between
the trust in the parties. Maybe it's instead possible to have n parties
create secrets, and then "project" this n-dimensional key onto some
t-dimensional hyperplane without actually sending the secrets around?
(This might work with the "n points of a polinomial of degree t-1"
approach, too: "projecting" would refer to some kind of fitting, there)
So everyone would do:
1. create some secret
2. send some information around
3. calculate the component of "his coordinate" of the perpendicular to the
t-dimensional hyperplane
4. subtract that from his secret
>
>
> What are you hoping to use this CA for? It it is to issue WebPKI (i.e. get
> your root embedded in a browser) certs then CABForum writes the rules. They
> have picked a set of algorithms/ curves they like.
Yes, it should become the root CA for OpenNIC to certify webservers. At
some point (very long shot), it might get included in browers, but I
honestly do not expect this to happen within the next decade ;-)
Nevertheless, we would like to avoid any trivially-avoidable obstacles and
create a CA that is as much conformant to the rules as possible :-)
>
> But you have to use HSMs and that is a bigger constraint and none of that
> supports threshold - or is likely to for some time.
Hmm, I was afraid, we would need HSMs, too. Your draft mentions, that one
of the participants could be an HSM - but I guess, this a) is not (yet)
implemented and b) does not scale to more than 1 HSM because of the
statelessness of the HSM (one would need at least n-t+1 HSMs, to satisfy
the "have to use HSMs" condition, I guess). Am I right? If so, we will
refrain from our bold goal of being included in browser bundles and simply
not use HSMs.
>
>
> Ok, so we will probably say good bye to the
> separately-created-key
> approach and split a given secret key which we will afterwards
> securely
> erase (and only keep the parts).
>
>
> That is the simplest one as far as ceremony goes.
>
>
> > For the set of applications I care about, this attack is not
> actually that
> > important because while Mallet knows the secret key, he is the
> only person
> > who does. And so he won't be able to respond to any composite
> signature
> > request with a valid answer.
>
> But he can still sign anything he wants, right? Or does he never
> see the
> csr, but only the "preprocessed" csr, so he cannot sign it?
>
>
> Well he can sign anything he wants but why is that key accredited to
> anything else? Why is it considered to be a trustworthy key for that group
> of signers?
>
> This is what I am trying to get at with mention of 'CSR' - there has to be
> some 'get trusted' process.
>
>
> >
> > So for PKIX type applications, this is self defeating as only
> Mallet can
> > generate the CSR.
>
> Why would they want to create CSRs? In our case, this is
> intended to be
> the Root CA.
>
>
> Its been over a decade since I last stood up a production CA. It is really a
> matter of ceremony design. Having the offline root first generate a CSR and
> then accept the CSR by signing it means that the ceremony for generating the
> self signed root is the same as that for the subordinates for a start.
Ah, I see: When creating the self-signature of the CA itself, the
threshold signature will fail, because the keys do not fit. Although
Mallet can create a valid self-signature, no one would use it, because
it's clear, that this was not created by the threshold signature
algorithm.
Can you please share some running code, that implements the t<n threshold
signing and the key splitting (from a single key)?
regards,
Erich
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEE3p92iMrPBP64GmxZCu7JB1Xae1oFAl7XbK4ACgkQCu7JB1Xa
e1qXAQ//SpsK440wb2IFd8ikTliYlnAdOLyu7LejOVAbAJv7+ZEAvMBjI3NVzRXd
RSO873ROXNeCZNLUpmktreSD6vZwnrDaingGZLTYY7JiIZ4GVORYcENXZlLmCzUg
842j8rjN7kYFoef5qqzB78BsQDmRfat5YZmroWPs2Oul9oyxZR715i0zWPFSHYkO
kFWhTg0jiYFkMyGAmgSw5d+zkxEFnwzVlTFBWKVwqvzzahBg2+NdwdI9fTg4OG2+
xEa/BjmhKSNXzpaCTRdknMvZtwENYmuqMs+78UFyYS4pjit4FDIL40uStpNvpea7
BZK+jRDIGjMvUL8Mq2YOWk57POZFsj5zil+CRkAmb639nAtj1GqBr9cCh5DVZqCt
ZihcGRxf6VKegilhvo1272BSyUlTo92ldebw5lVWLPxNuWRv2mibNuD3JXaC7TKd
FHW10iTiUHQI+Ztpl/DT3FnRLltd8w3K/uqFTI0rmdg1vqXDWLj2KCoBzXscv6Gz
/yVOqQslvMIDQCtPkP4g/nBhgYQ9/oNeeULib3VOgUFoTQeTGsi+xGavW/iEH/lG
EnSKFszucQlqHx2ylnjSXY4KVGnltCmer8KGXnKB8qXsA/uORUOAghC3ckieCeR1
bH3/w/Y35ui8952sH6ipVnh2e2FmAHeQ/lKOytg4rdjMyb0cLRk=
=Y1G5
-----END PGP SIGNATURE-----
More information about the openssl-users
mailing list