XSF Discussion - 2017-11-28


  1. zinid

    yeah, nice rules: 60% of members are in council now, so council will vote for council forever

  2. jonasw

    what?

  3. jonasw

    I’m pretty sure that’s incorrect

  4. Ge0rG

    indeed.

  5. jonasw

    https://xmpp.org/about/xsf/members.html we have many more members

  6. jonasw

    even though that page needs updating

  7. jonasw

    (preparing a PR)

  8. zinid

    jonasw, I checked https://wiki.xmpp.org/web/Membership_Applications_Q4_2017

  9. Ge0rG

    those are slightly more than nine.

  10. Ge0rG

    zinid: there are four application periods per year, you need to take them all together

  11. jonasw

    zinid, reapplication is needed yearly, not quarterly

  12. zinid

    ah

  13. zinid

    so where is the full list?

  14. jonasw

    so in Q4, at least four dropped out and up to one will be added

  15. jonasw

    I linked it, zinid

  16. jonasw

    https://xmpp.org/about/xsf/members.html

  17. zinid

    jonasw, is this page up to date?

  18. jonasw

    I am updating it with the new council and board election right now

  19. jonasw

    otherwise it is

  20. zinid

    ok, I didn't know you can reapply only once a year

  21. jonasw

    if someone could double-check I didn’t mess up here, then I’ll merge it: https://github.com/xsf/xmpp.org/pull/385

  22. zinid

    whatever, I actually have a question about processing empty values in data forms

  23. zinid

    for example, the type of the <field/> is 'jid-single' and the value is <value/>

  24. zinid

    what to do in this situation?

  25. zinid

    empty string is clearly not a JID

  26. Zash

    Mmmmmmm, yeah, that's somewhat ambigous IIRC

  27. zinid

    yeah, and if we forbid empty values, then how to clear the field?

  28. Zash

    <field><value/></field> == empty string and <field/> == NULL or something like that

  29. jonasw

    zinid, that’s simply invalid if the field is <required/>

  30. jonasw

    otherwise, I’d treat it as absent

  31. jonasw

    there is: > Note: Data provided for fields of type "jid-single" or "jid-multi" MUST contain one or more valid Jabber IDs, where validity is determined by the addressing rules defined in XMPP Core (see the Data Validation section below).

  32. zinid

    jonasw, absent meaning you should ignore it, or set it as "not set"?

  33. jonasw

    since <value/> violates that, I’d treat the field as absent or unset

  34. Zash

    There's also the case of submitting a partial form.

  35. jonasw

    which is either an error if the field was <required/> or leads to some defaulting if it wasn’t

  36. zinid

    jonasw, I'm not talking about required, it's obvious in this case

  37. jonasw

    zinid, well, if it’s not <required/> surely the business logic of the form already knows what to do if the field is missing?

  38. zinid

    jonasw, indeed, what to do? keeping the field values untouched in the database or remove it?

  39. zinid

    *value

  40. jonasw

    I’d NULL it

  41. zinid

    I actually tend to think you should not set <value/> at all if you need to erase it

  42. jonasw

    possibly

  43. Zash

    <value/> == <value></value> == ""

  44. jonasw

    which isn’t a valid JID

  45. Zash

    Nope

  46. Zash

    So you get an error back

  47. jonasw

    so both empty <value/> and no <value/> at all violate the note I quoted above

  48. zinid

    another issue: the type is 'jid-multi' and you got <value/><value/><value/>

  49. jonasw

    I hate XEP-0004

  50. zinid

    nah, we just should clarify it

  51. zinid

    the xep is okayish

  52. zinid

    IMHO

  53. jonasw

    and cut it in two pieces

  54. zinid

    psi sends <value/> inside jid-multi field, I have even work-around for this in the data form parser

  55. zinid

    so, most likely, to keep backward compatibility we need to treap empty <value/> as no <value/> at all and should set internally the field to default value (e.g. NULL)

  56. zinid

    *to treat

  57. zinid

    simply put, treat this situation as a "default value"

  58. Guus

    Georg, Kev, could you please provide a snippet for https://xmpp.org/about/xmpp-standards-foundation.html ?

  59. Guus

    test

  60. daniel

    Guus: 👍

  61. Guus

    tx

  62. Zash

    rx

  63. mathieui

    is there a way to know if we already voted?

  64. Kev

    Memberbot will tell you, I believe, when you say hello to it.

  65. jonasw

    yup, it will

  66. jonasw

    > (14:41:04) Memberbot: You have already participated in this election. Would you like to recast your votes? (yes / no)

  67. mathieui

    right, thanks

  68. marc

    Ge0rG, jonasw, I plan to provide a field (optional or required, determined by the service) to specify the name of the inviter, what do you think?

  69. jonasw

    sorry, I lack context. where would you provide that field?

  70. marc

    jonasw, user invitation

  71. marc

    Sorry :D

  72. jonasw

    and where’d that field be?

  73. marc

    Such that we can provide something like "You were invited by X to join..." on the invitation page

  74. marc

    Ad-hoc command

  75. marc

    Filled out by the inviter

  76. jonasw

    hmm

  77. jonasw

    the issue with that type of names is that they can easily be spoofed

  78. jonasw

    Ge0rG had some thoughts on this type of spoofing in the context of invitations IIRC

  79. marc

    Sure, it's not a security feature :)

  80. jonasw

    it could be misleading though

  81. marc

    Well, you have to send the URL to somebody, if the user trust this URL then there is no problem

  82. marc

    (because it trust the mail, SMS, ...)

  83. marc

    You can think of it as security feature if somebody tries to manipulate/replace the invitation URL ;)

  84. Ge0rG

    marc: I think it depends on how you implement it.

  85. Ge0rG

    marc: if it is an additional url parameter that contains the plaintext name, it's rather Meh.

  86. marc

    Ge0rG, that's up to the service

  87. Ge0rG

    marc: if you only attach a token to the URL and the user's JID is somehow obtained from the server via the token, it's a bit better

  88. marc

    The XEP defines the field

  89. marc

    How the invitation page is implemented is out of scope of this XEP

  90. Ge0rG

    marc: I see merit in defining the OOB behavior as well

  91. marc

    In my current implementation the name is fetched from a database via the token

  92. Ge0rG

    marc: so your XMPP server must also be a web server.

  93. marc

    Ge0rG, well, providing a web page is also optional

  94. marc

    My first implementation just uses the xmpp URI

  95. marc

    and generates a QR code

  96. marc

    Works nicely without web site etc.

  97. Ge0rG

    marc: so where is the inviter's name displayed, then?

  98. Ge0rG

    marc: does it also work nicely without an XMPP client?

  99. marc

    Ge0rG, the name is displayed on a web site, if you provide one

  100. marc

    Ge0rG, what works nicely?

  101. Ge0rG

    marc: the QR code

  102. marc

    the QR code is display in the xmpp client

  103. marc

    but you could also just send the xmpp uri via SMS or ...

  104. Ge0rG

    marc: and then?

  105. Ge0rG

    marc: how does your friend open an xmpp: URI without an XMPP client?

  106. marc

    Ge0rG, add a link with a download URL for a xmpp client ;)

  107. Ge0rG

    marc: why not just use easy-xmpp-invitation? :P

  108. marc

    Ge0rG, what's easy-xmpp-invitation?

  109. marc

    ah I see

  110. marc

    your website template

  111. marc

    Ge0rG, that's nice but why should it be required by the XEP?

  112. marc

    I prefer a web site for invitation which displays the QR code, provides information about clients etc.

  113. marc

    But why should this be required?

  114. Ge0rG

    marc: how do you generate the url for the web site where the inviter's username is displayed?

  115. marc

    Ge0rG, the name is fetched from a database not included in the URL

  116. marc

    You could include it in the URL

  117. marc

    If you like but I don't care how that's implemented

  118. Ge0rG

    marc: you send me a QR code with xmpp:.... How do I know the URL of the web page?

  119. marc

    Out of scope IMO

  120. marc

    Ge0rG, either I send you a URL or a bare xmpp URI

  121. Ge0rG

    marc: where do you get the URL from?

  122. marc

    In best case you're next to me and just scan the QR code from my display of my mobile phone

  123. marc

    Ge0rG, the URL is generated by the server and sent back to the inviter

  124. Ge0rG

    marc: so the response to the ad-hoc command is an xmpp: URI and a web link?

  125. Ge0rG

    or either?

  126. marc

    Always a token

  127. marc

    And, if provided, a URL

  128. marc

    the xmpp URI can be generated by the client

  129. Ge0rG

    So the client needs to construct the xmpp: URI from the token?

  130. marc

    Yes

  131. Ge0rG

    And the server could send back an easy-xmpp-invitation URL or a mod_invite URL or some other black magic?

  132. marc

    Ge0rG, it can send back a URL to some web site, yes

  133. Ge0rG

    Sorry for the many questions, I'm trying to understand the protocol.

  134. Ge0rG

    marc: will that be a generic website or a personalized one?

  135. marc

    I thought it is not that complicated and straightforward :D

  136. Ge0rG

    marc: life is full of corner cases.

  137. marc

    Ge0rG, depends on the server / service

  138. Ge0rG

    marc: so if your server sends personalized links, your client can forward the web URL and be good, but if my server returns a generic URL, and my client forwards only that, it's worthless?

  139. marc

    they could also provide a URL to some porn web site if they like ;)

  140. Ge0rG

    besides of the porn, of course.

  141. marc

    Ge0rG, sure, of course the web site should include the xmpp URI, QR code etc

  142. marc

    Otherwise this web site wouldn't make sense

  143. Ge0rG

    marc: it could be a generic registration form or the ToS

  144. marc

    No, that's not good

  145. marc

    Well, you could do this, of course

  146. marc

    But then the token is useless :D

  147. Ge0rG

    marc: that's my point.

  148. Ge0rG

    marc: so the XEP needs to specify that the returned URL is a personalized one that also contains the token (or a different token with the same functionality)

  149. marc

    Ge0rG, we could also make the token optional and the server can send a URL of some generic invitation web site

  150. Ge0rG

    marc: you don't need a XEP for that, do you?

  151. marc

    Ge0rG, if you would like to have a standard for clients to request an inviation URL you do

  152. marc

    Otherwise, where do you get this URL from? Search on the web?

  153. marc

    Guessing?

  154. marc

    I'm not saying that this is the best "response" from a service but it is better than nothing :)

  155. Ge0rG

    marc: I'm saying that it's worse than nothing, if it is expected to be a specific URL

  156. Ge0rG

    the client needs to decide based on what it receives.

  157. Ge0rG

    if it receives [URL=https://yax.im/register, token=deadbeaf], it doesn't know whether it must send on both or only the URL

  158. Ge0rG

    so the URL needs to provide the same functionality as the token

  159. Ge0rG

    besides, it might be useful to return not just a token but an xmpp: URI, because the server might be better suited to construct it than the client

  160. Ge0rG

    then the server could return xmpp:free-hosting.com?token=deadbeef to a client logged in as user@legacy.free-hosting.com

  161. marc

    Sure, the server can also return the xmpp URI

  162. marc

    Ge0rG, but the URL can still be optional, right?

  163. Ge0rG

    marc: yes. The URL should be optional, I just would like to prevent "smart" server operators entering a generic URL there

  164. marc

    Ge0rG, yes, but we can not avoid it anyway ;)

  165. Ge0rG

    marc: but we can make it illegal via the XEP

  166. marc

    :D

  167. marc

    Ge0rG, btw, I think your easy-xmpp web site should auto-detect the operating system / browser and suggest a client :)

  168. Ge0rG

    marc: I think you are right, which is why I wrote that into the TODO

  169. marc

    ah nice ;)

  170. marc

    didn't read it

  171. Ge0rG

    too bad :P

  172. Kev

    I've just updated the Board mailing list. It's now current members + Council Chair + ED + Secretary.

  173. Guus

    ... ED ...

  174. Guus

    Ah, Exec. Director?

  175. Guus

    Thanks Kev

  176. jonasw

    Guus, so I’m not the only one having to re-think each time they see the abbreviation "ED"

  177. Guus

    "each time" <-- you've seen it before then? :)

  178. moparisthebest

    ha well I found a fool proof spam prevention system that would work for xmpp too, it's terrible, but it'd work

  179. moparisthebest

    our support got a ticket at work from a user who wasn't getting our emails because they have a spam prevention system that replies to the email with a link the sender has to click to allow the email through, or whitelist the address, or something

  180. jonasw

    Guus, members list

  181. moparisthebest

    so for unsolicited chat or subscription requests, server could message the user an http link that needs clicked before allowing it through... :/

  182. SamWhited

    moparisthebest: that's basically the same as the proof-of-work model we talked about, except less automated

  183. moparisthebest

    where is this discussion? must have missed it

  184. SamWhited

    that could be the fallback if a PoW message gets sent but the potential spammers client doesn't support it

  185. SamWhited

    moparisthebest: I'm not sure where or when; it was a while ago. TL;DR if you get a message from someone you don't know, send their client a relatively expensive problem they have to compute and respond to before you'll show the message to the user

  186. moparisthebest

    I actually think this would work better in xmpp vs email, this user wanted the person at our company monitoring the system.noreply@ourdomain.com email to click the link...

  187. moparisthebest

    yea the combination might be good

  188. SamWhited

    I've got a TODO to write up a spec for that actually; I should do that this weekend.

  189. moparisthebest

    you should :)

  190. jonasw

    *SHOULD :-)

  191. SamWhited moves it up to the top of his list from the bottom that's off the screen and therefore was forgotten about

  192. moparisthebest

    with a message a link fallback, servers could sanely turn it on before client support was widespread

  193. SamWhited

    actually, my TODO was for using it with IBR2, but the same challenge could be reused for both probably

  194. moparisthebest

    and you don't need to specify what happens with the link, if that happens you expect human intervention, servers might whitelist automatically, have a captcha, or whatever

  195. Holger

    What part of this needs a spec?

  196. moparisthebest

    the automated proof of work part

  197. moparisthebest

    the sending a link would not

  198. SamWhited

    Holger: the link part doesn't, but if we want clients to automatically respond to PoW challenges from the server that part needs a spec

  199. Holger

    Ah the client responds without automatically? What happens to people with old clients?

  200. Holger

    s/without//

  201. SamWhited

    Holger: that's why you include a link to a captcha or something in the body. Old clients show that, you can click it and complete a human challenge instead

  202. MattJ

    They click the link

  203. Holger

    Ah.

  204. SamWhited

    Just like joining MUCs on Jabber.ru, which I think does this with clients that don't support their captcha forms (you get a link to the same form on the web)

  205. MattJ

    and here you go: https://xmpp.org/extensions/xep-0158.html#challenge-hashcash

  206. MattJ

    Later in the document: "A challenger MAY provide a text question in the <body/> element of a challenge stanza for clients that do not support CAPTCHA forms."

  207. SamWhited

    oh hey, would you look at that, been done

  208. MattJ

    The problem I see with proof-of-work is that spammers have access to lots of CPU cycles (that typically aren't really theirs), and real users don't

  209. SamWhited

    It's true, it doesn't stop botnets, it just stops every person with a laptop from being able to register hundreds of accounts and then send spam with them all day

  210. Ge0rG

    Especially mobile users don't.

  211. MattJ

    So you'll flatten a user's battery a bit, and you'll cost a spammer some miniscule amount of money on a botnet or captcha-solving platform

  212. SamWhited

    *slows down (not stops)

  213. SamWhited

    It still forces them to use a botnet or captcha-solving platform, which is more work. And most users will rarely have to do this, only spammers would need to do it regularly

  214. MattJ

    Pretty sure the user's battery will drain before the spammers deem it not cost-effective

  215. SamWhited

    I suspect anyways; I bet most "normal" people only communicate with people on their roster, and if we drain a users battery because their phone is in a botnet I'm pretty okay with that

  216. MattJ

    SamWhited, we had CAPTCHA on register.jabber.org, it didn't stop them, just slowed them down - doesn't solve much at the end of the day

  217. SamWhited

    Slowing them down is really the only point; it's the best we can do

  218. Ge0rG

    Let's slow them down by retracting subscriptions from known spammers.

  219. moparisthebest

    it wouldn't drain a mobile users battery at all, except a tiny amount once when they send a message to a new user they haven't sent one to before, right?

  220. Ge0rG

    moparisthebest: there is a little problem there: PoW is much more energy-expensive on a mobile CPU than on a GPU cluster.

  221. moparisthebest

    and if botnets do indeed bother and implement this, you can just fall back to manual human-intervention-required link challenge

  222. moparisthebest

    Ge0rG, but it happens once per new message to new user max?

  223. moparisthebest

    so like, maybe 30 times over the course of an entire xmpp account's life?

  224. moparisthebest

    maybe other people are far more popular than I am idk

  225. jonasw

    Ge0rG, depends on the PoW

  226. jonasw

    memory-hard proofs come into mind

  227. jonasw

    scrypt or something

  228. moparisthebest

    and yea you could do something that is harder on gpus, yep scrypt

  229. Ge0rG

    jonasw: right, because OOM isn't a thing on mobile :P

  230. jonasw

    Ge0rG, it is, but using lareg amount of memory is expensive on GPUs

  231. jonasw

    (and on FPGAs)

  232. Ge0rG

    jonasw: we aren't talking about bitcoin mining parallelization here

  233. Ge0rG

    or whatever-scrypt-coin

  234. jonasw

    where large is something like ~100 MiB already, depending on the type of operations

  235. Ge0rG

    You can't expect an old Android phone to provide 100MB (plus JVM overhead) to calculate a PoW

  236. jonasw

    I would expect that to work actually

  237. jonasw

    I bet firefox needs more

  238. jonasw

    firefox gets swapped out then, I’m fine with that

  239. Ge0rG

    jonasw: "Bug report: my browser gets killed when I add a friend"

  240. moparisthebest

    an old android phone can't run conversations either so who cares

  241. Ge0rG

    I think this is insane.

  242. jonasw

    your browser gets killed always anyways on those machines.

  243. mathieui

    this is crazy, yes

  244. SamWhited

    We'd have to think about that, but the point is that we can think of something that's not too bad for mobile users but still does the job

  245. moparisthebest

    then you disable it on your client and solve http links by hand Ge0rG ?

  246. jonasw

    I can’t really use my broswer + any other app on my Galaxy S3.

  247. Ge0rG

    moparisthebest: no, I just switch to WhatsBook.

  248. jonasw

    with WhatsBook, you need mutual subscription first anyways?

  249. moparisthebest

    are you thinking this is something that would happen often?

  250. jonasw

    I thought we had that as a possible sensible solution, too

  251. Holger

    jonasw: You don't.

  252. jonasw

    Holger, hm, when we discussed this a few weeks ago, I think the consensus was that you need it, but w/e

  253. Ge0rG

    moparisthebest: unless we make PoW prohibitively expensive for normal users, spammers won't be slowed / stopped by it.

  254. Holger

    jonasw: I remember someone claiming that and me not finding a single commercial messenger that actually does that.

  255. Holger

    jonasw: And I think it's unusable as a general solution.

  256. Holger

    Though admittedly this PoW idea sounds even worse.

  257. SamWhited

    If memory consumption and GPUs turn out to really be an issue it could also use an algorithm that relies on cache locality

  258. moparisthebest

    Ge0rG, bcrypt and scrypt would like to disagree with you

  259. moparisthebest

    they were explicitly designed to be not so bad for normal users, and prohibitive for bad guys

  260. jonasw

    funny question, couldn’t the PoW be solved by a users server?

  261. MattJ

    Yes, this would be interesting :)

  262. mathieui

    new DoS way

  263. jonasw

    you’d quota that of course etc., but for the occasional adding of a contact…?

  264. MattJ

    mathieui, it would encourage server admins to lock down their servers better :)

  265. jonasw

    like, 3 PoW / day / user, 60 PoW / hour in total or so

  266. SamWhited

    jonasw: that's an interesting idea; sounds like a possible DoS, but servers could be smart about it and say "this user is generating too many PoWs, what are they doing?"

  267. jonasw

    SamWhited, exactly

  268. jonasw

    that’d solve the mobile issue

  269. moparisthebest

    that only helps good public servers being abused to send spam

  270. Ge0rG

    moparisthebest: https://bitcoinware.net/collections/gridseed-dual-ltc-and-btc-miner

  271. moparisthebest

    but, good thing to help I guess

  272. mathieui

    moparisthebest, and it will slow down bad servers just as well

  273. jonasw

    it also gives servers an interesting metric on users sending a lot of subscriptions/new messages

  274. SamWhited

    That only works if the server supports the PoW thing though; otherwise you still have to issue it to the client (or issue a captcha)

  275. jonasw

    and if the server is overloaded with PoW, it could simply forward it to the client.

  276. Ge0rG

    it would be better to have users do PoW to pay for their server.

  277. jonasw

    SamWhited, ofc.

  278. SamWhited

    So if a spammer has spun up their own server, you still have to support the original model

  279. moparisthebest

    Ge0rG, so xmpp spammers are going to buy super expensive miners, and try to use them for xmpp PoW ? seems unlikely

  280. jonasw

    "the original model", SamWhited?

  281. SamWhited

    jonasw: sending a captcha/PoW to the client, I mean

  282. jonasw

    you’d send it to the user, the server can decide to intercept the PoW request and handle it by itself or forward it to the client

  283. Ge0rG

    moparisthebest: spammers will either distribute PoW to their botnet, where you will be paying for the PoW, or rent some gigahashes.

  284. jonasw

    I’m not sure what you mean

  285. moparisthebest

    I don't think they really have botnets now, just register on open servers and spam until banned

  286. Ge0rG

    moparisthebest: please stop arguing. The PoW battle has been lost.

  287. jonasw

    Ge0rG, not sure

  288. moparisthebest

    there is no golden solves everything problem, you can only annoy them a bit, slow them down for a bit

  289. jonasw

    if you have a botnet, you’re probably better off putting that computing power into $cryptocoin

  290. jonasw

    instead of trying to spam

  291. moparisthebest

    it's an arms race :P

  292. Ge0rG

    moparisthebest: we can make life really miserable for mobile users and slightly annoy spammers.

  293. moparisthebest

    you still haven't said how it would hurt mobile users at all?

  294. Ge0rG

    jonasw: you need orders of magnitude more power for viable commercial mining

  295. SamWhited

    Right, if you have a botnet to spam with we can't stop you right now, but we can slow down your botnet so that you send less spam and possibly make it prohibitively expensive for the people who spin up a single server in their basemenet to send out spam

  296. moparisthebest

    are you mistakenly thinking this would happen on every message or something?

  297. SamWhited

    And we can do it without affecting users at all, I suspect

  298. SamWhited

    *well behaved users

  299. moparisthebest

    how often do you add or message new users? how often does a normal user do that? I'm thinking very rarely

  300. Ge0rG

    moparisthebest: just to repeat my argument: if you make it sufficiently hard for spammers, it will be prohibitive for normal users.

  301. moparisthebest

    and again that's just wrong Ge0rG

  302. SamWhited

    Ge0rG: we're disagreeing with that argument. Why do you think it would be prohibitvely expensive for normal users?

  303. jonasw

    I doubt we’ll reach an argument here

  304. jonasw

    we need data

  305. Ge0rG

    moparisthebest: okay, suggest a number of scrypt operations a user needs to perform for an initial contact.

  306. jonasw

    maybe some google scholar-ing on how botnets operate nowadays?

  307. SamWhited

    Spammers send lots of messages to people that aren't on their contact lists, normal users don't. That asymetry is what we're targeting.

  308. Ge0rG

    SamWhited: we can target that with simple statistics, without annoying anyone.

  309. moparisthebest

    Ge0rG, whatever takes about 4ish seconds on say a samsung galaxy s4

  310. SamWhited

    Ge0rG: where and how do you get those statistics?

  311. MattJ

    SamWhited, I agree that I think this is the best place to solve this problem

  312. Holger

    "Q: My app crashes (or crashes other apps) when adding a contact. A: Don't worry, I know that you don't often add contacts."

  313. moparisthebest

    yea you wouldn't make it crash

  314. jonasw

    also, shouldn’t this discussion move to spam@?

  315. SamWhited

    Holger: that's why we have to do research and find something that won't OOM everyone but is still relatively tricky

  316. SamWhited

    Too many rooms.

  317. jonasw

    Holger, I still claim that users on devices with this low amount of memory are used to that

  318. Holger

    We can add that to our response then.

  319. Ge0rG

    Okay, just to get some numbers. "I managed to pull around 5.6KHash/sec on my Nexus 7 with all four threads." from https://rumorscity.com/2014/01/07/how-to-mine-litecoin-with-android/

  320. MattJ

    Proof of work aside, it's very easy to identify accounts sending to a lot of non-contacts. Spammers will switch to subscription requests, but it's equally easy to spot (new?) accounts sending lots of subscription requests, and this is uncommon (not impossible for a legitimate user, just uncommon)

  321. Holger

    Indeed.

  322. Ge0rG

    So we are at ~20 KHashes for a first-contact

  323. moparisthebest

    MattJ, you mean easy if you run a server with lots of users I guess?

  324. MattJ

    Easy on any server

  325. jonasw

    MattJ, you assume that the server isn’t malicious

  326. moparisthebest

    or, easy for a public server to spot new users of it's server

  327. jonasw

    I find that assumption incorrect

  328. SamWhited

    MattJ: I agree, server operators should be doing that

  329. MattJ

    jonasw, that is an assumption in this case, malicious servers are a different thing

  330. moparisthebest

    yea explain how my private server with 4 xmpp accounts can see any of this data, easily or not

  331. MattJ

    But that's not a problem we have today

  332. jonasw

    MattJ, it is

  333. jonasw

    I think

  334. Holger

    And malicious servers won't respond to PoW requests?

  335. moparisthebest

    Holger, if they don't do the pow or click the link and do whatever is there, no requests get through to the client?

  336. jonasw

    fighting spam at the source is of course most sensible, but hard in a distributed system

  337. moparisthebest

    so, it's not a problem

  338. SamWhited

    Holger: they will respond to PoW requests, and that's the point. It will slow them down because they'll be responding to *lots* of them.

  339. moparisthebest

    and if they do pow and too much spam still gets through, turn off pow and go back to manual links

  340. mathieui

    also: if a server implements the PoW thing, it could "wall" the subscriptions unless it’s mutual

  341. moparisthebest

    make them play an html5 punch the monkey game and beat a high score to whitelist their jid :P

  342. mathieui

    (e.g. "user A and user B want to communicate, B’s server does not implement PoW, B adds A, A sees nothing; A adds B because they know about it: the subscription is established")

  343. moparisthebest

    or A's server sends an https link to user B and when clicked lets it go through

  344. Ge0rG

    you can rent 500MH/s for three hours for ~3USD. That accounts for 100 Millions spam messages.

  345. Ge0rG

    if you price a single spam message at 20KH scrypt.

  346. MattJ

    Case closed :)

  347. Holger

    SamWhited: I got the idea, I just don't see the gain in throttling them to, dunno, some hundreds of thousands of messages per day and CPU core or whatever. Do they really send millions per day right now?

  348. Holger

    What Ge0rG said.

  349. jonasw

    Ge0rG, "ouch"

  350. Ge0rG

    moparisthebest: so will you stop now?

  351. zinid

    right, what will happen is that spam will become a bit more expensive for the customers 🙂

  352. Ge0rG

    source for MH price: https://www.miningrigrentals.com/rigs/scrypt

  353. SamWhited

    Holger: I don't know. More research would definitely be required, I just suspect we could slow them down a bit

  354. moparisthebest

    and are you sure you can use that for arbitrary scrypt challenges Ge0rG ?

  355. Ge0rG

    moparisthebest: again, spammers will just use whatever botnet they can get away with.

  356. jonasw

    moparisthebest, if you can’t *now*, as soon as you can use this to make some financial gain (e.g. spam), they will adapt so that it can be used for that

  357. Ge0rG

    moparisthebest: even when running on desktop Windows malware, you are several orders of magnitude faster than on a mobile device.

  358. moparisthebest

    possibly, but then you are excluding spammers who don't have botnets

  359. jonasw

    moparisthebest, even a spammer with their own server can easily outperform that challenge

  360. moparisthebest

    are there challenges that are faster on ARM than amd64 ?

  361. Ge0rG

    moparisthebest: let's just exclude all spammers by definition. Congratulations, we have won the spam war.

  362. jonasw

    20 kH is not much

  363. Ge0rG

    I can go back to work now.

  364. SamWhited

    Botnets would (hopefully) still be slowed down, non-botnets it might be too expensive. It's not a panacea, but it still seems like it could be a benefit if the idea works.

  365. moparisthebest

    right there is no panacea

  366. Ge0rG

    Right. So please pretty please let's focus on the ideas that make it actually worse for spammers than for users.

  367. moparisthebest

    like this one

  368. moparisthebest

    or, what is your other idea?

  369. Ge0rG

    moparisthebest: read up my posts on the operators@ and standards@ MLs.

  370. zinid

    digitalocean started to provide high performance servers for computational tasks, for the record, I think 500MH/s would be nothing for those

  371. Ge0rG

    moparisthebest: I've exceeded my time budget for convincing you on pointless scrypt performance calculations, sorry.

  372. Holger

    moparisthebest: Mine is server-side filtering based on both message contents and meta data. Works relatively well for email.

  373. moparisthebest

    Ge0rG, I've been following a bit, but iirc most are geared towards running large-ish public servers with lots of data to analyze

  374. moparisthebest

    and nothing for small private servers

  375. Holger

    SpamAssassin works just fine for small private email servers.

  376. moparisthebest

    it does for email, I was under the impression most xmpp spam was too small for it to be effective

  377. Ge0rG

    there are many theoretical solutions that just won't work out. Like a distributed p2p reputation system.

  378. SamWhited

    Holger: I've been wondering about that too; do you have that tied to an XMPP server? How well does it work for the shorter XMPP messages?

  379. Ge0rG

    Some months ago, 99% of spam was multi-line Russian with multiple links.

  380. Ge0rG

    Easy to kill, just filter multi-line messages from strangers.

  381. Ge0rG

    Then, they switched to single-line messages with two pastebin links. Still pretty easy.

  382. moparisthebest

    sure and it's easy to do stuff like that, doesn't solve everything though, just like PoW doesn't

  383. SamWhited

    Those are good things to do as well

  384. Ge0rG

    moparisthebest: yes, but PoW WILL ANNOY USERS

  385. Holger

    SamWhited: I think it'll work quite well. Problem is it requires work.

  386. zinid

    Holger, except that Bayes sucks for short messages

  387. moparisthebest

    besides I look forward to a future when all messages are encrypted base64 blobs :P

  388. Holger

    moparisthebest: So all solutions are equally adequate because none are perfect?

  389. Ge0rG

    Now they send a subscription request + multiline / pastebin

  390. SamWhited

    Yah, I suspect zinid is right and it won't work so well for XMPP messages, but I'd love to be proven wrong

  391. Holger

    zinid: Yes I would definitely not rely just on Bayes.

  392. moparisthebest

    no, I'm saying you should implement non-perfect solutions because those are the only solutions we have Holger

  393. Ge0rG

    moparisthebest: you are saying we should implement bad solutions because there are no perfect ones.

  394. Holger

    moparisthebest: And I'm saying some non-perfect solutions are way better than others. So "nothing is perfect" is not a very convincing reasoning.

  395. Ge0rG

    I haven't seen a spam message in weeks. Just the subscription requests

  396. zinid

    Holger, there is very little research for short messages, I recall a couple of papers only, you can search google scholar with "sms spam" query

  397. Ge0rG

    BTW, my next proposals would be: - revert a pending subscription if a sender is classified as spam - implement a cache of URLs sent by strangers, with counters, and block messages with a count > 3

  398. Ge0rG

    MattJ: ^

  399. moparisthebest

    and, again, both of those solutions only work for large public servers Ge0rG

  400. moparisthebest

    I'm literally the only user of my xmpp server to get any spam

  401. Ge0rG

    moparisthebest: you know what? spammers are sending messages to non-existent accounts. You could easily set up a honeypot

  402. SamWhited

    Ge0rG: I agree, both of those things are a good start and should probably be done (although they also probably need a way of dealing with false positives, but that's a different problem)

  403. Ge0rG

    moparisthebest: please log on your server messages sent to non-existent accounts

  404. moparisthebest

    I'm not saying they aren't good solutions for large public servers, or that you shouldn't implement them, I just also want something that makes running your own server practical

  405. MattJ

    Ge0rG, #2 won't work, the URLs can vary too easily

  406. zinid

    moparisthebest, set spam traps 🙂

  407. Ge0rG

    MattJ: it's expensive to create a large number of shortened links

  408. MattJ

    Trivial to append #uuid

  409. Ge0rG

    MattJ: besides, we could HEAD them :P

  410. MattJ

    Trivial to append ?uuid

  411. zinid

    moparisthebest, i.e. non-unsed accounts, but you publish them everywhere 😉

  412. moparisthebest

    yea but is that what we suggest to people wanting to run their own servers

  413. moparisthebest

    start your server, setup SRV records, post non-existant accounts at random places

  414. Holger

    zinid: Yes, I don't have papers to prove my point. But many of the criteria used for email classification are unrelated to the length of the message body.

  415. SamWhited

    Holger, zinid: seems worth trying either way

  416. Ge0rG

    moparisthebest: you could just block messages from strangers with an URL.

  417. zinid

    Holger, yes, maybe you can do that, no doubt, although the result is unpredictable

  418. Ge0rG

    yax.im will send an error response "Blocked due to abuse", so a real sender actually will see a message about being blocked

  419. moparisthebest

    Ge0rG, what about subscription spam

  420. zinid

    what about captcha btw?

  421. Ge0rG

    moparisthebest: see above

  422. moparisthebest

    also none of this works for encryption

  423. moparisthebest

    spammers will soon start sending omemo messages :P

  424. Holger

    Yes that's one of my complaints with E2EE.

  425. Ge0rG

    moparisthebest: I'm sure they will

  426. Ge0rG

    I'm eagerly awaiting the day when I can block E2EE on my server :P

  427. zinid

    Holger, ah, yes, E2EE, hehe

  428. moparisthebest

    so back around to the original plan of replying with a https link with arbitrary things to solve on it

  429. Ge0rG

    moparisthebest: yes, let your friends play xbill or whack-a-mole.

  430. Ge0rG

    or solve a reCAPTCHA.

  431. moparisthebest

    yes, once, doesn't seem like too much to ask?

  432. mathieui

    maybe we could embed flash applications as base64 inside subscription replies

  433. Ge0rG

    moparisthebest: you can do all that on your private server

  434. Ge0rG

    moparisthebest: but it doesn't work well for public services

  435. moparisthebest

    obviously doesn't happen if you send them an easy xmpp invite url or whatever

  436. moparisthebest

    mathieui, it's 2017 you mean html5 applications

  437. moparisthebest

    seems like it'd work equally well for public servers?

  438. moparisthebest

    public servers just additionally have much more to go on, so maybe it wouldn't always be necessary

  439. Ge0rG

    Holger: please tell MattJ about the normal-message-to-full-JID thing.

  440. Holger

    The "some clients do that so servers can't throw the message away" thing?

  441. Holger

    Some clients do that so servers can't throw the message away.

  442. Holger

    Well they can but some users will be yelling at you.

  443. Ge0rG

    Holger: yeah, that thing. Was it just a misuse of Gajim, or was that a really f***ing big problem?

  444. Holger

    The main problem was some mobile and/or JavaScript libraries doing that by default or something.

  445. Holger

    Not sure about public clients. Maybe it was just Gajim.

  446. Ge0rG

    Holger: I'd like to know which clients exactly... :>

  447. Holger

    I don't remember more than that sorry.

  448. MattJ

    Meh, I'm still going to go for it

  449. Holger

    I think the real issue is that type=normal is overloaded to do unrelated things.

  450. Ge0rG

    Right.

  451. Ge0rG

    Like MAM responses from a remote MUC

  452. Ge0rG

    And Carbons and ACKs and many other XEPs

  453. Ge0rG

    And type influences both the meaning and the routing.

  454. Holger

    Yes on the one hand there's these type=normal messages addressed to individual *devices* and on the other there's type=normal messages addressed to humans, i.e. to accounts.

  455. Holger

    If now everyone agrees that the latter should be addressed to the bare JID, the problem is partly solved.

  456. Holger

    But the RFC disagrees, and so does some of the existing client code.

  457. Ge0rG

    Holger: RFC6121 says you are not required to persist normal full-JID messages.

  458. Ge0rG

    I'm not sure resource locking is part of RFC

  459. Holger

    It's part of 6121.

  460. Holger

    https://tools.ietf.org/html/rfc6121#section-5.1

  461. Ge0rG

    Bummer.

  462. zinid

    Holger: I see only SHOULDs there, am I missing something?

  463. zinid

    but of course that doesn't mean existing code won't break ;)

  464. Holger

    Yes only SHOULDs.

  465. Ge0rG

    can an XML attribute value contain newlines?

  466. zinid

    Ge0rG: seems like expat eats it

  467. zinid

    but probably better to escape it