NHacker Next
  • new
  • past
  • show
  • ask
  • show
  • jobs
  • submit
How Shamir's Secret Sharing Works (ente.com)
946789987649 5 hours ago [-]
My masters thesis was on this! I created an app where you can store your data across all the common data storage providers (dropbox, google drive, onedrive, etc.) and used the secret sharing to aid with the encryption. The benefit was that:

- They could no longer read your data

- Additional redundancy (as you only need 2 to be available)

- Compared to other secure storage apps which rely on a master password, which if you forget, you are screwed, you could still use all the usual account recovery methods.

luxcem 4 hours ago [-]
It seems like a cool idea, did you follow up with a product or an open source app?
946789987649 4 hours ago [-]
Unfortunately no, as most uni students my code was utterly terrible and the app itself was more of a PoC. This was 10 years ago though and it's been on my mind since then, so i'll surely pick it up some point, perhaps after my current start up.
c0l0 5 hours ago [-]
We use this technique in our team to distribute passphrases for our secondary secret stores (that contain instructions on how to access our primary secret stores) in a "democratically secure and safe" manner.

https://packages.debian.org/trixie/ssss is a nice and rather straightforward implementation.

Hypomixolydian 2 hours ago [-]
Shamir saved my bottom once, by helping me reconstruct random password used for almost forgotten backup, suddenly needed to be restored at once. Thank God I distributed shares in my family, "just in case".
_jackdk_ 12 hours ago [-]
This is such a cool technique, and you could even teach it in secondary schools as a neat thing computer scientists can do with polynomials.
naths88 6 hours ago [-]
I am a secondary math teacher and I do exactly this with my students. When working on retrieving the expression of an affine function, I tell them about Shamir'..., they choose a secret pin as the slope, generate two points, give them to two other students who have to pair together to find the pin again. The students are always very engaged.
saidnooneever 2 hours ago [-]
this is very nice explanation which needs no maths. really cool. I read about this a few times in articles without images etc and its hard to digest if you dont have a good background but this was wonderfully easy to understand. Thanks a lot.
ndr_ 8 hours ago [-]
Bruce Schneier described this in his seminal book Applied Cryptography, and HashiCorp Vault used to have an implementation in Go. On the practical side, I always wondered how large - in bits - the shares should be. One answer I got on a news group was "1 bit more than the actual key length". Nowadays, I wonder how the quantum computing threat would inform 1) share size choice and 2) pro/con Secret Sharing in general. Does anyone know?
ahazred8ta 6 hours ago [-]
Plain vanilla Shamir is information-theoretic secure and is completely impervious to QC. I can take a 1-byte secret, make 'threshold of 10' Shamir shares from it, give you 9 of the 1-byte shares, and no computer in the universe can determine the secret. (In practice, Shamir systems need to add a MAC or checksum as an integrity check, so IRL they're a few bytes larger.)
plopilop 6 hours ago [-]
You usually do secret sharing in a finite field because computers don't like real numbers. The size of your share is a point (x, y), x can be small (typically log n in case of n participants), y is a random point in the field.

Since Shamir Secret Sharing is information-theoretically secure (if you do not know k points from the k-out-of-n secret then all secrets are equally plausible even when bruteforcing), the bitsize of your field can be whatever you want (but obviously bigger than the bitsize of your secret, you can't hide 100 bits in a finite field of 5 elements).

Usually, you don't want an attacker to be able to bruteforce your secret (while the scheme is ITS, your secret typically isn't, e.g. the seed of your wallet), hence randomness can be added to your secret and the bitsize of the field is taken big enough to thwart these attacks.

Depending on your attack model, an 80-bits or 128-bits field is more than secure enough, hence a share bitsize slightly above 80 or 128 bits.

And regarding quantum computer, since the scheme is ITS no attacks can exist.

proxysna 7 hours ago [-]
I think hashicorp still have an implementation for vaults seal/unseal process. Unless something changed ofc
bigfatkitten 3 hours ago [-]
They still do indeed.
dfox 4 hours ago [-]
One point is that there is no reason for the entire secret to be one element of the underlying field, it can very well be a n-tuple of elements of a smaller field, with GF(2^8) being the somewhat obvious choice if you do not expect ridiculous numbers of shares, no need to deal with bignum math.
andreareina 7 hours ago [-]
Do you remember why 1 bit more?
l1am0 6 hours ago [-]
Years ago I build a little tool to run shamir secret sharing in the browser (can be used full offline, just download the page)

https://simon-frey.com/s4/

xtracto 56 minutes ago [-]
Ha! Years ago i downloaded your page and stored it in some usb disks along with my kdb keepass database and a share of my password.

I gave that to some members of my family and instruct them to give them to my wife in case I die.

Thanks a lot Sir.

Cider9986 13 hours ago [-]
Here is Ente's implementation: (https://2of3.ente.com/)
emmelaich 10 hours ago [-]
There's an implementation packaged up for most Linux distros: http://point-at-infinity.org/ssss
ahazred8ta 6 hours ago [-]
There are several browser-based versions which can be used online or downloaded to use offline.

https://bs.parity.io/ -- http://passguardian.com/ -- https://iancoleman.io/shamir/

cryptocod3 1 hours ago [-]
SSS is amazing, though managing shares over a long period (people come and go) and dealing with collusion risk can be rough.
ghostfoxgod 8 hours ago [-]
It's an incredible technique, when I came across it, it just changed the way I thought of solving giving out keys without "truly" giving them out. This gave me confidence for eternalvault.app, a project of mine.
hamburglar 1 hours ago [-]
I’ve been noodling over this exact business idea for a couple years! Part of my value prop was to make ops scale down to as close to zero as possible by having the encrypted data and most of the front end for accessing it live in S3 objects (or some similar mega-cheap object store). Aside from that, all you need is the dead man’s switch mechanism. And the secret fragments would live on QR codes that bring you to the static SPA with one of the fragments already loaded up, prompting you to scan more to complete the decryption.

Good work doing it. I guess now I don’t have to. :D You may have gained a customer from this HN thread.

Tepix 5 hours ago [-]
Instead of going from two lines to curves, parabolas etc, couldn't you also add another dimension instead?
nitnelave 3 hours ago [-]
Two points make a line in any number of dimensions.
Levitz 2 hours ago [-]
Yes, but without a specific plane to intersect with, that still doesn't define a third point, if you want to check intersection with an axis, you'd need a third point in tridimensional space, for example.
cynicalkane 2 hours ago [-]
Think GP is suggesting an N-dimensional plane in K>N dimensions.
3eb7988a1663 10 hours ago [-]
Do the people who hold the root DNS keys do anything like this? Or is that too much complexity when a safe in a secure room works as an effective backup?
davkan 7 hours ago [-]
They do something similar. Basically 5 people are needed in order to access the dns root keys plus some extra administrative/witness people. 3 Crypto Officers with smartcards to unlock the hsm, 2 other officials to unlock the vault that contains the hsm and the vault that contains safety deposit boxes with the smartcards. There are 7 crypto officers, of which any three will do.

https://www.cloudflare.com/learning/dns/dnssec/root-signing-...

teravor 13 hours ago [-]
if the secret is large usually it's encrypted and the payload is distributed along with the shares of the key.

but you can also just use Reed-Solomon and split the payload, the difference with Shamir is that you lose information-theoretic security (you lose it the moment you use encryption anyway) and the payload also needs to undergo an all-or-nothing-transform (AONT).

AONT transforms the entire payload into an encrypted blob which also serves as its own key, a withheld piece is a de facto encryption key. this is required because Reed-Solomon can have pathological cases where pieces leak information.

colmmacc 12 hours ago [-]
Reed-Solomon is an Erasure code, and I definitely wouldn't look to that for Secret Splitting. Those leakage models are gnarly. But if you want something else that is more general - there are Monotone Span Programs. Seriously underused.
teravor 12 hours ago [-]

    > Reed-Solomon is an Erasure code
which shares the same math as Shamir

    > Those leakage models are gnarly.
AONT solves that by making any leak other than the totality meaningless
craintes 7 hours ago [-]
I also had written an article on the subject a while ago if you want to dig a bit deeper: https://petal.cafe/posts/shamir/
freakynit 6 hours ago [-]
This is such a cool neat trick.

Vibe-coded a little playground where you can generate secrets, see the polynomial, combine the secrets, and in general, play around:

https://shamirs-secret-sharing.pagey.site

compsciphd 13 hours ago [-]
before I learned of shamir secret sharing, I wondered why one couldn't do the same exact thing with a par2 like system (albiet with smaller pieces than a par2 system would traditionally have). i.e. you have X bits of data, you create Y*X/N sized recovery blocks (where Y > N). You hand each recovery block to individual users. and any N users can get together to recover the key and decrypt the contents.
namibj 9 hours ago [-]
Well in theory the base math is indeed the same; unfortunately though the "randomly chosen" part of shamir's secret sharing is fairly important to the security because information theoretic security of the scheme requires each fragment to be as large as the original secret by way of essentially including a desired count of random data blocks to the original before applying the reed-solomon-like erasure coding to it where now enough fragments to reconstruct the secret plus all random blocks have to be combined. Also the way of usage of the erasure code has to be selected to not be leaking information but that's more of an issue of not picking a bad way of how to implement the basic concept here. Basically just a case of "do follow the instructions to shamir's secret sharing, don't do something different just because it's a popular way of implementing reed-Solomon".

Yes, you can just GF(256), but if you're worried I'd also just use a prime field instead.

13 hours ago [-]
sreekanth850 8 hours ago [-]
ente means mine in Malayalam language. it's said to be one of the toughest Indian language to learn. FYI.
alfirous 7 hours ago [-]
Interesting, in Indonesia Ente means you. Derived from Arabic word Anta.

Fascinating how sometimes in different languages one word can have opposite meaning and the other times one word can have similar meaning.

thisislife2 23 minutes ago [-]
Maybe it's the pronunciation - ente means "mine" and ante means "yours" (in Malayalam) which is what perhaps you may be referring to? (Former South Indian kingdoms and South East Asia have historical cultural ties due to trade and conquest, and thus they share some common words, which I assume is, largely borrowed from Tamil and Malayalam).
aabdelhafez 3 hours ago [-]
Ente also means "duck" in German.
DesiLurker 4 hours ago [-]
SSS works pretty well. IIRC somebody in bitcoin community started using this for storing private keys using 3/5 schema. they basically divide the secret keys into 5 parts out of which you only need 3 to recover original private key. IDK if there are any hardware wallets that actually support it yet though.
calvinmorrison 11 hours ago [-]
something tangentially i am interested in is computing following the 'two person rule' for things like sudo. Yes I am logged into server X at terinal Y, and so is my co-worker and we both sign off on running command X
coryrc 8 hours ago [-]
Had something like this at Google. There's a service running as root (or equivalent) which receives your desired command to run, and it has to get authorization from another user for the specific command to run, then runs it. That makes sense at Google, because those are production machines and have access to LDAP and who is allowed to run a command on a machine is defined by an LDAP group and you would need two of them (or more?) and there's already existing management website this can be shoe-horned into.

Your environment is unlikely to have all of that already, so you'll need to figure out equivalents for all those. But I think you're going to need a local service running as root and it's going to need to be able to tell the difference between distinct human users, if you want secure. Just typos is way easier.

ahazred8ta 6 hours ago [-]
There's a related 2-man sudo login system here, not sure how finegrained it is.

https://github.com/Argonne-National-Laboratory/Pam-2man-Auth

jerry1979 9 hours ago [-]
That sounds like you might want to look into digital signatures.
cryptoz 9 hours ago [-]
See also a story about an implementation from Max Levchin: https://max.levch.in/post/724289457144070144/shamir-secret-s...
han1 13 hours ago [-]
[flagged]
Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact
Rendered at 13:47:50 GMT+0000 (Coordinated Universal Time) with Vercel.