Authentication, Encryption...
"It's 10pm, do you know what your Plural System's data transport security is?"
Heni here once again! Today I'd like to follow up on my last post about Willow and give an update on how Ourcana's online (and local device sync!) features will function!
Programmers familiar with online security models even as recent as 2015, if not as early as before 2002, may tell you that "Authentication" and "Encryption" were considered two different things. "Authentication" was making sure your user(s) were actually logging in, then you got them "Encryption" through something like https:// connections and that was that.
This model works, but can lead to a class of privacy bugs common in older software. Improper security design, as well as compromises made to "just get the software out there", can be devastating.
Sometimes, application developers just straight up skip a step! The PluralKit model is one such example. System and Member/proxy data is not encrypted in the live database itself. As explicitly stated by PluralKit's hardware owner, Iris, in public, she holds the keys to data via "Full Disk Encryption" (FDE) to satisfy Discord's requirement of "at-rest encryption" for all bot developers. However, the data is still readable while the server is powered on by anyone who compromises the app... or by Iris herself, and anyone she's delegated access to. "FDE" protects only a powered-off disk, and nothing is end-to-end... these are concrete security and privacy gaps. It’s unlikely they’ll see a fix as she’s said in public, in the context of many architectural nits, "that [these] aren’t really issues" — the exact words of the person able to open it all in the first place.
This is, ostensibly, the honor system of privacy models.
The entirety of the privacy model in PluralKit is thus predicated on the login system actually working correctly (and trust in developers with login access to production). If one can "log in" as another user, it's trivial to fetch their system data. And sometimes one can simply attack the system or server itself to access the data. Very few developers today authenticate between internal servers, which means if one is compromised due to a bug or exploit they're all exposed.
How many websites fall under fire today for similar mistakes? To give a fake example for a very real type of headline we see in 2026:
Poob's entire database of ten thousand users was found exposed on the public net today. Every user's photo ID, birth certificate, and social security number was left unencrypted in the database.
Developers, whether through inexperience or by offloading their mental work or responsibilities, are prone to incorporating security as the last step in their software design, if ever. And it's users that pay the price, not the service operators.
This is not to say the solutions are impossible. What if even if the database were compromised, encryption secured one's data? What if even the developers of an application couldn't read your data as a fact of the math not just the honor system?
Authenticated Encryption with Associated Data
Or more tersely "AEAD" is the security and privacy model in vogue with programmers today.
For example, the TLS v1.3 standard, the peak of online security today and possibly what you're using to access this website right now says:
all ciphers are modeled as Authenticated Encryption with Associated Data (AEAD)
The nature of how exactly this is implemented is best left to academics and cryptography experts, but I can show some of the practical reasons to use such a model with charts I've sketched up in my time working with the worm blossom duo behind inventions such as the Willow Protocol of which Ourcana may be the first application to use in the real world in a serious way.
The particulars of what this looks like can be seen in the diagram below, and have already been released in the worm-blossom Discord forum for preview by academics and researchers before my actual release of Ourcana Online built out of it.
In this case, we're assembling data left to right, and the "thatch" section is where a mix of encrypted and authenticated but not encrypted data reaches the server, after the users' phone or device has finished doing the cryptographic math locally (all in just a few milliseconds, thankfully).
The Relay problem (and solution!)
A user could send a completely encrypted blob to a remote server or database to hold onto for them. Using techniques such as an "encoding" of Willow to an on-disk store and document index (literally, a database) it's possible for users to start asking for their records and sharing them with other peers. "Give me my front history again." or perhaps "tell me Heni's front history, here's a signed ticket from her proving I'm her friend and she said she wants to share it with me in the future".
But in the case where a server operator has 100% unlimited access to all data on the server, privacy isn't actually guaranteed. After all, can't they just look?
With encryption, users can exchange keys, do math, and functionally encrypt their data. But then if the data is encrypted, how would the server know where (as in who) to send the data to? "Here's a binary blob that's totally private" doesn't help the server out at all. The server can't, for example, send a push notification to another app, or pull a profile picture to re-host it for a Discord proxy if all the data is completely encrypted.
I've identified a few different types of "partial encryption schemes" that may actually be useful for Plural systems trying to reach their friends and loved ones, in the diagram below
Shown in the first diagram, but perhaps not immediately obvious, is the idea that we create an "envelope". The "outside" of the envelope is a signed proof that anyone can read. "This message is from Heni, to her friend Alice. Any push notification server is allowed to tell Alice that the message is from Heni. You are not allowed to open the envelope." Inside the envelope is an encrypted blob. Even if a server does break the rules and peek inside, it just appears to be random noise. There's nothing useful without a decryption key that only Alice has locally (if she keeps it secure and private, that is).
Trust no one, not even your server
My privacy model, while novel in application, is built of standard, off-the-shelf parts. Using bab I've spent the past week talking to Aljoscha and Sammy from worm-blossom doing my best to prove their theories on actual hardware, using production-tier application design.
Bab hashes allow for, through a Merkle tree system, the partial verification and total verification of data in transport. This means it's possible to definitively prove that Alice or Heni actually authored a message, provided you've registered their public keys for the math. There's zero trust in the server required to know you're speaking to your friends and not an imposter.
I ran a little benchmark on my 5-year-old Apple MacBook Pro M1 Max laptop (and a friend ran it on his similar tier AMD-based laptop) and I was very excited to see that even low-tier consumer hardware like a 10-year-old laptop should be fast enough to back up a user's own data from their phone.
As an aside, I& can be found on the Ourcana community Discord, which will soon support a Matrix.org compatible bridge to link both services for those who would rather not use the privacy mess that is Discord.
I try my best to explain and contextualize things to users that ask.
You're always welcome to join us in the official Ourcana Discord!
Join the Ourcana Discord Server!
I've been known to yap about strange metaphors though, be warned...
As a small aside, I've been working diligently to incorporate my own security architecture into a hard fork of PluralKit I call "OurKitty". One of the first things I did after patching issues in the security model was go and take a stab at every ask in the old PluralKit server's "suggestions" channel. A few Quality of Life upgrades were easy wins, and I can't wait to provide them to Ourcana users!
It's been quite refreshing to test my own code versus the original in virtual server environments at the scale of a thousand shards and see perf gains in realtime. I'm so excited to release the software once the Ourcana Online launch has settled.
Both Ourcana Online's own Rust server as well as the future OurKitty server release will be available under the AGPL-3.0 (as it should be)! AGPL-3.0 requires offering corresponding source to users who interact with the service over a network. I'm going further: embedding the source directly in the app, so any user can self-host from what they already have rather than chase a link that might disappear.
— Heni, Boring Crew System
P.S. I've been invited to an interview with the worm-blossom duo this week to talk about the technical decisions behind Ourcana with them. I showed up in their Discord a few months ago and it seems I've caught their curiosity with my latest code and engineering. I'll be posting a link to the publication in a future update! It'll be fantastic to see more auditing and exploration of the privacy and cryptography theory behind Ourcana in conversation with the people who invented the protocols it's built on.