Re: distributed secret key

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hi Phillip,

On Sun, 24 May 2020, Phillip Hallam-Baker wrote:


In short, yes, I have stuff that works for this and I think it would be
particularly useful for code signing and for inside CAs. But it does need
some additional work to apply it to that application.

this sounds promising. :-)



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?


2) A group of people who each have a secret to jointly create a composite
key with n shares and a threshold of n[*].

Is this a typo or is here really t=n? I'm asking, because we're actually more concerned about redundancy (t<n) than about the distributing (t>1) - though we do prefer a distributed key (e.g. t>1), if that is feasible.


These are currently specified for Ed448 or Ed25519 but conversion to the
NIST curves is straightforward 

This might be a stupid question, but: Are there any restrictions imposed, what algorithms are allowed to be used by a (root) CA? Or is this mainly a matter of "taste"?


I do not currently have a version that supports t people coming together
with a set of Shamir secret parameters and jointly creating n Shamir secret
parameters. There is a proposal (FROST) to do that but the authors are not
ready for it to be used.

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).



[*] The particular concern here is that it is necessary to defeat a
malicious contribution attack in which Alice Bob and Mallet jointly create a
key but Mallet goes last and instead of contributing to the shared secret,
he instead generates a new key pair and calculates the public value that
will trick Alice and Bob into accepting his as the valid one. Whether this
attack is relevant or not depends on your intended protocol. 

For example, lets say Alice and Bob's key pairs are {a.P, a}, {b.P, b}.
Mallet is supposed to contribute m.P from {m.P, m} and the composite key
will be {x.P, x} where x = a+b+m.

Instead Mallet contributes (z-a-b).P which he can calculate by generating z
and calculating z.P-a.P-B.P so the composite key x = a+b+m = a+b+z-a-b = z.
So Mallet knows the secret key and only Mallet can use it.


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?


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.

Regards,
Erich



On Sun, May 24, 2020 at 12:20 PM Michael Richardson <mcr@xxxxxxxxxxxx>
wrote:

      Erich Eckner <openssl@xxxxxxxxxx> wrote:
          > we're looking into setting up a CA with openssl, but we
      would like to
          > distribute the secret key amongst multiple persons. We're
      aware of
          > Shamir's secret sharing algorithm, but we'd like to know
      if there is some
          > algorithm supported by openssl, that fulfills the
      following requirements
          > (2 and 3 are not fulfilled by Shamir's algorithm):

          > 1. Secret key shared amongst N persons, M<N shares
      sufficient for using
          > the key.

          > 2. No secret material (or parts thereof) needs to be sent
      around,
          > preferably not even during creation of the key.

      So you want to split a secret, but then not send anything to
      anyone?
      I don't really understand this at all.  I don't think it's
      physically
      possible.  Maybe you could restate your requirement in another
      way.

          > 3. Secret key will not be assembled from the shares for
      the acutal
          > operation. E.g. each share operates independently, and the
      intermediate
          > result is sent around, after M keyparts operated on it,
      the signature is
          > complete and can be used.

      I guess you want a system where the shares can be added after
      "exponentiation" rather than before.

          > If this is not supported by openssl, we're also open for
      suggestions of
          > other (open source, free-to-use) software, that can
      achieve this and
          > creates standard X.509 certificates (not sure if I termed
      that correctly).

      I believe that Phillip Hallam-Baker's
                         Threshold Modes in Elliptic Curves
                           draft-hallambaker-threshold-02

      may fullfil your needs.  It might even satisfy (2), but I'm not
      sure it
      satisfies (1).  It may be that you don't need to satisfy (1).

      I know that Phil has running code, but I don't think it's based
      upon openssl.

      --
      ]               Never tell me the odds!                 | ipv6
      mesh networks [
      ]   Michael Richardson, Sandelman Software Works        |    IoT
      architect   [
      ]     mcr@xxxxxxxxxxxx  http://www.sandelman.ca/ ;       |   ruby
      on rails    [



--
Website: http://hallambaker.com/


-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE3p92iMrPBP64GmxZCu7JB1Xae1oFAl7K1jkACgkQCu7JB1Xa
e1qTFw//fpz+GzA9C/JZ14LjNuhbi6mVtGwUAxEugFuStpeMASIgqtXT2Lje7o+Z
RUAliQ3UGaOllK0yssmv73SA3ZCs/Wm4CZ+bdIsLxkKDxpJOv80sM8A6dS62/nBK
zaqftxj9Aj7DUa9mZ4Vu4JdGwdNADU0czHRxbVH1ljsJYFdTYNdTnEuOk5vO5u+5
5JDcd/dxisav/Ivv1mw101UQyrQZ0lR9TZXgdOPw8sanViSEjAp/lJM7jutjH8Rm
mWqtIvds+DS50u1mh/Y/fG3Q7tVNrqOoT2m6heY2l1Ve4gVpfQYiIEFNQqaQ9zF2
OKWuiwmq7Drc5vuiIEuIjMER2VhbFdSqsJmPWyQgmnXiNDLxFIYirs1+7bb5yCbE
OwGPqTS8goCPVRMwyhxnHQkxvD42uz9L6A1cxhVnZEy1RSfnMIC+ttVKsMTbifzv
YVo8tNoEraQfXdu07d/ulJscKZHhFp6z5nP7rm3OIUyGObZJQyaiAnHRtYqI4KL5
ZhGh9X0gFXl04ZF63ypc5F54WL8qEAuxm8rJpVO4XbSoaX9AwEnNoP400fajYUwI
UmO78qLyXSdHvMEfFdLAZubmcP3jeG5TL+ffTmJUJw60glnkb4JtOnoBNopGm8ej
N4FbncsltkGfG8W58rEqkLz+Y4dxF9RrsE+WzBBg0YR9wX9Bkg8=
=ntAn
-----END PGP SIGNATURE-----

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux