I'm developing software that will use public key encryption as part of its user identification, verification and data ownership processes. Assume that I have the user experience side of things worked out and that what I propose will work well within the design of my application; the question I have here is purely about the security side of things.
Private key loss is an awful thing to bear, if it means total loss of access to your data. You can print it out and store it somewhere safely, or put in a USB key and put that in a safe, or whatever, but the average user is not going to do these things. They don't understand security, and they won't usually make the effort to cover their bases. Even if they do, they may forget where they saved or stored their key, or they may lose it for other reasons.
My question is as follows:
Assume there is a network of people who know each other closely enough that they can pick up the phone (or Skype, etc.) and have a voice conversation. Am I missing any glaring security problems with the following?
- On my local machine, my private key is divided into 3 parts. The key
- I select 3 people in my network (preferably each selected from a distinct social group that doesn't really overlap with the others), and encrypt one of the pieces of my private key with their public key.
- I send each respective encrypted piece of my private key to the person whose public key I used to encrypt it, and it is stored in their local data store.
Catastrophe strikes! My private key is gone!
- I generate a new temporary key pair.
- I ask each of my 3 friends to decrypt their piece of my old private key and re-encrypt it using my temporary public key, then send the newly-encrypted version back to me.
- I decrypt each of the three pieces and rebuild my private key.
I now have access to my data.
The solution sounds convoluted, sure, but as I said earlier, I have a way to handle the UX for this in a reasonably frictionless way.
The only issue I can think of is that a friend may lose access to their own data and then I'll be out of luck, but to mitigate that as an issue, I'll hedge my bets and perform the same process with different groups of 3 people.
- "3" is not set in stone, and can be adapted depending on the user's network size.
- A user could leverage a service that uses 2-factor authentication as a stand-in for one of their friends. e.g. I could store one of the pieces unencrypted (but obviously useless in isolation) in my 2-factor-secured GMail account.
Can you see any issues with my approach, and if so, what could I do to achieve the same result in a more cryptographically-secure way?