Replying to Avatar Vitor Pamplona

### #Amethyst v0.73.1-alpha: New Private Message & Small Groups Protocol

This is an **alpha** release of the new GiftWrapped DMs. Please do not consider anything to be actually private until we have a **stable** version. This is early and there might be bugs that leak information.

You can activate this mode by clicking on the Incognito icon on the Chat screen. For now, only Amethyst supports this NIP. Thus we recommend only testing with other Amethyst users. Coracle and 0xChat are finishing their implementations in the upcoming days/weeks.

The claims of this new method are:

- Messages are encrypted with a superior XChaCha algorithm to each participant's public key individually.

- Chat participant identities, each message's real date and time, event kinds, and other tags are all hidden from the public.

- Senders and receivers cannot be linked with public information alone.

- Minimal trust in counterparties: Counterparties cannot expose verifiable details of your message, including the metadata, without exposing their entire user and all of their other messages (private key)

- There is no central queue, channel or otherwise converging event id to link or count all messages in the same group.

- There is no moderation role (i.e. no group admins, no invitations or bans)

- There is no chatroom secret that can leak or be mistakenly shared

- Messages can be fully recoverable in any client (that implements NIP-24) with the receiver or the sender's private key

- The protocol's messages can flow through public relays without loss of privacy. Private relays can increase privacy further, but they are not needed.

- The protocol is extensible to make any other event kind fully private (private likes, private reports, private long-form content, etc)

This implementation is very similar to how Slack manages direct DMs to multiple users. If three users are having a conversation and want to add a fourth person, the forth's user will not see the past. This guarantees maximum privacy: only the receivers of a message at the time of writing will ever be able to decrypt it.

In the near future, we will implement Forward Secrecy through:

- Users will be able to opt-in for "Disappearing Messages" that are not recoverable with their private key

- Users will be able to also opt-in to sharing messages with a new key exclusive for DM backup and recovery.

Details:

- Support for NIP-24 Private Messages and Small Groups

- Support for NIP-59 Gift Wraps & Seals

- Support for NIP-44 Versioned Encrypted Payloads

- Support for XChaCha encryption algorithm

- Fix: Loading of Alby's NWC URI

- Fix: Only requests notification permission once.

- Fix: Show reposts and reactions in search

- Fix: Signed byte used for array slice inside the TLV by nostr:npub1xpuz4qerklyck9evtg40wgrthq5rce2mumwuuygnxcg6q02lz9ms275ams

- Fix: Global feed only shows events from Global-active relays by nostr:npub10npj3gydmv40m70ehemmal6vsdyfl7tewgvz043g54p0x23y0s8qzztl5h

- Updates Dutch translations by nostr:npub1w4la29u3zv09r6crx5u8yxax0ffxgekzdm2egzjkjckef7xc83fs0ftxcd

Download:

- [Play Edition](https://github.com/vitorpamplona/amethyst/releases/download/v0.73.1/amethyst-googleplay-universal-v0.73.1.apk)

- [F-Droid Edition](https://github.com/vitorpamplona/amethyst/releases/download/v0.73.1/amethyst-fdroid-universal-v0.73.1.apk)

Cc nostr:npub1zayt792jcz2qcz59snyrj560zl3jnfkpdzmu9yyzuuvwm563a0tq7k3f95

nostr:nevent1qqstfnjf75xr28at5cks98fpt4apxumsv5eld84aesgvm6y9ptgrjaqpzemhxue69uhhyetvv9ujumt0wd68ytnsw43z7q3qgcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqxpqqqqqqzm3peup

Reply to this note

Please Login to reply.

Discussion

Fantastic. Y’a une implémentation PC Windows/Linux ou iOS ?

C'est encore tout neuf et en very beta test.

Je suis super chaud. J’ai pas encore compris fondamentalement l’intérêt d’un truc aussi compliqué et j’ai une solution bcp plus simple en tête. Mais je suis ravie de voir que sa avance. On a vraiment besoin de ça

Plus simple ?

vas y dit pour voir

L’idée générale ça serait de créer deux utilisateurs et de donner la clefs à tout les membres du groupe. Qd tu envoies un message tu fais un DM entre ses deux utilisateurs en tirant au hasard l’expéditeur pour que d’un point de vue extérieur ça ait l’air d’une conversation par DM classique entre deux utilisateurs et personne ne peut connaître les participants du message. Cela serait un canal de discussion qui serait le group chat.

A l’intérieur de se canal, les messages doivent être signés avec la clef privée NOSTR des utilisateurs pour qu’on sachent qui parle et que se soit infalsifiable.

Également je propose de crypter tout les messages via RSA ou ElGamal grâce à PGP. Car on peut faire du multisig 1 of n se qui est particulièrement adapté. Ces clefs publiques peuvent être échangées via le réseau de DM NOSTR classique, pas dans le canal, directement entre les utilisateurs.

Ainsi, une personne qui récupérerait les clef du canal de discussion récupérerait juste des messages crypté avec aucune info sur les destinataires ni les expéditeurs. Juste du RSA ou du ElGamal.

Le seul moyen de crack ce truc est de recup la clef privée d’un des participants, mais c’est le cas de n’importe quel group chat.

Pour la forward secrecy, je propose qu’une nouvelle clef RSA ou ElGamal soit échangée par DM entre les participants en dehors du canal, par DM to le X message en fonction du niveau de forward secrecy dont on a besoin.

🔸Aucune modification du protocole n’est requise.

🔸Seul les clients doivent mettre en place cette mécanique.

🔸Je pense même à dev un client qui fait uniquement ça… mais malheureusement avec le bébé, j’ai pas le temps.

L’idée générale ça serait de créer deux utilisateurs et de donner la clefs à tout les membres du groupe. Qd tu envoies un message tu fais un DM entre ses deux utilisateurs en tirant au hasard l’expéditeur pour que d’un point de vue extérieur ça ait l’air d’une conversation par DM classique entre deux utilisateurs et personne ne peut connaître les participants du message. Cela serait un canal de discussion qui serait le group chat.

A l’intérieur de se canal, les messages doivent être signés avec la clef privée NOSTR des utilisateurs pour qu’on sachent qui parle et que se soit infalsifiable.

Également je propose de crypter tout les messages via RSA ou ElGamal grâce à PGP. Car on peut faire du multisig 1 of n se qui est particulièrement adapté. Ces clefs publiques peuvent être échangées via le réseau de DM NOSTR classique, pas dans le canal, directement entre les utilisateurs.

Ainsi, une personne qui récupérerait les clef du canal de discussion récupérerait juste des messages crypté avec aucune info sur les destinataires ni les expéditeurs. Juste du RSA ou du ElGamal.

Le seul moyen de crack ce truc est de recup la clef privée d’un des participants, mais c’est le cas de n’importe quel group chat.

Pour la forward secrecy, je propose qu’une nouvelle clef RSA ou ElGamal soit échangée par DM entre les participants en dehors du canal, par DM to le X message en fonction du niveau de forward secrecy dont on a besoin.

🔸Aucune modification du protocole n’est requise.

🔸Seul les clients doivent mettre en place cette mécanique.

🔸Je pense même à dev un client qui fait uniquement ça… mais malheureusement avec le bébé, j’ai pas le temps.

C'est aussi très compliqué (il faut décrire le workflow et le format des messages très precisemments). Par ailleurs il y a un échange de clef privée aux membres ce qui en soit est problématique.

Ça ressemble également à des messages wrappé

Oui, mais sans avoir à ajouter un kind inutile à mon avis. Y’a 0 server à modifier si tu le fais pas. Tout les server accepte la fonction DM, et c’est suffisant. Pour moi c’est inutile de rajouter des complications à ce niveau. Un autre avantage c’est que d’un point de vu extérieur, si tu ajoutes un kind, tu lève l’ambiguïté de savoir se que c’est.

Tu sais que sur Nostr la grande majorité des nips n'induisent pas de modification de relai ?

Typiquement je bosse sur une date vending machine (nip90). C'est totalement neutre côté relai.

Je le répète mais si tu penses que ton idée est bonne, tu peux juste décrire un nip avec le workflow très précisement (y compris la manière d'échanger la clef privée du canal DM).

Autre pont. Tu parles de chiffrement reposant sur l'Infra a clef public RSA / elgamal.

Ça veut dire qu'un utilisateur doit en plus de sa clef Nostr avoir une clef RSA ?

Après avoir fait quelques recherches, il semble que c’est le plus adapté. Mais cela doit être une clef jetable. Si non tu as pas de FS.

J’ai pas fini de faire le tour des nip sur la question. Avant de poster un NIP, je préfère tout lire pour être certain de ne pas polluer le truc avec une idée déjà débattu.

Honnêtement je préfère arriver directement avec du code qui marche.

Je ne vois pas en quoi les échanges des clefs privée du canal sont un problème.

Qd a RSA/ElGamal c’est seulement les clefs publiques qui sont échangées évidemment

C’est marqué dans le post du coup ! Et bien vivement que se soit le cas !