15:58:48 <meskio> #startmeeting tor anti-censorship meeting
15:58:48 <MeetBot> Meeting started Thu Feb  2 15:58:48 2023 UTC.  The chair is meskio. Information about MeetBot at http://wiki.debian.org/MeetBot.
15:58:48 <MeetBot> Useful Commands: #action #agreed #help #info #idea #link #topic.
15:58:52 <meskio> hello everybody!!!
15:58:56 <meskio> here is our meeting pad: https://pad.riseup.net/p/tor-anti-censorship-keep
15:58:58 <hackerncoder> hi!
15:59:06 <meskio> feel free to add what you've been working on and put items on the agenda
15:59:17 <shelikhoo> hi~
15:59:37 <cohosh> hi
16:00:05 <arma2> hello world
16:00:43 <ggus> hey ac-team, do you know if there is a ticket or a proposal about making bridge lines into human-memorable addresses? For example, instead of typing 'obfs4 IP:OBSF4_Port cert=<random strings>' users would get something like this <shorthand-displace-protract-uninsured-surround-alarm>
16:01:07 <meskio> AFAIK no, you have emojies, but just to check that the bridgeline is fine
16:01:18 <arma2> ggus: i think more focus has been encoding the bridge info in a qr code
16:01:29 <shelikhoo> I think for information theory reasons, it is not possible to remember it by memory...
16:01:35 <shelikhoo> for most people
16:01:48 <arma2> how many bits is the obfs4 cert? quite a few i suspect
16:02:00 <meskio> ggus: do you want to be able to check if you got the same bridge? or to actually share full bridge information encoded there?
16:03:13 <arma2> and, by 'check' do you mean be confident that you're right, even under attack? :)
16:03:35 <GeKo> meskio: i am in a different meeting, just one request from my side: could you check https://gitlab.torproject.org/tpo/anti-censorship/rdsys/-/issues/150? we have some questions and it seems this is blocked by you
16:04:02 <ggus> meskio: i want to share a bridge with users on frontdesk and then it would be easier to spot if they copied the wrong word. right now people are having a lot of issues copying such lines, ie, copying just a piece of it, removing part of the line, etc
16:04:17 <meskio> GeKo: ack, I will check it
16:04:44 <shelikhoo> in this way, we can actually embed checksum into the bridge line
16:04:52 <shelikhoo> instead of let user check it manually
16:05:03 <meskio> ggus: aren't emoji's enough to check if they are right?
16:05:03 <dcf1> obfs4 cert is 256 + 160 bits. 256-bit curve25519 public key and 160-bit nodeid.
16:06:27 <arma2> re emojis, i guess the idea would be "copy this bridge line in, and if you got it right your emoji should look like this"
16:06:49 <ggus> meskio: emojis could help on that, but the problem is copying the actual line.
16:06:51 <arma2> kind of weird to do checksums as pictures, but, maybe it works better for non-numbers people :)
16:07:09 <ggus> and type some words vs a bridge certificate is way easier
16:07:28 <arma2> ggus: i think the problem here is that it would be like 30 words, not 4
16:07:29 <meskio> I see, what you want is something that is easier to manually type if you can't copy paste
16:07:36 <meskio> qr codes?
16:08:23 <ggus> actually, i'd prefer to submit these formats (qrcodes vs words vs other thing) to user research
16:08:37 <meskio> a list of words will be pretty long, we can make numbers of how long, but I expect long enough that people will also fail on copying them
16:09:07 <meskio> ggus: great, let's open a ticket about it and we can produce examples of each of the options
16:09:27 <ggus> ack!
16:09:35 <meskio> will you open the issue?
16:09:41 <meskio> I'll help producing the examples
16:09:44 <ggus> yes, i'm opening now
16:09:49 <meskio> thanks
16:09:59 <ggus> nah: donuts: maybe this could be part of s30 ur? ^
16:10:17 <meskio> anything else on this topic?
16:10:27 <arma2> ggus: also, knowing what sort of platforms these users are on (android vs windows) will change the question a lot
16:10:38 <nah> ggus: if it comes in time for testing in march/april, for sure!
16:10:38 <meskio> yep
16:10:50 <meskio> but I've seeing tails scanning qr-codes from a laptop...
16:10:59 <donuts> well, we have quite a lot queued up for S30 already – so I'm not so sure
16:11:01 <meskio> I mean using the laptop to scan the qr-code
16:11:02 <donuts> we're currently working on a new circuit display
16:11:10 <arma2> meskio: fun!
16:11:14 <donuts> but we can definitely do UR for it _somewhere_
16:11:37 <meskio> :)
16:11:48 <nah> ;)
16:11:49 <donuts> i am also super excited about this idea :D
16:12:24 <donuts> maybe we could just do some light paper prototyping/figma-feedback initially
16:12:40 <dcf1> there is also the possibility that obfs4proxy could be modified to generate its cert deterministically using some password-based key derivation over a shorter, more memorable list of words
16:12:58 <arma2> dcf1: hm!
16:13:00 <dcf1> like stretch 80 bits into 416 bits, or whatever is a comfortable security and usability threshold
16:13:14 <arma2> good outside-the-box thinking
16:13:20 <meskio> ohh, interesting idea
16:13:33 <donuts> <+meskio> ggus: great, let's open a ticket about it and we can produce examples of each of the options <- this will be very useful, thank you!
16:13:39 <shelikhoo> yes, this is something we could do!
16:14:25 <shelikhoo> I think the issue here is that we can only generate private key deterministicly
16:14:48 <dcf1> shelikhoo: good point, I didn't think of that
16:15:26 <arma2> right, you would need to get involved at the "creation of the bridge" step, not after
16:15:46 <arma2> heck, by that reasoning maybe we can just shorten the cert
16:16:22 <arma2> will be good to have a ticket for organizing all of these partially-baked ideas
16:16:47 <arma2> (another partially-baked idea is that you don't *really* need the bridge fingerprint, if you trust-on-first-connection it)
16:16:59 <shelikhoo> the issue is that if the client would need to have the seed to generate the private key to generate its public key
16:17:09 <shelikhoo> so the security part of things changes
16:17:53 <arma2> yep, if there's a trapdoor in key generation that results in fewer real bits of key, everything might be simpler just to use shorter keys from the beginning
16:18:44 <arma2> anyway, ticket :)
16:19:06 <meskio> great, let's discuss it in the issue that ggus is opening
16:19:14 <meskio> and maybe we can move to the next topic
16:19:31 <meskio> "snowflake fallback"
16:19:45 <arma2> i made a branch that implements the 'only talk to first n bridges' idea
16:19:58 <meskio> nice
16:20:01 <arma2> it was a bit more complicated than expected, because i uncovered and fixed a few other, erm, tor surprises along the way
16:20:16 <arma2> i can't predict whether the network team will say 'ok great' or 'wtf why would we change this'
16:20:35 <arma2> but it is reasonable to imagine it could go into, whenever that comes out
16:21:01 <arma2> if we need to push for having it in 0.4.7.x, which tor browser users would get sooner, that could happen but would require more convincing
16:21:17 <arma2> the one big catch is: you can't have multiple bridge lines with the same fingerprint,
16:21:28 <arma2> so if we go this route we'd want to deploy new bridges on the snowflake servers
16:21:57 <arma2> i.e. one bridge for snowflake01+domainfronting, and a different bridge for snowflake01+ampcache
16:22:00 <ahf> 0.4.8 is not so far into the future if conflux goes in - some point in q2 i think
16:22:00 <meskio> the change in c-tor is still useful for future snowflake with more than two bridges
16:22:41 <meskio> AFAIK we have three options here for the fallback:
16:22:57 <meskio> * multiple bridge lines as arma2 just mentioned
16:23:23 <meskio> * no fallback, just different definitions in TB for snowflake-domain-front and snowflake-ampcache
16:23:40 <meskio> * do a fallback on the snowflake client somehow, like we proposed with the binary args
16:24:09 <arma2> tell us more about #2? what do you mean different definitions
16:24:33 <dcf1> like there used to be meek-google, meek-amazon visible in the settings UI
16:24:45 <arma2> oh, ah ha, let the user click one or click the other. ok.
16:24:48 <dcf1> which was a workaround for the fact that the UI did not offer a way to change specific settings for one bridge line
16:25:14 <arma2> so option 1 is mainly c-tor work, option 2 is mainly tor browser+ux work, option 3 is mainly snowflake work?
16:25:28 <meskio> yes
16:25:34 <meskio> it looks like we have more agency with 3...
16:25:45 <meskio> agency => we don't push work to others
16:26:13 <dcf1> This is effectively what Orbot and Onion Browser do. "Snowflake method 1" and "Snowflake method 2" https://forum.torproject.net/t/iran-circumventing-censorship-with-tor/4590#orbot-for-android-28
16:27:00 <dcf1> We started this conversation when ampcache was merged, noting that our rendezvous configuration mechanism is a little jank
16:27:27 <dcf1> it was only a kind of happy coincidence that the ampcache could use the existing url= and front= parameters, and only added an ampcache= one
16:27:55 <dcf1> but other conceivable rendezvous methods could use an entirely different set of parameters, and we don't have a way to specify more than one at a time, let alone priority, etc.
16:28:38 <arma2> option 1 lets you do 'more than one at a time' but isn't good at 'priority'
16:28:54 <dcf1> https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/50#discussion
16:28:59 <arma2> i think if we want genuine fallback, i.e. try this then try that, we want option 3
16:29:06 <dcf1> "The AMP cache rendezvous happens to coexist nicely with domain fronting rendezvous with respect to command-line options, because it needs the same two pieces of information (-url and -front), in addition to the new -ampcache. But conceptually, ..." etc.
16:29:50 <arma2> last week, this problem was urgent, i.e. iran users needed some change urgently. this week it seems it is less urgent. can we predict next week? :)
16:29:58 <dcf1> This is where PT 2.0-style JSON configuration would be nice.
16:30:17 <meskio> I think the best would be to encode in the bridgeline all the fallback options, but right now we have a limitation on size for the bridgeline
16:30:36 <dcf1> "rendezvous": [{"type": "domainfront", ...}, {"type": "ampcache", ...}, {"type": "dns", ...}]
16:31:18 <meskio> yes, json format would be nice, but again making more complicated to copy bridgelines...
16:31:26 <ggus> https://gitlab.torproject.org/tpo/anti-censorship/team/-/issues/117
16:31:33 <meskio> thanks
16:31:36 <arma2> dcf1: yep! and see also this ticket on an independent module to provide these options to anybody who needs a signaling channel: https://gitlab.torproject.org/tpo/anti-censorship/team/-/issues/111
16:32:05 <shelikhoo> a lot of users might have difficulty matching the brackets in the config file..
16:32:15 <shelikhoo> based on my experience with json config... hahaha
16:32:34 <arma2> shelikhoo: yeah, you might want to encode the bridge line into one big base64 blob or something -- using the ideas in gus's new ticket
16:32:56 <arma2> or, better yet, make it so users never have to see or paste the bridge line
16:33:50 <meskio> with snowflake there is the bridge configuration and global configuration (like signaling channel), but we put both in the bridgeline
16:34:15 <arma2> meskio: maybe one way forward in your options is to learn if there is a snowflake developer who wants to implement fallback, and/or if there is an anti-censorship dev who wants to take charge of bridge line formats and fix them
16:35:24 <shelikhoo> json in base64 is also quite popular in v2ray ecosystem... often used to share a connection setting... I in general works fine until someone decided to add an extension to the scheme, which isn't an issue for Tor's use case
16:36:54 <meskio> arma2: yes, I'm not sure how to prioritize it, as who knows when will it be needed again, but we can consider it part of s96 work
16:37:18 <meskio> not sure if shelikhoo or itchyonion have cicles for it in the near future
16:37:42 <shelikhoo> actually this is two separate problem happening at the same time, if we go with 3.
16:38:09 <arma2> right. 3a snowflake learns how to fall back, 3b bridge lines can include more info?
16:38:40 <arma2> or maybe "3b find a way to tell snowflake more parameters"
16:38:43 <shelikhoo> shelikhoo could start work on it in 2~3 weeks time, if we can decide on plan by then
16:39:19 <arma2> taking a step back, i think we have two decisions to make. one of them is: long-term, how do we want this problem solved? like, what is the actual right answer?
16:39:43 <arma2> and then short-term, if next week we need to give snowflake+amp to iran, what is our best available hack
16:40:35 <shelikhoo> in short term, we could give user in iran a custom bridge line
16:40:45 <meskio> I think that is a good framing, let's map the options in the issue and see what we are happy with there
16:42:17 <meskio> maybe we can move to the next topic and continue this conversation in the issue
16:42:45 <meskio> ampcache for snowflake in IR
16:43:02 <meskio> it looks like they have remove the block after 9 days
16:43:12 <meskio> anything on this topic?
16:43:50 <meskio> let's move then to 'packet loss with snowflake in china'
16:43:52 <meskio> shelikhoo: ???
16:44:14 <shelikhoo> The packet loss between snowflake client and matched proxy is too high
16:44:30 <shelikhoo> when testing from vantage point in china
16:45:01 <shelikhoo> this have result in snowflake failed to get to enough speed to get tor bootstrap
16:45:03 <dcf1> is it a recent change?
16:45:43 <dcf1> there were favorable reports of snowflake usage in China at a recent (earlier this week) meeting organized by OTF localization lab
16:45:53 <dcf1> there were reports of slwoness, but not so much of unreliability
16:47:31 <shelikhoo> I don't think this is something sudden, over the last one year the bootstrap percentage drops gradually
16:47:54 <dcf1> ok
16:48:16 <shelikhoo> we only wait for 60 seconds for snowflake-tor to bootstrap
16:48:20 <shelikhoo> before ending the test
16:48:34 <shelikhoo> we could change this to a higher value
16:48:47 <shelikhoo> to give it more chance to finish bootstrap
16:49:00 <arma2> if we are keeping track of time-until-bootstrap, giving it a longer timeout will give us more useful data
16:49:11 <arma2> we can still compute "how many would have finished by 60s" from the better data
16:49:23 <shelikhoo> yes, I intent to increase it to about 300 seconds
16:49:32 <shelikhoo> yes, I intend to increase it to about 300 seconds
16:49:45 <cohosh> this is just from the one vantage point we have right? not from user reports?
16:49:56 <arma2> i also wonder, how many of the timeouts come from having a snowflake but it is slow or loses packets, vs how many come from spending most of that time without a snowflake
16:50:01 <shelikhoo> this is just from vantage point
16:50:05 <cohosh> it's possible that vantage is unreliable
16:50:20 <arma2> so if there is a way to annotate the data with "learned a snowflake here" that could be really useful
16:51:20 <shelikhoo> based on my own experience, the network connection between china and outside world is unreliable, and high packet loss is in general expected
16:51:22 <arma2> also related to many long term goals, like being able to stripe over multiple snowflakes, which here would have the simpler benefit of "if there are two, and one never really works, at least the other might"
16:52:48 <shelikhoo> let's say there is a lot of snowflake connection with 20% packet loss
16:53:31 <arma2> how does pion webrtc handle 20% packet loss? how does browser webrtc handle it?
16:53:33 <shelikhoo> I think we might wants to find a way to compensate for packet loss to increase connection speed despite the packet loss
16:53:42 <shelikhoo> we use kcp to handle this part
16:54:17 <shelikhoo> we asked pion webrtc to not deal with packet loss and let kcp to deal with it
16:54:47 <cohosh> i can unassign the kcp tuning tickets from myself btw, i don't have time to work on that for the next while, if you want to tackle it
16:55:19 <shelikhoo> I think we can have a design first, because right now, this is not an easy task for us
16:55:53 <shelikhoo> forward error correction is cpu consuming, and we are running packet reassemble at a single server
16:56:12 <shelikhoo> so i doubt there can be a simple solution to deal with this
16:56:29 <shelikhoo> forward error correction is cpu consuming, and we are running packet reassemble at a single server(or two)
16:57:02 <shelikhoo> cohosh: we can have a plan first before reassign the tickets...
16:57:09 <shelikhoo> over
16:57:18 <meskio> shelikhoo: what is the plan here? will you continue investigating that and see if there is anything we can do there? do you need help there?
16:59:14 <shelikhoo> I think we can have a discussion at a ticket... I don't have a plan for how to deal with this issue right now...
16:59:26 <shelikhoo> giving the limitations
16:59:27 <meskio> sounds good
16:59:46 <meskio> maybe we can move to the next topic?
16:59:50 <shelikhoo> yes
17:00:14 <meskio> conjure in nightly versions
17:00:17 <cohosh> my item can wait until next week
17:00:17 <meskio> cohosh: ???
17:00:22 <cohosh> since the meeting is running late
17:00:24 <meskio> ok
17:00:26 <meskio> sure
17:00:47 <meskio> the last point is from ahf asking about things needed reveiw for s28
17:00:55 <meskio> arma2: can you check with him about it?
17:01:00 <meskio> maybe the answer is none?
17:01:06 <ahf> i think arma2 and i can just sync about this next week
17:01:14 <meskio> cool
17:01:20 <ahf> it's more so we don't suddenly get a huge influx in stuff to review while people are fighting conflux finishing too
17:02:00 <meskio> we don't have any high priority for c-tor, but there are few things that will be nice to get :)
17:02:26 <meskio> then I guess we can finish the meeting here
17:02:29 <meskio> #endmeeting