swicg / swicg/activitypub-e2ee
Private Key Storage / Synchronization
Nobody has claimed this yet.
- Dominant language
- HTML
- Stars
- 78
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
I'd like to discuss the use cases and issues around using multiple devices. This was raised briefly by @LukaJCB in #34, but hopefully it will be helpful to discuss it directly here.
USE CASE: I have a mobile phone and a desktop computer. I'd like to start a conversation on one device, then switch to another at some point later. This is pretty standard for other encrypted messaging systems (Proton Mail, Apple Messages, Signal, etc)
I don't believe the current spec has any way to share or sync keys. I recognize the potential danger of private keys being be leaked, but if we launch without this feature I believe it would be a dealbreaker for most users. One way or another, we should talk about it and come up with a clear answer.
And, if we do choose to do this, there should be a single, clearly defined way for us to build it so that we can have interoperable client apps at some point in the future.
My Recommendation is to add an additional property to the KeyPackage object and say clients MUST encrypt their KeyPackage private keys (using some key-encrypting-key not available to the server) and synchronize them using that property. We could recommend some encryption schemes.
Here's an example just to get this conversation started:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://purl.archive.org/socialweb/mls"
],
"id": "https://example.com/users/alyssa/keypackage/1",
"type": "KeyPackage",
"attributedTo": "https://example.com/users/alyssa",
"to": "as:Public",
"mediaType": "message/mls",
"encoding": "base64",
"summary": "This is a key package in MLS format.",
"publicKey": "[base64-encoded Public KeyPackage data]",
"privateKey": "[base64-encoded Private KeyPackage data]",
"generator": {
"id": "https://client.example/actor",
"type": "Application",
"name": "MLS-enabled ActivityPub client"
}
}
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the linked KeyPackage object specification and the earlier discussion in issue #34, then review the proposed JSON example here. The work is done when the project has a decided, clearly specified interoperable approach to private-key storage and synchronization across devices.
Written by the indexing model from the issue text.
Assessment
- Domain
- cryptography, distributed-systems, security
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100