"signalPreKeyBundle": {
"registrationId": 1086,
"identityKey": "BS/xL6K3...",
"signedPreKey": {
"keyId": 1,
"publicKey": "BeGoxU1...",
"signature": "GpREIG..."
},
"preKeys": [
{"keyId": 1, "publicKey": "BWZi..."}
]
}
Holos uses the Signal Protocol to encrypt your direct messages. This is the same protocol used by Signal, WhatsApp, and other secure messaging apps. Only the sender and recipient can read the message content - not the relay, not your internet provider, not even Holos developers.
E2EE requires exchanging public keys before communicating. Holos leverages ActivityPub's Actor object to publish encryption keys, making them discoverable across the fediverse.
"signalPreKeyBundle": {
"registrationId": 1086,
"identityKey": "BS/xL6K3...",
"signedPreKey": {
"keyId": 1,
"publicKey": "BeGoxU1...",
"signature": "GpREIG..."
},
"preKeys": [
{"keyId": 1, "publicKey": "BWZi..."}
]
}
The Signal Protocol provides forward secrecy through the Double Ratchet algorithm. Even if your keys are compromised today, past messages remain unreadable.
When you send a DM to another Holos user, here's what happens:
An encrypted DM is a standard ActivityPub Note with additional Holos-specific properties. Here's what it looks like:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"holos": "https://holos.social/ns#",
"holos:e2eeEnabled": {"@id": "holos:e2eeEnabled", "@type": "@id"},
"holos:signalCiphertext": "holos:signalCiphertext",
"holos:signalMessageType": "holos:signalMessageType"
}
],
"type": "Create",
"id": "https://relay.domain/users/alice/statuses/123/activity",
"actor": "https://relay.domain/users/alice",
"to": ["https://relay.domain/users/bob"],
"object": {
"type": "Note",
"id": "https://relay.domain/users/alice/statuses/123",
"content": "[Encrypted message]",
"holos:e2eeEnabled": true,
"holos:signalCiphertext": "MwgBEiEF...",
"holos:signalMessageType": 3
}
}
holos:e2eeEnabled
Indicates this message is end-to-end encrypted
holos:signalCiphertext
The encrypted message content (Base64-encoded Signal Protocol ciphertext)
holos:signalMessageType
Signal message type: 3 = first message (session setup), 1 = subsequent messages
The relay server does not have the decryption keys. It is technically impossible for it to read your messages:
E2EE only works when both parties support it. Here's what happens in different scenarios:
How do you know you're really talking to the right person? Safety Numbers let you verify cryptographic identity out-of-band.
The app shows clear indicators so you always know the encryption status of your conversation:
Holos E2EE implementation is open source. Audit the code, verify the cryptography, or contribute improvements.