GNUnet Messenger API: January 2025

Hello there,

so I got some news for you again regarding my progress on the GNUnet Messenger service as well as the applications. Because there has been a GNUnet release last month which made libgnunetchat and the messenger applications using it incompatible, I needed to implement some changes, fixes and announced a new release.

The forward secrecy I’m implementing in the Messenger service of GNUnet is still on development branch though. It will take some time until those changes are ready for release. But I got quite a bit of progress. The members of a chat actually start building groups, exchanging keys to form a tree structure as suggested in my last post from December. If any member of such a group is missing an epoch key, they will delay depending on their position inside their group the appeal for the missing key to then authorize the whole group after gaining access. This way ideally just one member will send an appeal, receive access, send an authorization and the rest of their group don’t have to start an own exchange by themselves. So it reduces a lot of potential traffic.

When a new member joins a chat room, all others announce at least their biggest group that is still valid to the new epoch. This mechanism is to reduce the chance of new group formation proposals that would not benefit overall efficiency and therefore should not get accepted.

Also I had to restructure a lot of code because previously the groups depended on the epoch announcements which increased complexity without actual benefits. So now groups and epoch announcements just use separate identifiers while utilizing similar messages for key exchange. But they don’t strictly depend on each other.

Potentially it might even make sense to further make groups independent of epochs. Because that could reduce the overall amount of group keys that need to be stored. While theoretically a group key will invalidate itself anyway as soon as any member of a group leaves the chat room. But I need to investigate whether this might open an attack which I currently don’t see.

Currently a group key will be only used inside its epoch of the group formation and the next epoch might derive a new group key from the old one in case all members are carried on to the next epoch (so in other words, none of them leaves the chat room). As soon as anyone outside a complete group announces to have their key and verifies that via a valid HMAC using the key, a key will be revoked starting new group formation and key exchange. This is already partially implemented but more testing is necessary.

But despite there are still open issues in the implementation and testing, the fundamental key exchange works. There are two working optimizations implemented, either deriving an epoch key from last epoch if allowed or utilizing groups to reduce requests. So it’s really looking good.

Obviously for the chat applications it’s still open how to store and manage all those keys easily without weakening the gained security of the forward secrecy. Likely all group and epoch keys will be stored to a file or database that gets encrypted using the private key from the client applications account or a chosen password. The password would be required if the selected account does not use any own private key to sign and decrypt messages.

This isn’t possible yet in libgnunetchat (having an account without such a unique private key) but technically the Messenger service supports it and I was already looking for a solution to add this feature. Therefore it’s likely I’m gonna implement a solution to both of my open issues in the future. The goal would still be to not introduce any unnecessary friction that hurts usability. But I’m confident that’s possible.

So that’s where I’m at for now.

Kind regards,
Jacki

Read original article

Popular posts from this blog

GNUnet Messenger API: March

GNUnet Messenger API: February

GNUnet Messenger API: September