Simple web-based tool for BLS keys

A new feature has been added for generating and managing multisig wallet keys.

Use it on the website or download bls-standalone.html.

So far the tool has only dealt with single keys. The new feature is for group keys. There are two main ways that group keys can be generated.

The first way to generate group keys (which in this tool I’ve called Simple Threshold Keys) is where a single user controls all aspects of the keys, eg a multisig wallet, so they are trusted to derive all secret and public keys and distribute them to people.

There’s a second way to generate keys which is Distributed Key Generation (DKG) which I will be implementing next. Each person generates their secret key privately and only shares their public keys. The public keys are combined into a group public key for doing crypto operations as a group. This is how elder nodes will generate keys for doing stuff as a section. It’s a way for untrusted entities to form group keys and is quite different to the Simple Threshold Keys where all key management is done by a single trusted entity.

Group crypto operations are sign and verify where m-of-n keys are needed to create a valid signature, and encrypt and decrypt where m-of-n keys are needed to decrypt a message.

Technical question: Is poly a suitable object / abstraction to be using for backups? It’s a handy single data point that can be used to derive all needed info, a bit like a bip32 root key. Any suggestions for best practices here? This is really getting deep into the implementation details of the threshold_crypto crate so I’m not really expecting an answer to be honest…!

A bit of a technical look into what’s coming next, any tips are welcome: With DKG, maidsafe uses this process to generate keys. It seems like the order of keys matters: “The members of the DKG session must also be deterministic, meaning that all members must use the same members list”. Does this mean all members must use the same order for members, or is any order ok? In BLS-DKG the order seems to matter and is based on sorting member.id (see this code in the test) where id is a random number. But nowhere else besides in the test code do I see sorting. Does order of members matter? I’m going to dig into this myself while developing the next part of the interface, but if anyone has an easy answer off the top of their head (or enjoys doing some code digging) I’d be keen to hear it.

Also I know @qi_ma you are not a particularly public figure so I’m hesitant to tag you here, but it’s truly impressive how much you’ve contributed to the SAFE network and the BLS keys aspects (especially the DKG aspect). Thank you so much for your work and your code which has been invaluable while creating this tool. BLS-DKG in particular is unbelievable.

26 Likes