Readit News logoReadit News
ggurgone · 4 years ago
~12 years ago at university I used Shamir's Secret Sharing to implement a tool that enables written exams to be authenticated and yet anonymous.

You can read a later publication from my professor here https://www.scitepress.org/Papers/2011/34814/34814.pdf

y7 · 4 years ago
One other thing that is really cool about secret sharing, is that you can actually perform computations (addition, multiplication) on secret-shared numbers. This way you can actually perform arbitrary calculations "in the encrypted domain", in a way that is currently a lot more practical than fully homomorphic encryption.

See https://en.wikipedia.org/wiki/Secure_multi-party_computation

erwincoumans · 4 years ago
Here is a 68 line Python implementation to encrypt and decrypt: https://github.com/ergl/sss_py/blob/master/sss/shamir.py
gnull · 4 years ago
You could extend the decoding procedure to tolerate errors. Shamir's secret sharing is the same thing as Reed-Solomon code, so you can reuse the error-correctimg property of the latter.
itsmemattchung · 4 years ago
> Eleven scientists are working on a secret project. They wish to lock up the documents in a cabinet so that the cabinet can be opened if and only if six or more of the scientists are present. What is the smallest number of locks needed? What is the smallest number of keys to the locks each scientist must carry?

> it is not hard to show that the minimal solution uses 462 locks and 252 keys per scientist

Probably obvious to most on HN but the answer didn't jump out at me immediately: 11! / 5!6! = 462

water554 · 4 years ago
I wager this answer wasn’t obvious to most on HN…
queuebert · 4 years ago
In physics we use the term "straightforward" for something that doesn't require a conceptual leap but might take a bit of thinking.
tromp · 4 years ago
It becomes obvious only after making the less than obvious assumption that locks can work in OR fashion rather than the usual AND fashion. How does one put 462 locks on a cabinet such that opening any one lock opens the cabinet?
aabdelhafez · 4 years ago
https://github.com/incipher/shamir

Here's a CLI, written in Go, that uses HashiCorp Vault's implementation of the Shamir Secret Sharing algorithm and exposes its functionality to the command-line in an easy-to-use manner.

I personally use it to divide my password manager's master password into shares that are given to family members and close friends in order for them to collectively reconstruct my master password and obtain access to my password vault in case I pass away.

Disclaimer: I'm the author.

Wuzado · 4 years ago
Original paper describing Shamir's Secret Sharing, (1979).
hn_throwaway_99 · 4 years ago
Does anyone know if secret sharing, or the equivalent, is provided by cloud vendors as a way to secure extremely sensitive high level permissions?

For example, most cloud services have the concept of an "owner" account that has full access to everything in a project. Most security advice I've read says that pretty much nobody should have access to the owner account - the credentials for the account should basically be locked in a vault (but that kinda just pushes the issue to "who has the keys to the vault").

Instead, what I'd like to do is share the owner account password into 4 parts, where any 2 are needed to get access to the owner account. That way no single employee can "go rogue" on their own. Obviously I can share the password by myself using something like SSS, but would be nice if I could just designate a group of n IAM accounts, but where a minimum of k are needed to get full owner privileges. The idea is similar to the "2 keys must be entered at the same time to launch the nukes" idea.

Basically, just curious if other folks share their owner account creds that require some minimum consensus before accessing.

gioazzi · 4 years ago
I've been working on something similar to what you described[^1], using Shamir secret sharing to split the TOTP secret. Once enough key holders get together, a server generates some TOTP tokens, but only for a limited period of time.

I wanted to use it in an enterprise environment to limit the access to AWS root users in a break-glass scenario. Now I no longer have such need and haven't developed it further, but the core features are there. As usual though with this kind of tools, any security problem becomes a key management problem and it'd need a bit more work to use it in the real world.

[^1]: https://github.com/borgoat/farmfa

hn_throwaway_99 · 4 years ago
Thanks, this actually helped give me a good idea about how I would like to do this now:

1. Generate the password for the owner account, store that in "standard" secrets storage where admins can access it. 2. Also require TOTP MFA for the owner account. Take the seed for the TOTP, and split that into N shares (where N is equal to the number of admins you want to share it out to) requiring K threshold (where K is the minimum number of admins that must come together), and give that out to your admins.

wahnfrieden · 4 years ago
you do this by securing the 2fa device for the account in a bank safe that offers 2+ person rule for access
hn_throwaway_99 · 4 years ago
Understood, I was just hoping that cloud vendors (or associated tools) would implement the "2+ person rule for access" directly within their interfaces.
Keirmot · 4 years ago
Honest question: wouldn’t one person knowing the password and the other owning the 2FA device also achieve the same result?
alberto_ol · 4 years ago
janandonly · 4 years ago
Today, this is one of the way's to split up Bitcoin Key's to distribute over multiple participants and/or locations.

Deleted Comment

Deleted Comment