View Issue Details

IDProjectCategoryView StatusLast Update
0010716GNUnetmessenger servicepublic2025-12-04 09:26
Reporterthejackimonster Assigned Tothejackimonster  
PrioritynormalSeveritytweakReproducibilityalways
Status assignedResolutionopen 
Product Version0.27.0 
Target Version1.0.0 
Summary0010716: Key separation for encryption of messages in messenger service
DescriptionSince there is already a thread on mattermost, I wanted to open this issue for tracking it. Currently the messenger service is using the private identity keys (or blindable keys) to derive a key pair used for encrypting/decrypting private messages. In practice these should only contain invitations (which don't contain sensitive information) to other chat rooms but technically this isn't limited to those kinds of messages.

To change this the idea is to use a fully separate key pair for encryption than for signatures. So in case an attacker gains access to the identity key, they will not gain access to any encrypted messages. Question is how to store such a key pair, how often should it rotate and depending on storage of it, how would it be encrypted to protect access against an attacker. Since if an attacker would be able to gain access to an identity key (which is only stored locally on device), additional encryption seems necessary.
Steps To Reproduce-
Additional InformationMost changes are already implemented on my development branch. It generates a separate key pair every time a user joins a chat room via client and publishes the public key inside join- and key-messages. Those key pairs might rotate too often that way but I think that needs further practical testing. They current keys as well as previous ones are stored via the namestore only locally using the identity key but all keys are stored in an encrypted form.

For the encryption of those records I derive a secret from the private identity key currently. That's not ideal but I wanted to avoid user selected passwords for now. However I'm thinking about using libsecret to either select or generate a secret on application level that can be passed towards the service automatically. So users don't need to enter a password every single time they open and close the application. I'm just not sure yet whether libsecret should be integrated into libgnunetchat or gnunet itself.

I would also adjust the current code for storing the group and epoch keys in the messenger service to use such a secret as well for encrypted storage. Because those keys actually protect more sensitive information in practice. They are currently encrypted using a secret derived from the private identity key as well.
TagsNo tags attached.

Activities

There are no notes attached to this issue.

Issue History

Date Modified Username Field Change
2025-12-04 09:26 thejackimonster New Issue
2025-12-04 09:26 thejackimonster Status new => assigned
2025-12-04 09:26 thejackimonster Assigned To => thejackimonster