Modern XMPP project discussion - 2021-02-16


  1. jonas’

    southerntofu, no

  2. jonas’

    southerntofu, mod_muc_occupant_id does not disable pseudonymity, though, quite the contrary, it supports it

  3. jonas’

    with widespread support for occupant-id, we could get rid of semianonymous MUCs and replace them with fully anonymous MUCs (where not even the room owners can see the real JIDs)

  4. jonas’

    but that requires the occupant ID to be a viable moderation identifier, thus it must remain stable across nickname changes (otherwise we could just go with the nickname, which isn’t sufficient in all cases, for mostly technical reasons unfortunately)

  5. jonas’

    (just to explain the idea behind occupant-id -- I don’t want to impose whether it’s suited for your usecase or not)

  6. Ge0rG

    southerntofu: there is nobody _explicitly_ working on threat modeling, but usually the Council reviews and discusses security implications of new proposals

  7. jonas’

    Ge0rG, though to be fair, anonymity/pseudonymity is rarely in the security considerations -- but this might be because we rarely get XEPs going in that direction

  8. Ge0rG

    jonas’: it was the major reason why I disliked occupant id

  9. jonas’

    Ge0rG, what exactly?

  10. Ge0rG

    jonas’: the reduced anonymity and its implications

  11. jonas’

    tradeoffs all the way down

  12. Ge0rG

    Yeah, and there was no serious discussion of it

  13. pep.

    > but that requires the occupant ID to be a viable moderation identifier, thus it must remain stable across nickname changes (otherwise we could just go with the nickname, which isn’t sufficient in all cases, for mostly technical reasons unfortunately) I'm thinking it doesn't exactly need to be stable across nicknames. The MUC can cache (jid, nick, occid) n-uples for t time (5-10mn?). and if moderation is applied then MUC stills knows it. I think that's a good tradeoff

  14. pep.

    or even just tuples, (jid, occ-id)

  15. pep.

    Meaning it's not exactly a technical limitation

  16. southerntofu

    jonas’, b64encode(hmac_sha256(bare_jid, room._data.occupant_id_salt)) <-- unless you consider the JID to be pseudonymous (which it is in most cases, to be fair) there is no way occupant_id is pseudonymous because the id is deeply tied to the JID

  17. southerntofu

    once again i feel this is an acceptable tradeoff in most circumstances, however it GREATLY changes the threat model of MUCs without any consideration for that, rendering Nicks in MUCs effectively useless and tiable to the same JID

  18. southerntofu

    (before, the threat model was: i trust the MUC server to recognize me across Nicks, now the threat model is ANYONE can know i'm the same JID using different nicks in different circumstances, rendering the Nick system essentially useless)

  19. southerntofu

    Ge0rG, are these "Council" folks versed in security somehow? i mean security/privacy/pseudonymity is admittedly very specific concerns (and i'm not expert either)

  20. Ge0rG

    southerntofu: I don't know. They are just random folks elected by the XSF members.

  21. southerntofu

    <sarcasm>no wonder folks are fleeing to matrix</sarcasm> ;) ;) ;)

  22. southerntofu

    we should probably have a privacy "team" reviewing stuff.. would anyone here would like to be part of that?

  23. Ge0rG

    southerntofu: this place is mostly about usability and UX consistency. The XSF is the entity to consider security of the xmpp protocol. You might want to read up on the XSF and especially its council, and how to become a member there

  24. southerntofu

    well i didn't specially mean a team "from"/"for" modernxmpp, i agree this is a concern for the XSF (and i'm GENUINELY CONCERNED that this does not exist yet at the XSF) though i'm somewhat relunctant because they're highly bureaucratic and unwelcoming (source: i attended a few meetings to see if i could fit)

  25. pep.

    This is a concern for whomever decides to write specs for XMPP, if they want to, really :x

  26. pep.

    The XSF doesn't have a monopoly on XMPP specs.

  27. jonas’

    southerntofu, mind that the council isn’t alone in deciding such things at all and will often work with feedback from the community

  28. jonas’

    southerntofu, it is still pseudonymous, because you cannot map the occupant ID back to the JID. so while you cannot pick your "name" in the pseudonym, it does not allow tracing back to your real name

  29. jonas’

    it is not anonymous, mind, because you are assigned a name you have no control over and which is linked to your identity via your JID

  30. jonas’

    and whether it renders Nicks useless depends on what your use for nicks is ;)

  31. pep.

    I guess we can agree occupant-id removes a layer of pseudonymity

  32. jonas’

    not for room admins

  33. jonas’

    there it adds one

  34. pep.

    Not at the moment yes

  35. pep.

    adds?

  36. jonas’

    sure

  37. jonas’

    or, well, it can be used to add one

  38. pep.

    They still have access to the jid

  39. jonas’

    they don’t have to anymore if we go further with occupant-id

  40. pep.

    It could be, right

  41. jonas’

    you’re right, it’s not specified or implemented yet

  42. jonas’

    (though, to be fair, a MUC could perfectly fake that today if it wanted to, with only minor quirks resulting from that. but then you’re also pretty much implementing MIX, once more, in a more broken way)

  43. jonas’

    (though, to be fair, a MUC could perfectly fake that today if it wanted to, with only minor quirks resulting from that. but then you’re also pretty much implementing yet another part of MIX, once more, in a more broken way)

  44. pep.

    But that can already be done somewhat, without occupant-id. It's just that everybody ran away from fully anonymous rooms for unknown reasons. The nick race can be mitigated already, even without occupant-id

  45. pep.

    heh

  46. pep.

    I'm not even thinking about MIX though

  47. pep.

    And not exactly interested in talking about it just now either, that's yet another story

  48. jonas’

    fair

  49. southerntofu

    jonas’, maybe MIX is indeed the way forward, i'm not aware of how widely it is implemented though

  50. southerntofu reading the spec

  51. jonas’

    southerntofu, pretty much not at all

  52. southerntofu

    > A MIX channel MAY require that all participants publish presence, so that active channel participants are visible. It is not possible to enforce this in the server, so participants in a channel with this option MUST publish presence.

  53. southerntofu

    ^ well that's weird, my client privacy settings should not be batrayed by this "MUST", though i would understand if a MIX room would not accept me without presence

  54. sam

    This isn't a client privacy setting. If you don't want to publish presence don't join rooms that require presence, just like you wouldn't join a room that has public JIDs in MUC.

  55. sam

    (assuming you can discover this in advance, which I'm pretty sure you can if I remember correctly how MIX works)

  56. southerntofu

    .. don't you think it's a bit like saying "don't go to a website with trackers" is a solution to the web tracking problem?

  57. sam

    No

  58. sam

    Presence is not the same as trackers.

  59. southerntofu

    presence information leaks metadata about when you're online to pretty much every one, so it makes sense for clients to disable it by default in my view

  60. sam

    I disagree, it's a chat system and it's useful to know who is in a room when.

  61. sam

    I'm not against having an invisible mode for some rooms, but others it makes sense to always require that visibility.

  62. southerntofu

    a server not letting me post because i didn't publish a presence, i understand.. but forcing my client to betray my expectations just to join a room? i don't understand

  63. southerntofu

    invisibility is yet another topic in my view, i may accept that a MUC server knows my JID, but wouldn't like it to know all my presence (disconnect/reconnect/afk..)

  64. sam

    🤷 I don't know what to tell you, seems fine to me. Don't join rooms whos policies you disagree with. But especially if I'm developing a business focused chat like Slack or something I want to always know who's in all rooms at all times, so it makes sense ot have it as an option IMO.

  65. southerntofu

    as an option, yes.. meaning server may kick/reject members of the room who don't publish a presence

  66. southerntofu

    but here the spec goes the other way around for a reason i don't understand (why is it not possible server-side?)

  67. sam

    Because if I'm developing a chat I don't want someone to join and get history and what not without publishing a presence, it just doesn't make sense to go through all the extra steps to let them join when I know I'm already going to kick them.

  68. sam

    *developing a chat system that works the way I described, I mean.

  69. sam

    The server can still kick people who aren't following its policies of course, but if you're going to have a setting there's not much point in not just enforcing it on the client side too

  70. southerntofu

    to me it makes perfect sense that your MUC server would hang the subscription while requesting a presence from the client, or deny the client's request to access history

  71. sam

    Sure, and it will probably do that, but why not enforce it on the client side too?

  72. southerntofu

    well because it's different concerns: i want my clients to obey/serve me, you want your room to exclude certain behavior.. both are valid usecases, but forcing my clients to act against my intentions is user-hostile in my view

  73. sam

    Your clients do serve you, either way you have to know not to join that room if you don't want to be kicked, or if you don't want to have your presence sent.

  74. southerntofu

    it's like if you said clients should be the ones preventing users from joining private rooms, no the server should take care of that :)

  75. sam

    That's not what I said at all

  76. southerntofu

    eg. client providers user features, server provides access control

  77. sam

    The server definitely still has to enforce its policies

  78. southerntofu

    then why does the spec say otherwise?

  79. sam

    The spec does not say otherwise, it says what the client must do to have a good UX, not what the server must do.

  80. sam

    The server obviously still has to handle clients that violate the spec, it always does.

  81. southerntofu

    > It is not possible to enforce this in the server, so participants in a channel with this option MUST (...)

  82. southerntofu

    that's what i don't understand: why is it "not possible to enforce this in the server"?

  83. sam

    Oh I see what you're saying, I read that as "it's impossible to force a client ot send presence"

  84. southerntofu

    no, a phrasing like yours would have been pretty reasonable in fact :)

  85. sam

    Actually, I'm not sure, I may be wrong, I'd need to go back and re-read this.

  86. southerntofu

    hmmm interesting nick registration in mix MISC

  87. sam

    I can't remember what stuff gets automatically triggered by a join, there may be things you don't want to send to a client that doesn't send presence, in which case you can't do anything about the client that joins but doesn't send it

  88. sam

    In which case you're right it's weird that it has to be enforced on the client

  89. sam

    But I still don't see it as a privacy issue either way. No matter what you have to review a room in advance and not join one whos policies you disagree with

  90. sam

    And it's not saying that you always have to send presence, just for rooms configured to require it.

  91. southerntofu

    i could see a "popup" for a client to let them know in advance a specific server does not match their privacy policy, and have a choice to join

  92. sam

    Sure, I think that's a thing clients could do

  93. southerntofu

    it's just more complicated in terms of UI-UX to implement across clients, than a simple error message from the server rejecting you for not publishing certain information :)

  94. sam

    I think I might have been wrong though, I think it really is impossible for the server to do this

  95. southerntofu

    i'm not far enough on the spec to tell (yet) :)

  96. sam

    I can't remember what, and I can't go back and check right now, but I think it sends info on join (which is before your presence would be published), which is a problem if you don't want to allow people not to publish presence

  97. sam

    I need to go back and re-read too though, there might have been a way for the server to just publish a fake "online" presence for you when you join or accept your presence as part of the join or something

  98. sam

    Either way though, that MUST even if it doesn't make sense isn't a privacy issue as far as I can see.

  99. southerntofu

    i understand that it's not part of your threat model, but it's a valid usecase to fear repression from connects/disconnects revealing your identity to the political police

  100. southerntofu

    eg. we're using a server we trust in a foreign country, but our public chat was infiltrated by a police bot

  101. sam

    Sure, but it's also perfectly valid to require it for some rooms, so don't join rooms that require it.

  102. sam

    Which is what you'd have to do either way regardless of whether the server or the client enforces it.

  103. southerntofu

    if this police bot can have presence information from everyone, it can be correlated against subpoenaed ISP logs to find out who's who

  104. southerntofu

    which can lead activists to prison

  105. sam

    Again, I get that, but this MUST doesn't change that either way.

  106. southerntofu

    without the server being compromised (that's specifically because of this last point that it's a privacy drawback)

  107. southerntofu

    well sure i'm not arguing against this usecase.. just like servers banning Tor, feel free to ban me from using your services because i like privacy, but i expect my client with Tor support to not silently drop Tor when conecting to a server who doesn't like Tor :P

  108. sam

    That's a client issue though, not an issue with this MUST

  109. sam

    The spec doesn't say "And privacy aware clients MUST NOT tell the user about this" :)

  110. southerntofu

    no, but it places the burden of complexity on client implementers, while dealing with it server-side SHOULD be trivial..

  111. southerntofu

    https://xmpp.org/extensions/xep-0407.html#usecase-user-invite <-- that's where we can add the OMEMO vetting bits i guess

  112. sam

    If it's a privacy issue for you you *have* to deal with it client side.

  113. sam

    Because a server could be buggy, or it could be malicious. On the other hand, if it's a server policy issue it should be dealt with server side (if that's possible, I'm still not sure). So if it's both, it has to be dealt with in both places.

  114. southerntofu

    yes but specifications should encourage privacy for all, not make it harder to implement :P

  115. sam

    It doesn't make it harder to implement.

  116. sam

    You'd have to impelment the same thing either way

  117. southerntofu

    sam, implementing new UI just for something like this is "harder to implement"

  118. sam

    You'd have to do that either way if it's a thing you're concerned about

  119. sam

    Unless you trust the server

  120. southerntofu

    well in my view the MUC/MIX threat model places a lot of trust in the server(s)

  121. southerntofu

    (not necessarily such a bad thing, though a pseudonymizing layer on user servers to prevent leaking JIDs to MUCs could be nice)

  122. sam

    uggh, 46 pages, I forgot how long this had gotten, maybe I don't care enough to re-read this.

  123. southerntofu

    so yea invitation from inviter could include a special field to indicate the room mandates encryption, in which case the client (should they accept the invitation) should send their OMEMO public key BOTH in the join message, and in the acknowledgement

  124. L29Ah

    southerntofu: onion layering and random delays insertion also!

  125. L29Ah

    also white noise traffic generation!

  126. southerntofu

    so then the MIX server can request vetting for invitee's OMEMO key from the inviter's

  127. L29Ah

    i think anonymity is kinda out of scope for XMPP in fact, or is not among the top priorities at best

  128. southerntofu

    L29Ah, that was not part of my plan / threat model but sure that would be nice :)

  129. sam

    All that being said, if your threat model is really state level actors that can access your ISP you need to change your behavior and not join random public MIX rooms. It doesn't really matter what the spec itself does.

  130. L29Ah

    if you want to hide your jid, you just register another one, and that would solve much more problems than MUC-based JID hiding

  131. southerntofu

    L29Ah, are you a contributor to the XMPP ecossytem? if so do you know a good place to talk privacy concerns?

  132. southerntofu

    sam, i wholeheartedly agree with you but the experience show people will do it anyway so we should account for that when building tools

  133. sam

    jdev@ or xsf@ is probably fine. I don't know of any specific privacy focused rooms.

  134. L29Ah

    a tiny bit; i don't

  135. sam

    this makes me think I should resurect Burner JIDs. I don't think it ever got any implementations.

  136. L29Ah

    it's just there are so many privacy-orienting chat protocols, and their market niche is small, that i'm not sure XMPP should concentrate in this direction

  137. southerntofu

    sam, nice i didn't know about this XEP! like email aliases for XMPP i love it !

  138. L29Ah

    in fact these days if you're federated, you're already well ahead of the IM crowd in terms of privacy

  139. southerntofu

    L29Ah, there's a lot of protocols out there but none to my knowledge has so many good clients on most platforms, and Jabber/XMPP is still the go-to platform for privacy-conscious folks because of Tor-friendliness and many people using it already

  140. southerntofu

    (also PGP, OMEMO..)

  141. L29Ah

    i'm not yet aware of XMPP servers that speak with both clearnet and onion/i2p jids btw

  142. southerntofu

    Element/matrix almost won over but is entirely unusable for people with less hardware (client & server)

  143. southerntofu

    L29Ah, the mapping is not done, but any prosody server can federate with .onion servers with mod_onions

  144. southerntofu

    but you can't (yet) have an account/resource/MUC that's exposed both as .onion and DNS addresses (and potentially others)

  145. southerntofu

    pep. started thinking about writing a prosody module for that (for the joinjabber MUC) but it's just an idea at the moment

  146. southerntofu

    (though in theory it should be really straightforward, i got it on paper :P)

  147. pep.

    yeah right now I'm mostly missing time :/