-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 devnull@xxxxxxxxxxxxxxxxxxxxxx wrote: > [As usual when I write to bugtraq, the from address in the headers > simply discards mail, so I don't have to deal with all the broken > autoresponder mail that would otherwise land on me. To reach me, use > the address in the signature.] > > >>The problem is that I need a guaranteed way to create data for any >>valid N and M where N >= 3 > M >= 2 in which access to M fragments of >>the key (each fragment is encrypted) can be used to gain access to >>the rest of the fragments, which in turn allows any selection of M >>users to authenticate and gain physical access to the key. > > > You don't need the "...used to gain access to the rest of the > fragments..." part. > > This is called "secret splitting", and there are a number of schemes by > which you can split a secret into N shares, any M of which can > reconstruct the secret, but any M-1 of which can discover nothing about > the secret. One of the simplest, at least to my mind, is based on > polynomials over a finite field. A handful of secret-splitting > schemes, including this one, are described in Schneier's _Applied > Cryptography_ (and doubtless many other places); the rest of this > message is a brief description of this technique. > > Input: a secret S, and N and M as above. > Choose a prime P, larger than S. > Let c[0] be S. > Choose random values less than P for c[1] through c[M-1]. > For i from 1 through N, compute (all arithmetic mod P) > h[i] = sum(j=0..M-1) (c[j] i^j) [^ is exponentiation] > Share #i is then the triple <P,i,h[i]>. > > How the shares are stored is up to those charged with protecting them; > they can store them encrypted if they want. Only the h[i] value needs > to be protected. > > Now, given any M shares, you can set up M equations > > h[i] = sum(j=0..M-1) (c[j] i^j) (mod P, of course) > huh? No polynomial regression like in shamir's scheme? (as if I actually understand the math here) > for the i and h[i] values in the shares. (Of course, if the P values > in the shares aren't all equal, at least one of the shares has been > corrupted.) This is a system of M linear equations in M unknowns (the > c[] values). Given how the coefficients of this system were chosen > (the i^j values), they will be linearly independent and the system thus > has a unique solution (since P is prime, division mod P works and > Gaussian elimination can be performed). Solve it, and c[0] will be the > secret. (You can throw away c[1] through c[M-1]; they were randomly > chosen at split time and carry no information.) > > But if you have fewer than M shares, you can set up at most M-1 > equations. Such a system is not solvable, and since we're working in > the finite field Z_P, you actually cannot discover anything about S; by > introducing a fictitious additional share with a suitable h[] value, > you can arrange to make c[0] come out to any value you please. > > If you have more than M shares, the system is overdetermined. You can > pick any M of the shares, reconstruct the c[] values, and check that > what you get agrees with the redundant shares. (You actually don't > *have* to check, but it allows you to catch some cases of corrupted > shares.) > > I've written software that implements this. See > ftp.rodents.montreal.qc.ca:/mouse/local/src/secretsplit/. > *brain explodes* ouch. OK I won't read that right now. . . maybe I'm better off trying to understand the math than the code. > /~\ The ASCII der Mouse > \ / Ribbon Campaign > X Against HTML mouse@xxxxxxxxxxxxxxxxxxxxxx > / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B > - -- All content of all messages exchanged herein are left in the Public Domain, unless otherwise explicitly stated. Creative brains are a valuable, limited resource. They shouldn't be wasted on re-inventing the wheel when there are so many fascinating new problems waiting out there. -- Eric Steven Raymond -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.5 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFCFzAThDd4aOud5P8RApzXAJ9d2ITFaRnp5aeZAvVChln/VDSIpQCfbBvO VuECaAj0Xqt4dA8iVgS5zDU= =r0Jx -----END PGP SIGNATURE-----