# How about Snowflake works

**URL:** https://forum.torproject.org/t/how-about-snowflake-works/8710
**Category:** Censorship Circumvention
**Tags:** tor-browser, snowflake
**Created:** [August 10, 2023, 12:59pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710 "2023-08-10T12:59:22Z")
**Posts on this page:** 15
**Page:** 1

<div class="post-metadata">

### Author: ![Cryptux](https://forum.torproject.org/user_avatar/forum.torproject.org/cryptux/32/2745_2.png) [@Cryptux](https://forum.torproject.org/u/Cryptux)
#### Post date: [August 10, 2023, 12:59pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/1 "2023-08-10T12:59:22Z")

</div>

Hello,

Since a few days I read some documentation about Snowflake and especially how it works.

I read the Wiki here =\> [Technical Overview · Wiki · The Tor Project / Anti-censorship / Pluggable Transports / Snowflake · GitLab](https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/wikis/Technical%20Overview) but I’m not sure to understand the overview, even the first steps.

I mean, when the Tor user choose Snowflake as transport protocol, the browser will send a request but where and to who? According this shema =\> [Snowflake ❄️](https://snowflake.torproject.org/?lang=en_US) , the request is sent directly to the Broker then the Broker will choose a Snowflake proxy from another client (it should be from the browser extension or via a website with the “iframe” balise), the Broker send it back to the original client and both (client and Snowflake proxy) will establish a connection in peer-to-peer in WebRTC, then go to the Tor network.

In summary, is it correct? If yes, what is technically a Broker? Is it specific server somewhere, managed by volunteer? On the Wiki it tells “_which is a server running on a third party web service_” but I’m not sure to understand what does it mean

Thanks in advance for your help 🙂

---

<div class="post-metadata">

### Author: ![Vort](https://forum.torproject.org/user_avatar/forum.torproject.org/vort/32/63_2.png) [@Vort](https://forum.torproject.org/u/Vort)
#### Post date: [August 10, 2023, 3:07pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/2 "2023-08-10T15:07:39Z")

</div>

Broker helps client and proxy find each other.  
Then data flows this way:  
Tor client ↔ snowflake proxy ↔ snowflake bridge ↔ Tor network.

> [@Cryptux](#):
>
> what is technically a Broker?

It’s a server at [https://snowflake-broker.torproject.net/](https://snowflake-broker.torproject.net/) .

> [@Cryptux](#):
>
> managed by volunteer?

No, by Tor team.  
Snowflake bridges are also run by Tor team.  
Snowflake proxies and most of Tor network (relays) are run by volunteers.

---

<div class="post-metadata">

### Author: ![Cryptux](https://forum.torproject.org/user_avatar/forum.torproject.org/cryptux/32/2745_2.png) [@Cryptux](https://forum.torproject.org/u/Cryptux)
#### Post date: [August 10, 2023, 10:18pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/3 "2023-08-10T22:18:49Z")

</div>

Thanks Vort for your answer.

I’ll have a look on this points, I didn’t know there was Snowflak proxies AND Snowflake bridges. With the shema at the Snowflake page I can understand now how it works.

Thanks 🙂

---

<div class="post-metadata">

### Author: ![Cryptux](https://forum.torproject.org/user_avatar/forum.torproject.org/cryptux/32/2745_2.png) [@Cryptux](https://forum.torproject.org/u/Cryptux)
#### Post date: [August 11, 2023, 4:03pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/4 "2023-08-11T16:03:14Z")

</div>

Re,

I’m writing a documentation for myself about Snowflake and I’ve still a little doubt, at this time what is the goal of the Snowflake bridge, managed by Tor team?

The Snowflake proxies can’t forward trafic directly to a Tor guard relay? (maybe because they are not directly connected to the Tor network so they don’t know about guard relays?

Thanks 🙂

---

<div class="post-metadata">

### Author: ![Vort](https://forum.torproject.org/user_avatar/forum.torproject.org/vort/32/63_2.png) [@Vort](https://forum.torproject.org/u/Vort)
#### Post date: [August 12, 2023, 8:37am UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/5 "2023-08-12T08:37:20Z")

</div>

I think bridges are needed because snowflake proxy is designed to work inside of a browser and browsers do not allow to make connections with protocols, used by Tor relays. So intermediate server is needed, which converts WebSocket protocol to Tor protocol.  
Why not make Tor relays support WebSocket directly? I don’t know.

---

<div class="post-metadata">

### Author: ![trinity-1686a](https://forum.torproject.org/user_avatar/forum.torproject.org/trinity-1686a/32/1679_2.png) [@trinity-1686a](https://forum.torproject.org/u/trinity-1686a)
#### Post date: [August 12, 2023, 8:51am UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/6 "2023-08-12T08:51:03Z")

</div>

There is a second reason for having bridges after the proxy.  
Proxies are assumed to be as ephemeral as snowflakes. And Tor doesn’t have a built-in session resumption mechanism.  
Without the bridge, if someone is running a Snowflake proxy in their browser, and closes that browser, any people using that proxy at that time will lose their connection (aborting any download in progress or stuff like that). An important thing the Snowflake bridge does is implement a form of session resumption, so that if a Snowflake proxy goes down, the user only notice a blip while a connection get reestablished, what they do isn’t entirely aborted. Technically, it could also allow multipathing (use of multiple snowflake proxy at once) so you’d have presumably a higher available bandwidth, and wouldn’t even notice anything if one of the proxy disappeared, but afaik this isn’t implemented yet

---

<div class="post-metadata">

### Author: ![Cryptux](https://forum.torproject.org/user_avatar/forum.torproject.org/cryptux/32/2745_2.png) [@Cryptux](https://forum.torproject.org/u/Cryptux)
#### Post date: [August 12, 2023, 2:39pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/7 "2023-08-12T14:39:14Z")

</div>

Thanks Vort and Trinity.

With your explainations that true now I better understand why we call it a bridge, it makes sense ^^ . I think it’s more clear now, thanks 🙂

---

<div class="post-metadata">

### Author: ![cecylia](https://forum.torproject.org/user_avatar/forum.torproject.org/cecylia/32/309_2.png) [@cecylia](https://forum.torproject.org/u/cecylia)
#### Post date: [August 13, 2023, 12:41pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/8 "2023-08-13T12:41:43Z")

</div>

> [@Vort](#):
>
> Why not make Tor relays support WebSocket directly? I don’t know.

There’s a few reasons for this, but security is a major one. It’s the same reason that we have an allow list for a fixed set of known Snowflake bridges that clients can connect to through Snowflake proxies. Allowing arbitrary connections directly from Snowflake proxies would allow the network to be used for DDoS attacks, and allowing connections to arbitrary Tor relays provides an upgrade path from WebSocket to plain TCP for all of these connections.

---

<div class="post-metadata">

### Author: ![Vort](https://forum.torproject.org/user_avatar/forum.torproject.org/vort/32/63_2.png) [@Vort](https://forum.torproject.org/u/Vort)
#### Post date: [August 13, 2023, 1:55pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/9 "2023-08-13T13:55:34Z")

</div>

> [@cecylia](#):
>
> Allowing arbitrary connections directly from Snowflake proxies would allow the network to be used for DDoS attacks

Why arbitrary?  
Snowflake proxy can download consensus from authorities in a similar way relays do this.

> [@cecylia](#):
>
> allowing connections to arbitrary Tor relays provides an upgrade path from WebSocket to plain TCP

What’s the problem for relays to have one more protocol supported?  
Some users will use WebSocket wrapper, some users will use TCP (raw Tor protocol).  
I can’t understand what upgrade path you are talking about.

---

<div class="post-metadata">

### Author: ![WofWca](https://forum.torproject.org/user_avatar/forum.torproject.org/wofwca/32/2302_2.png) [@WofWca](https://forum.torproject.org/u/WofWca)
#### Post date: [August 14, 2023, 8:28am UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/10 "2023-08-14T08:28:19Z")

</div>

> [@Cryptux](#):
>
> The Snowflake proxies can’t forward trafic directly to a Tor guard relay? (maybe because they are not directly connected to the Tor network so they don’t know about guard relays?

I made an issue about this, It appears to be (at least close to) possible:

> **[(More) Distributed servers (#40248) · Issues · The Tor Project /...](https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40248)**
>
> Standing on the shoulders of #40129, I propose the following....

But yeah, you have to know the address of the bridge to connect to it, like it is now with the current two Snowflake bridges.

---

<div class="post-metadata">

### Author: ![WofWca](https://forum.torproject.org/user_avatar/forum.torproject.org/wofwca/32/2302_2.png) [@WofWca](https://forum.torproject.org/u/WofWca)
#### Post date: [August 14, 2023, 8:28am UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/11 "2023-08-14T08:28:53Z")

</div>

@cecylia I think you edited your old post instead of making a new one to reply.

---

<div class="post-metadata">

### Author: ![Vort](https://forum.torproject.org/user_avatar/forum.torproject.org/vort/32/63_2.png) [@Vort](https://forum.torproject.org/u/Vort)
#### Post date: [August 14, 2023, 10:43am UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/12 "2023-08-14T10:43:50Z")

</div>

> [@cecylia](#):
>
> there are other very good reasons for why Snowflake proxies could not be bridges anyway

I was talking about how snowflake proxies can _find_ bridges (relays, which support WebSocket), not how they can _become_ bridges.

> [@cecylia](#):
>
> allow malicious Javascript applications to use the set of all Tor exits as a single-hop

Do you mean attacker can turn users of some large website into bots, who will DDoS relays?  
If that will be not attackers, but users, who need such single-hop service, then I don’t think it’s a big problem.  
But I agree, some risk exists.

---

<div class="post-metadata">

### Author: ![cecylia](https://forum.torproject.org/user_avatar/forum.torproject.org/cecylia/32/309_2.png) [@cecylia](https://forum.torproject.org/u/cecylia)
#### Post date: [August 14, 2023, 12:01pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/13 "2023-08-14T12:01:12Z")

</div>

Ah that’s what happened \>.\< thanks for pointing that out

Edit: I think I fixed it by reverting the old post and posting a new reply. It might’ve broken threading for the most recent reply but now the context is all there.

---

<div class="post-metadata">

### Author: ![cecylia](https://forum.torproject.org/user_avatar/forum.torproject.org/cecylia/32/309_2.png) [@cecylia](https://forum.torproject.org/u/cecylia)
#### Post date: [August 14, 2023, 12:23pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/14 "2023-08-14T12:23:57Z")

</div>

> [@Vort](#):
>
> Snowflake proxy can download consensus from authorities in a similar way relays do this.

@trinity-1686a’s answer above is a great answer and maybe the most fundamental explanation of why Snowflake proxies shouldn’t be treated as bridges. I’ll add that doing so would also require an implementation of tor for the addon which isn’t feasible for this project, or what we want.

> I can’t understand what upgrade path you are talking about.

Sorry, I dragged us a bit off topic with this because it has been [brought up before as part of a discussion of Snowflake](https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/31804). By upgrade path, I mean that if all Tor relays functioned as Web Socket servers, and allowed incoming connections from any source, then that would allow malicious Javascript applications to use the set of all Tor exits as a single-hop means of turning more restrictive Web Socket connections into raw TCP connections to allow them to attack a wider range of hosts and protocols.

To be honest, this probably isn’t as big of a concern as the increased attack surface each relay would have by supporting another protocol. It isn’t a trivial decision to add server side support for entirely new protocol and something like this that would affect the entire Tor network sounds unnecessarily risky to me. Especially since there are other very good reasons for why Snowflake proxies could not be bridges anyway.

---

<div class="post-metadata">

### Author: ![system](https://forum.torproject.org/uploads/default/original/2X/d/d3424bed34f4ec18b2e99178c2801ba6dfb655d6.png) [@system](https://forum.torproject.org/u/system)
#### Post date: [August 15, 2023, 12:23pm UTC](https://forum.torproject.org/t/how-about-snowflake-works/8710/15 "2023-08-15T12:23:59Z")

</div>

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.
