Skip to content

[Tracking issue] End-to-End encrypted Broadcast Channels #6884

Open
@Hocuri

Description

@Hocuri

Here I will collect all information around implementing broadcast channels, similar to the ones known from Telegram/WhatsApp. As oppsosed to Telegram/WhatsApp, channels will be end-to-end encrypted in Delta Chat. Some other features known from Telegram/WhatsApp will be missing.

Implementation

Show broadcast channels in their own, proper "Channel" chat

Click here to show Core work (#6901, #6975, #6983, #6984, #7007)
  • Add new chat type InBroadcastChannel and OutBroadcastChannel for incoming / outgoing channels, where the former is similar to a Mailinglist and the latter is similar to a Broadcast (which is removed)
    • Consideration for naming: InChannel/OutChannel (without "broadcast") would be shorter, but less greppable because we already have a lot of occurences of channel in the code. Consistently calling them BcChannel/bc_channel in the code would be both short and greppable, but a bit arcane when reading it at first. Opinions are welcome; if I hear none, I'll keep with BroadcastChannel.
  • api: Add create_broadcast_channel(), deprecate create_broadcast_list() (or create_channel() / create_bc_channel() if we decide to switch)
    • Adjust code comments to match the new behavior.
  • ASK Desktop developers what they use is_broadcast field for, and whether it should be true for both outgoing & incoming channels (or look it up myself)
    • I added is_out_broadcast_channel, and deprecated is_broadcast, for now
  • When the user changes the broadcast channel name, immediately show this change on receiving devices
  • Allow to change brodacast channel avatar, and immediately apply it on the receiving device
  • Make it possible to block InBroadcastChannel
  • Make it possible to set the avatar of an OutgoingChannel, and apply it on the receiving side
  • DECIDE whether we still want to use the broadcast icon as the default icon or whether we want to use the letter-in-a-circle
    • We decided to use the letter-in-a-circle for now, because it's easier to implement, and I need to stay in the time plan
  • chat.rs: Return an error if the user tries to modify a InBroadcastChannel
  • Add automated regression tests
  • Grep for broadcast and see whether there is any other work I need to do
  • Bug: Don't show ~ in front of the sender's same in broadcast lists

UI work:

UI Testing:

  • Creating a channel
  • Adding/removing members from a channel
  • Set a channel avatar, and check that receivers see it
  • Change the channel name, and check that receivers see it
  • On the receiving side of a channel, check that it's not possible to send a message
  • On the receiving side of a channel, check that it's not possible to change the name/avatar - neither by clicking on "Edit" in the menu, nor by enlarging the avatar and then clicking "Edit")
  • On the receiving side of a channel, check that it's possible to block the chat
  • On the sending side of a channel, check that it's possible to add and remove members, and that the shown texts are correct (e.g. "Remove X from Channel?" instead of "Remove X from Group?")
  • Both on the receiving and sending side of a channel:
    • In that chat, open the 3-dots menu, and check that things look fine
    • In the chat, check that the subtitle is correct
    • Open the profile page for a channel, and check that things look fine
    • Check that ephemeral messages actually disappear

Symmetrically encrypt broadcast channels

Channels need to be symmetrically encrypted, because if we encrypted them asymetrically, like we do for all other messages:

  • with some technical expertise, it would be possible to find out who the other recipients are
  • when there are a lot of recipients, the messages would be very big.

This will need a lot of work (like new QR codes); I'm currently in the mode of experimenting with symmetric encryption, and implementing some things in #6995.

  • Talk to some PGP experts that the general idea is fine

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions