[tor-project] Anti-censorship team meeting notes, 2022-03-03

Hey everyone!

Here are our meeting logs:


And our meeting pad:

Anti-censorship work meeting pad



Next meeting: Thursday March 10th 16:00 UTC

Weekly meetings, every Thursday at 16:00 UTC, in #tor-meeting at OFTC (channel is logged while meetings are in progress)

== Goal of this meeting ==

Weekly checkin about the status of anti-censorship work at Tor.
Coordinate collaboration between people/teams on anti-censorship at Tor.

== Links to Useful documents ==

    Our anti-censorship roadmap:

    Roadmap: Development · Boards · Anti-censorship · GitLab

    The anti-censorship team's wiki page:

    Home · Wiki · The Tor Project / Anti-censorship / Team · GitLab

    Past meeting notes can be found at:

    The tor-project Archives

    Tickets that need reviews: from sponsors we are working on:

    All needs review tickets: Merge requests · Anti-censorship · GitLab

    Sponsor 30

    Sponsor 30 - Objective 2.1 · The Tor Project · GitLab

    Sponsor 30 - Objective 2.2 · The Tor Project · GitLab

    Sponsor 30 - Objective 2.3 · The Tor Project · GitLab

    Sponsor 30 - Objective 2.4 · The Tor Project · GitLab

    Sponsor 28

    must-do tickets: Sponsor 28: Reliable Anonymous Communication Evading Censors and Repressors (RACECAR) · The Tor Project · GitLab

    possible tickets: Issues · The Tor Project · GitLab

== Announcements ==

    Centralized Probe Result Collector on trial deployment

    Russia, Turkey, Beijing probetests are integrated

    BridgeDB is now using rdsys

== Discussion ==

    obfs4 fail to connect issue

    Tor Browser's new obfs4proxy client has compatibility issues with old obfs4proxy bridges (#40804) · Issues · The Tor Project / Applications / Tor Browser · GitLab

    we are coordinating with builtin bridges to update, many has already updated

    there is now a docker image with the new version

    the obfs4proxy 0.0.13 package will land in debian backports soon

    snowflake load and bottlenecks

    do we need more proxies?

    next steps for bridge capacity

    probetest is at is capacity

    could standalone proxies (which can make direct TCP connections) bypass snowflake-server and connect directly to the tor ExtORPort

    no, snowflake-server holds the turbo tunnel state

    we want to move into a design where there are multiple snowflake-servers and multiple bridges

    idea: partition snowflake-servers and bridges into non-overlapping "pools"

    i.e., snowflake-server A forwards to a set of bridges, snowflake-server B forwards to *its* set of bridges, and they share no bridges in common

    (which is a generalization of the current case, where there is 1 snowflake-server and 1 bridge)

    (there could be distinct brokers for different pools, but that is orthogonal)

    partitioning the set of bridges has this effect: when a broker/proxy wants to connect a client's traffic to a snowflake-server, for a specific bridge there is *one and only one* snowflake-server that is associated with that bridge

    therefore multiple connections in the same session, which use the same bridge, will also use the same snowflake-server, and therefore not lose turbo tunnel state

    it can work like this:

    the client torrc specifies the desired bridge fingerprint in its bridge line as a SOCKS param (redundantly with the fingerprint that is already there as part of the syntax)

    e.g. `Bridge snowflake 1111222233334444aaaabbbbccccdddd url=https://snowflake.torproject.net/ front=front.example.com ice=... fingerprint=1111222233334444aaaabbbbccccdddd`

    the client sends the desired bridge fingerprint along with its offer to the broker

    the broker has a mapping of bridge fingerprints to snowflake-server WebSocket URLs. when the broker matches the client with a proxy, the broker informs the proxy of the WebSocket URL to connect to (i.e., which snowflake-server to connect to). it will always be the same snowflake-server URL for the same bridge fingerprint, because the mapping is consistent.

    the proxy connects to the WebSocket URL provided by the broker, and it includes the bridge fingerprint in the URL query string when it makes the connection (the same way the client IP address is communicated: e.g. `?client_ip=`)

    the snowflake-server has its own mapping of bridge fingerprint to ExtORPort addresses. if it's an existing turbo tunnel session, it just resumes the ExtORPort TCP it already has. if it's a new session, it connects to the ExtORPort address corresponding to the bridge fingerprint.

    such a design alleviates the state-sharing concerns with multiple snowflake-servers. as long as a client uses a consistent bridge fingerprint during a session (which it will), it will get mapped to the same snowflake-server.

    arlolra is planning to write a patch for including the bridge fingerprint as a bridge line SOCKS param, and passing it to the broker, which is a necessary step for any of this

    then there can be multiple snowflake bridge lines in torrc, each with different bridge fingerprints. load balancing will come from the tor client's local random selection.

    there is a "thundering herd" concern with the way tor currently uses multiple bridge lines. tor will attempt to connect to all of them at once, and keep using only one of them. This means N broker transactions and N STUN exchanges, and possibly N-1 proxies held idle.

    maybe it's not such a big problem, if N is not too large

    an alternative would be a modification to tor where it shuffles its bridge list, and tries only one at a time

    another alternative is to write the torrc file dynamically: choose a random bridge line, then write torrc containing only that one randomly selected bridge line

    Prepare all pieces of the snowflake pipeline for a second snowflake bridge (#28651) · Issues · The Tor Project / Anti-censorship / Pluggable Transports / Snowflake · GitLab

    need to consider backward compatibility: a client that doesn't communicate its desired fingerprint gets mapped to the existing

== Actions ==

== Interesting links ==

    Pluggable Transports Implementer's Meeting 2021 : Free Download, Borrow, and Streaming : Internet Archive Pluggable Transports Implementers Meeting 2021 videos

== Reading group ==

    We will discuss "Throttling Twitter: an emerging censorship technique in Russia" on 10 March


    The Internet censorship bibliography

    Questions to ask and goals to have:

    What aspects of the paper are questionable?

    Are there immediate actions we can take based on this work?

    Are there long-term actions we can take based on this work?

    Is there future work that we want to call out, in hopes that others will pick it up?

== Updates ==

    This week:
        - What you worked on this week.
    Next week:
        - What you are planning to work on next week.
    Help with:

         - Something you need help with.

anadahz: 2022-01-27

    Last week:

    - Increase timeout check cycles for default-bridge-felix-1 and default-bridge-felix-2 as they have been generating too many alerts: Increase number of cycles for felix bridges (!1) · Merge requests · The Tor Project / Anti-censorship / monit-configuration · GitLab

cecylia (cohosh): last updated 2022-03-03
Last week:
    - updated version of snowflake in Tor Browser to include logged events
        - Bump version of snowflake to include PT LOG events (#40440) · Issues · The Tor Project / Applications / tor-browser-build · GitLab
    - started work on conjure PT for Tor (conjure#1)
        - The Tor Project / Anti-censorship / Pluggable Transports / conjure · GitLab
    - reviewed and merged some small snowflake MRs
        - snowflake!79
        - snowflake!80
    - checked out shadow fixes for go programs
        - snowflake simulation broken in preload mode · Issue #1549 · shadow/shadow · GitHub
    - helped monitor snowflake broker stats
        - [anti-censorship-team] Surge in Snowflake client polls
    - commented on adding more snowflake bridges (snowflake#28651)
This week:
    - continued work on conjure PT
    - continue to monitor snowflake broker stats
Needs help with:

dcf: 2022-03-03

    Last week:

    - posted summary of snowflake bridge outage on 2022-02-18 [anti-censorship-team] Snowflake bridge outage, 2022-02-18

    - tried porting extor-static-cookie to rust [anti-censorship-team] Rust port of extor-static-cookie

    - tried the bridgedb+rdsys setup [anti-censorship-team] bridgedb+rdsys test setup

    - inquired with OTF about funding for the snowflake bridge

    - posted about hardware limitations at the snowflake bridge [tor-project] More resources required for Snowflake bridge

    - posted notes on using STATUS for PT version reporting Bridges should report implementation versions of their pluggable transports (#11101) · Issues · The Tor Project / Core / Tor · GitLab

    - commented on space changes for STATUS VERSION Add STATUS VERSION message for PT protcol (!63) · Merge requests · The Tor Project / Core / Tor Specifications · GitLab

    Next week:

    Help with:

agix: 2021-02-10

    Last week:

    - Continued work on gettor-twitter

    Next week:

    - Hopefully finish the task

    Help with:


arlolra: 2022-03-03

    Last week:


    Next week:

    - Figure out where in pion/webrtc ALPN should be configured and used

    - Maybe add Chacha20Poly1305 to pion/dtls

    GitHub - pion/dtls: DTLS 1.2 Server/Client implementation for Go

    Make Snowflake's DTLS fingerprint more similar to popular WebRTC implementations (#40014) · Issues · The Tor Project / Anti-censorship / Pluggable Transports / Snowflake · GitLab

    - Pass bridge fingerprint in SOCKS param to the broker

    Help with:


maxb: 2021-09-23

    Last week:

    - Worked on uTLS for broker negotiation (#40054) · Issues · The Tor Project / Anti-censorship / Pluggable Transports / Snowflake · GitLab re: utls for broker negotiation

    - Had conversation with someone about upstream utls http round tripper feat: sketch out utls http.RoundTripper by bassosimone · Pull Request #74 · refraction-networking/utls · GitHub

    - Too busy with work :confused:

    Next week:

    - _Really_ want to get a PR for utls round tripper

meskio: 2022-03-03

    Last week:

    - deploy rdsys + bridgedb in production (rdsys#12)

    - update docker obfs4-bridge image with the new obfs4proxy (docker-obfs4-bridge#12)

    - coordinate with TPA to clean up the old email setup in BridgeDB

    - coordinate with metrics so the new assignments file

    - work on an update of the pt-spec to include the version on the STATUS message

    Next week:

    - use rdsys bridges in circumvention settings (bridgedb#40045)

Shelikhoo: 2022-03-03
   Last Week:
       - [Merge Request Awaiting] Add SOCKS5 forward proxy support to snowflake (snowflake!64)
       - [Merge Request Awaiting] uTLS for broker negotiation

      - [Discussion] Proposal: Support for Dynamic IP obfs4 bridges with unattended proxy information update (aka "Subscription")

      - [Coding & Deployment] Proposal: Centralized Probe Result Collector (anti-censorship/team#54)

   Next Week:
       - [Coding & Deployment] Proposal: Centralized Probe Result Collector (anti-censorship/team#54)

HackerNCoder: 2021-12-16
This week:
        Setup web mirror on tor.encryptionin.space
        Get (new VPs with) new IP and setup new web mirror on new domain

hanneloresx: 2021-3-4

    Last week:

    - Submitted MR for bridgestrap issue #14

    Next week:

    - Finish bridgestrap #14

    - Find new issue to work on

    Help with:


meskio | https://meskio.net/
My contact info: https://meskio.net/crypto.txt
Nos vamos a Croatan.