burdges at gmail.com
Sun Mar 1 05:42:47 PST 2015
On 1 Mar 2015, at 10:04, Nadim Kobeissi <nadim at nadim.computer> wrote:
> Yes, it all boils down to this. Waiting for evidence of insecurity is silly. Joseph and Trevor's insights have been convincing. I think I need to act now -- going beyond public beta without making key derivation stronger would be a mistake.
> I'm actually very interested in the solution that Michael Hamburg just outlined. Link for convenience:
> This strikes me as the best idea right now. Would be happy to hear thoughts.
On 1 Mar 2015, at 8:24, Michael Hamburg <mike at shiftleft.org> wrote:
> Perhaps you should use oblivious function evaluation with a user-specific secret at the server. So for example, server has a per-user secret key e, and user has a (salted, scrypted) password p. Let h = hash(p) on some curve.
> client chooses a uniformly random scalar r.
> client -> server: Q = h^r
> server -> client: P = Q^e = h^er
> client computers P^1/r = h^e, and uses the hash of that point as part of the secret key derivation.
> You can gate this interaction by the PIN code. But even if an attacker can query it, under the one-more-DH assumption he needs N queries to check N passwords.
Very nice idea, but the server will be hacked, exposing e, well presumably that’s in your threat model.
I'd consider :
- Store different e across a DHT that replies to queries by retuning the appropriate P = Q^e.
- Access the P using some PIR scheme, ala DP5, Gnu Name System, etc. to construct the different h^e.
- Build a secret by combining some of the h^e using a secret sharing scheme.
It’d be neat to avoid the “table” part of the DHT somehow, but I'm not seeing an approach with the secret sharing schemes I know.
Another approach might be a “password-derived two-factor authentication" when a user installs the system on a new machine they must initialize the machine’s factor m by iterating scrypt on the salted password p enough times to consume 10 min, or even an hour. After that initialization, the software saves m to it’s configuration file and the secret is derived by hashing m++p.
Yet another approach might be selecting the password through a search & menu interface that ensured enough entropy :
- Select a large corpus of English quotations by famous people. Analyze these to ensure they do not become too ambiguous, i.e. no variations, no miss attributions, etc.
- Assign users a series of quotations which they must print or write down.
- Users select their quotations through an interface that allows them to search based on keywords, authors, etc.
Again the actual secret could be reconstructed using secret sharing, erasure coding, etc., so that not all some quote could be lost and reconstructed and the order did not matter.
There are schemes where the system prints out a QR code needed for login too, of course.
In any case, it’d be worth building a library designed to provide several high entropy pass phrases tricks, preferably in C so that any non-browser tool can use it. I could potentially help with this, falls under the scope of my new job with gnunet.
More information about the Messaging