Planet Tor

@blog February 7, 2023 - 00:00 • 17 hours ago
Tor is slow right now. Here is what is happening.

Why Tor is slow right now and what we are doing about it.

For at least 7 months, several different types of ongoing denial of service (DoS) attacks have affected the Tor network. At some points, the attacks impacted the network severely enough that users could not load pages or access onion services.

We have been working hard to mitigate the impacts and defend the network from these attacks. The methods and targets of these attacks have changed over time and we are adapting as these attacks continue. It's not possible to determine with certainty who is conducting these attacks or their intentions.

We will continue to increase and tweak defenses on the Tor network to combat this problem. We are also adding two new members to our Network team who will be solely focused on .onion services development.

A big thank you to our community.

We know that a lot of people use and depend on Tor for security and privacy while connecting to the internet. There are many tools and pieces of infrastructure out there that depend on Tor as well. We take that responsibility and the work we do very seriously.

The Tor Project has a strong community that also understands Tor’s importance for so many people around the world, and fortunately, they have always been there to help.

Throughout our work to improve the network’s defenses, many people have stepped up to support us, fight this attack, and make sure the Tor network is stable for users. Allies have highlighted the importance of financially supporting Tor, held fundraisers to add more relays to the network, funded current relay operator associations, and come together to form the Onion Services Resource Coalition, which has allowed us to hire two new network team developers who will focus specifically on onion services. This, plus the countless supporters who have spread the word about helping Tor on social media and in their communities.

We would like to add to this post a big thank you to everyone in our community—and to our friends at Ocelot, Quiet, Wasabi Wallet / zKSNACKs, Fedimint, Trezor, OpenSats, and Freedom of the Press Foundation—who are helping us right now in all sorts of ways, we thank you.

You can help too! Here is how:

We are 70% towards our goal of fully funding two years worth of onion service development to mitigate the impacts of these attacks. We have $155,000 left to raise.

If you believe in the importance of the Tor network and defending it against attacks, please make a donation directly towards this work:

You can contribute to the Onion Support Coalition fund by making a donation.

If you have any information that could help us understand better the nature of these attacks you can contact us via signal:

If you are a relay operator and would like to know more about what to do to defend your relay from these types of attacks you can connect with us through the email list tor-relays at We actually recommend that all relay operators join this list to be up to date with best practices to keep the Tor network healthy.

@blog February 7, 2023 - 00:00 • 17 hours ago
Sustaining Snowflake operations

The team that runs the primary Snowflake bridge is raising funds to pay for server operating expenses such as bandwidth, hardware, and maintenance.. You can help the project by donating to the project on Open Collective:

Snowflake Daily Operations – Open Collective

What follows is an update originally posted on the Open Collective project.

The year 2022 was transformative for the Snowflake censorship circumvention system. The year saw a massive increase in the number of Snowflake users, fueled by some significant censorship events where Snowflake was one of few systems that worked to keep people connected. At the end of 2022, something around 2% of all Tor users used Snowflake to access the Tor network and the uncensored Internet. The Snowflake team has had to invest in powerful server hardware and a fast network connection in order to keep up with demand. Servers and bandwidth don't come for free, which is why we have started an Open Collective project. We aim to collect funds to sustain current operational needs and support future upgrades.

The first major event affecting Snowflake usage actually happened at the end of 2021. Snowflake is deployed as a circumvention system (a pluggable transport) alongside the Tor anonymity system. People use Snowflake and other pluggable transports when direct access to the Tor network is blocked. On December 1, 2021, some Internet service providers in Russia suddenly blocked access to most ways of accessing Tor, including, briefly, Snowflake. With the help of people in Russia, Snowflake developers found and fixed the protocol flaw that was being used to discover and block Snowflake connections, and Snowflake began working again in Russia. But because other ways of accessing Tor remained blocked, more and more people in Russia began using Snowflake.

All the new users started to overwhelm the resources of the server that was then hosting the Snowflake bridge. There were times when the system was barely usable because off all the people trying to use it at once. We had to innovate a new way to deploy a Tor bridge to remove a performance bottleneck; then, when that had taken us as far as it could, we started looking for a more powerful server. We moved to better hardware in March, which enabled the Snowflake bridge to meet demand. The situation remained stable for about the next six months.

On September 21, 2022, Internet service providers in Iran began imposing even more severe censorship than usual, in response to mass protests. Evidently, many people in Iran turned to Snowflake to circumvent the blocks, as the number of users quadrupled in a matter of days. This began a few days of intense performance and optimization work because the greatly increased load was straining even the upgraded server hardware.

The performance work was ultimately successful, and the bridge started handling its new load of users smoothly. Then, about two weeks after the protests began, Snowflake traffic from Iran dropped off precipitously. The cause turned out to be an oversight in the implementation of Snowflake, a TLS fingerprint that has been blocked. When a fix for that problem was deployed, the number of users began to grow again, faster than ever.

Over the course of 2022, Snowflake scaled from 5,000 to 75,000 users. It has been made possible by a dedicated team and investment in hardware infrastructure. As you can see from the user graph, demand for Snowflake continues to grow. It seems likely that there is additional blocking in Russia that has not yet been addressed; and when it is, it is likely to increase usership further.

@kushal February 5, 2023 - 08:38 • 2 days ago
Using YubiKeys for your linux system

You can use your Yubikey 4 or 5 for the rest of the tutorial.


If you mark your Yubikey presence is required to unlock your computer, then one not only needs your password, they will have to gain physical access to your Yubikey.

Install the required packages

$ sudo dnf install ykclient* ykpers* pam_yubico*

Getting the Yubikey(s) ready

Connect the Yubikey to your system, and see if it is not getting detected.

$ ykinfo -v
version: 5.2.7

If the system can not find the Yubikey, then it will show the following error.

Yubikey core error: no yubikey present

Then, for each of the Yubikey, we have the run the following command once:

$ ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -ochal-btn-trig -oserial-api-visible
Firmware version 4.2.7 Touch level 517 Program sequence 1

Configuration data to be written to key configuration 2:

fixed: m:
uid: n/a
key: h:9d97972ff90267d7cff02b49d41f85a68325805c
acc_code: h:000000000000
ticket_flags: CHAL_RESP
extended_flags: SERIAL_API_VISIBLE

Commit? (y/n) [n]: y

Here we are configuring the slot 2, with challenge-response mode, and HMAC (even less than 64 bytes), and also saying that the human has to touch the physical key by providing CHAL_BTN_TRIG, also making the serial API visible.

$ ykpamcfg -2 -v
debug: util.c:219 (check_firmware_version): YubiKey Firmware version: 5.2.7

Sending 63 bytes HMAC challenge to slot 2
Sending 63 bytes HMAC challenge to slot 2
Stored initial challenge and expected response in '/home/kdas/.yubico/challenge-16038846'.

Remember to touch the key button twice after the command sends in 63 bytes, the LED on the key should blink that that time.

Setting up GDM

Now, we can mark that the Yubikey must be present during login, and after touching the key, one still has to type in the password, or for lesser security context, one needs either the Yubikey or password to login.

For the first scenario, add the following to the /etc/pam.d/gdm-password file, just above the auth substack password-auth line.

auth        required mode=challenge-response

If you want either password or Yubikey to work, then replace required with sufficient.

Verify the setup

You will have to logout of Gnome, and then when you click your username while relogin, you will notice that the Yubikey is blinking. Touch it, and then enter password to complete login.

To setup sudo

The similar configuration changes required to be made in /etc/pam.d/sudo. But, remember to keep the sudo session open in one terminal, then try to test the sudo command in another one. Just in case :)

To learn more about the pam configuration, read man pam.conf.

@blog February 2, 2023 - 00:00 • 6 days ago
2022 Fundraising Results: thank you!

Every year, the Tor Project asks our community for financial support during October, November, and December. We do this because we’re a 501(c)(3) nonprofit, and your help keeps Tor free for everyone to use. In the new year, we aim to publish clear and transparent results of our fundraising—that’s what this post is all about.

First, everyone in our community deserves a big THANK YOU for supporting the Tor Project during the campaign. Together, you raised $367,674 to power privacy online! Additionally please help us thank the Friends of Tor who provided the generous match during the campaign—Aspiration, Jon Callas, Craig Newmark, Wendy Seltzer, and several anonymous supporters.

We’d also like to welcome and thank the 1,790 folks who made their first contribution to Tor during this time, whether you made a one-time gift or committed to monthly donations. We’re extremely grateful to have you here as part of our community.

By making a contribution to the Tor Project, you are:

  • Helping users overcome internet censorship with localized user support, new bridge and Tor Browser distribution mechanisms with our new Telegram channels, better GetTor support, and improvements to the Tor Browser’s user interface and censorship circumvention tools based on user research.
  • Advancing the work to make Tor more secure and agile with Arti, the project to rewrite Tor in Rust. In 2023, we anticipate releasing Arti 2.0.0, which is the next step in replacing the Tor C client with a more secure, easier to maintain Rust implementation.
  • Supporting the next generation Tor client. In partnership with LEAP and Guardian Project, we’ve been working on a Tor VPN client for Android over the last year. This is quite a big change for Tor, and one we prioritized because of the needs of our community and for the future sustainability of the Tor Project. Next year, our goal is to release a minimum viable product for internal tests—and your support makes that possible.
  • Powering privacy online for the millions of people who need it. With your support, those who cannot make contributions are able to use Tor for free.

Now let’s take a look at the results of this year’s campaign compared to the last few years, what influences these results, and what’s next in 2023 with your support.

Year Contributions during year-end campaign
2020 $376,315
2021 $940,361
2022 $367,674

Why is 2022 so different from 2021? The last several years have been unpredictable for everyone. In 2021, cryptocurrency gifts skyrocketed past any of our predictions—about 60% of the total raised in 2021 came in cryptocurrency. In 2022, we saw economic slowdowns, massive tech sector layoffs, cryptocurrency market collapse, and general uncertainty about the future. It’s clear that the results of fundraising efforts this year reflect the strain our community feels at this moment.

Over the last five years, the Tor Project has invested in strategic fundraising activities, financial oversight, board involvement, and operations infrastructure that has made the organization resilient during turbulence. To plan for unpredictable circumstances, we now account for a certain percentage of risk in every fundraising plan and budget. The payoff is that we’re strong, stable, and sustainable because we’ve accounted for rejected applications or a downturn in the economy. If you’ve followed Tor for a while, you will know that this hasn't always been the case—and the fact that we’re here is worth celebrating!

In 2022 specifically, we made a choice to consider the immense cryptocurrency gifts made during 2021 as an anomaly. We knew that the market was changing and that we could not build our budget for the next year on shifting sands. As such, we set realistic targets that we’re seeing match up closely to reality.

Even though there’s been a downturn, even though cryptocurrency markets are ever-changing, the Tor Project is in a strong position. We are still on track to meet (and likely exceed) our fundraising goals for the year (which ends in June, as a reminder). And even if external factors mean we don’t reach those goals, we have set the organization up to weather future uncertainty with healthy reserves.

Looking beyond individual giving, we have pushed our boundaries in terms of strengthening our community of supporters in new ways: from organizations rallying together to improve onion services; to welcoming new funders like FUTO, #StartSmall, and the International Republican Institute; renewing members as part of our membership program; and advancing existing projects with long-time supporters and partner organizations.

In 2023, we look forward to our continued collaboration with you, our community, to stand up for the human right to privacy, freedom of expression, and access to information. Keep up with progress and get the latest Tor news by subscribing to our newsletter!

@blog February 1, 2023 - 00:00 • 7 days ago
Arti 1.1.1 is released: Groundwork for onion services

Arti is our ongoing project to create an next-generation Tor client in Rust. In late November, we released Arti 1.1.0. Now we're announcing the next release in its series, Arti 1.1.1.

Since our last release, our primary focus has been preparation for onion service support in Arti. To that end, we've broken the work down into a bunch of tickets, designed our major internal APIs, and started to work on the lower-level features. There's nothing you can use here yet, but the work is coming!

We hope to deliver experimental support for onion service clients–then, support for running services later in the year. Finally, we will build the security features allow onion services and clients to be at least as safe as in C tor.

We've also made a number of other changes, including improved logging security, new convenience APIs, and better handling of some SOCKS requests. You can find a more complete list of changes in our CHANGELOG.

For more information on using Arti, see our top-level README, and the docmentation for the arti binary.

Thanks to everyone who has contributed to this release, including Alexander Færøy, coral, Dimitris Apostolou, Emil Engler, Jim Newsome, Michael van Straten, Neel Chauhan, and Trinity Pointard.

Also, our deep thanks to Zcash Community Grants for funding the development of Arti 1.1.1!

@kushal January 28, 2023 - 08:32 • 10 days ago
Introducing Tugpgp

At Sunet, we have heavy OpenPGP usage. But, every time a new employee joins, it takes hours (and sometime days for some remote folks) to have their Yubikey + OpenPGP setup ready.

Final screen

Tugpgp is a small application built with these specific requirements for creating OpenPGP keys & uploading to Yubikeys as required in Sunet. The requirements are the following:

  • It will create RSA 4096 Key
  • There will be a primacy key with Signing & Certification capability.
  • There will be an encryption and one authentication subkey.
  • All keys have 1 year expiry date.
  • During the process the secret key will not be written to the disk.
  • Encryption & signing has touch policy fixed in the Yubikey (it can not be changed).
  • Authentication has touch policy on (means it can be turned off by the user).
  • The OTP application in the Yubikey will be disabled at the end.

We have an Apple Silicon dmg and AppImage (for Ubuntu 20.04 onwards) in the release page. This is my first ever AppImage build, the application still needs pcscd running on the host system. I tested it on Debian 11, Fedora 37 with Yubikey 4 & Yubikey 5.

Oh, there is also a specific command line argument if you really want to save the private key :) But, you will have to find it yourself :).

demo gif

If you are looking for the generic all purpose application which will allow everyone of us to deal with OpenPGP keys and Yubikeys, then you should check the upcoming release of Tumpa, we have a complete redesign done there (after proper user research done by professionals).

@blog January 25, 2023 - 00:00 • 14 days ago
New Alpha Release: Tor Browser 12.5a2 (Android, Windows, macOS, Linux)

Tor Browser 12.5a2 is now available from the Tor Browser download page and also from our distribution directory.

This release updates Firefox on Android, Windows, macOS, and Linux to 102.7.0esr. It includes important security updates to Firefox and GeckoView. There were no Android-specific security updates to backport from the Firefox 109 release.

We use this opportunity to update various other components of Tor Browser as well:

  • tor
  • NoScript 11.4.14
  • go 1.19.5

We would like to thank user ryotak for identifying a script blocking bypass on local file:// resources. We would also like to thank user cypherpunks1 for their help with tor-browser#40717 and tor-browser#41578 (among others). If you would like to contribute patches or help diagnose issues, please join us on our gitlab instance!

The full changelog since Tor Browser 12.5a1 is:

@blog January 24, 2023 - 00:00 • 15 days ago
Announcing new board members

We are excited to announce the result of our open call for board members - three new members are joining the Tor Project’s Board of Directors: Esra'a Al Shafei, Sarah Gran and Christian Kaufman! Each new member comes to Tor with a different set of expertise that will help the organization and our community. At the end of this post, you can read each of their bios.

Please join us in welcoming Esra’a, Sarah, and Christian to the board!

Esra'a Al Shafei is a Bahraini human rights activist and founder and director of, a network of digital platforms that amplify under-reported and marginalized voices in the Middle East and North Africa.

"Tor’s privacy technologies have been critical resources for my human rights advocacy work. It is an honor to have this opportunity to support an organization and community that made my work and the work of many other activists possible."

Sarah is on the Board of Directors for the Tor Project. She is also VP of the Brand & Donor Development team at ISRG, the nonprofit behind Let's Encrypt, Prossimo, and Divvi Up.

"I'm a longtime fan of the Tor Project and its efforts to provide people with privacy and anonymity while using the Internet and I'm honored to join its Board of Directors."

Christian Kaufmann has over 20 years of experience in the internet environment as an architect, manager and board member in various roles.

"We find ourselves in a surveillance state, where many private companies collect as much data as they can get. I see the Tor networks as the privacy and anonymity layer of the Internet that so many of us rely on, and I am proud to be an active part of it."

And as a reminder, the other six members of the Tor Project’s Board are: Kendra Albert, Desigan Chinniah, Gabriella Coleman, Alissa Cooper, Nighat Dad and Julius Mittenzwei.

Full Biographies of Incoming Board Members

Esra'a Al Shafei: Esra'a Al Shafei is a Bahraini human rights activist and founder of, a network of digital platforms that amplify under-reported and marginalized voices in the Middle East and North Africa. This work includes Mideast Tunes, a web and mobile application for independent musicians in the MENA who use music as a tool for social justice advocacy,, a discussion tool for Arab LGBTQ+ youth which leverages game mechanics to protect and engage its community, and, the primary resource on the plight of migrant workers in the Gulf region. Esra’a was a Senior TED Fellow, Echoing Green Fellow, MIT Media Lab Fellow, and Shuttleworth Foundation Fellow. She is a co-founder of the Numun Fund, an initiative that aims to seed, resource, and sustain a feminist technology ecosystem. She currently serves as Vice Chair of the Board of Trustees of the Wikimedia Foundation, the nonprofit organization that hosts Wikipedia. Previously, she served on the Board of Directors of Access Now, an international non-profit dedicated to an open and free Internet.

Sarah Gran: Sarah Gran is the VP of the Brand and Donor Development team at Internet Security Research Group (ISRG), the nonprofit entity behind Let's Encrypt. Sarah joined ISRG in early 2016, shortly after the Let’s Encrypt launch and has helped it become a household name in software development. Sarah has helped to shape ISRG’s latest projects, one focused on bringing memory-safe code to security-sensitive software, called Prossimo, and Divvi Up, a privacy-respecting metrics service. Previously, Sarah worked as a Vice President at Edelman and Deutsch in brand and communications strategy groups.

Christian Kaufmann: As Vice President Technology Christian Kaufmann leads the Technology department which is responsible for driving the technical evolution of the Akamai Edge platform, including a wide set of responsibilities like hardware engineering, datacenter architecture, network architecture and engineering, and software and systems development. Christian has gained extensive board experience including hiring CEOs and handling M&A, during his 15+ years on various boards in the Internet ecosystem. Currently he serves as a board member at ICANN, the RIPE NCC and the Tor Project. Before joining Akamai, Christian worked at several ISPs and Carriers like Telia Sonera, Easynet and Cable & Wireless, in various technical and managerial roles. Christian has a Master of Science in Advanced Networking from The Open University in the UK. He also holds various technical certifications, including both a CCIE & JCNIE.

@kushal January 21, 2023 - 14:23 • 17 days ago
Johnnycanencrypt 0.13.0 released

I just now released v0.13.0 of my johnnycanencrypt project. It is a Python module written in Rust, which provides OpenPGP functionality including allows usage of Yubikey 4/5 as smartcards. From 0.12.0 it is now licensed as LGPL-3.0-or-later.

Major updates in this release (and in the previous one are):

  • Adds enable_otp_usb in rjce.
  • Adds disable_otp_usb in rjce.
  • Changed license to LGPL-3.0-or-later
  • We can now disable OTP for both YubiKey4/5 #131.

For many folks disabling the OTP application in the Yubikey is must, otherwise we all saw random bytes dropping on the shell/document/chat thanks to a touch to the key. I tested the code in both Yubikey 4 and 5. I hope this will work well in the field.

@anarcat January 19, 2023 - 21:50 • 19 days ago
Mastodon comments in ikiwiki

Today I noticed bounces in my mail box. They were from ikiwiki trying to send registration confirmation email to users who probably never asked for it.

I'm getting truly fed up with spam in my wiki. At this point, all comments are manually approved and I still get trouble: now it's scammers spamming the registration form with dummy accounts, which bounce back to me when I make new posts, or just generate backscatter spam for the confirmation email. It's really bad. I have hundreds of users registered on my blog, and I don't know which are spammy, which aren't. So. I'm considering ditching ikiwiki comments altogether.

I am testing Mastodon as a commenting platforms. Others (e.g. JAK) have implemented this as a server but a simpler approach is toload them dynamically from Mastodon, which is what Carl Shwan has done. They are using Hugo, however, so they can easily embed page metadata in the template to load the right server with the right comment ID.

I wasn't sure how to do this in ikiwiki: it's typically hard to access page-specific metadata in templates. Even the page name is not there, for example.

I have tried using templates, and that (obviously?) fails because the <script> stuff gets sanitized away. It seems I would need to split the JavaScript out of the template into a base template and then make the page template refer to a function in there. It's kind of horrible and messy.

I wish there was a way to just access page metadata from the page template itself... I found out the meta plugin passes along its metadata, but that's not (easily) extensible. So i'd need to either patch that module, and my history of merged patches is not great so far.

So: another plugin.

I have something that kind of works that's a combination of a page.tmpl patch and a plugin. The plugin adds a mastodon directive that feeds the page.tmpl with the right stuff. On clicking a button, it injects comments from the Mastodon API, with a JavaScript callback. It's not pretty (it's not themed at all!), but it works.

If you want to do this at home, you need this page.tmpl (or at least this patch and that one) and the plugin from my mastodon-plugin branch.

I'm not sure this is a good idea. The first test I did was a "test comment" which led to half a dozen "test reply". I then realized I couldn't redact individual posts from there. I don't even know if, when I mute a user, it actually gets hidden from everyone else too...

So I'll test this for a while, I guess.

I have also turned off all CGI on this site. It will keep users from registering while I cleanup this mess and think about next steps. I have other options as well if push comes to shove, but I'm unlikely to go back to ikiwiki comments.

Mastodon comments are nice because they don't require me to run any extra software: either I have my own federated service I reuse, or I use someone else's, but I don't need to run something extra. And, of course, comments are published in a standard way that's interoperable with everything...

On the other hand, now I won't have comments enabled until the blog is posted on Mastodon... Right now this happens only when feed2exec runs and the HTTP cache expires, which can take up to a day. I should probably do this some other way, like flush the cache when a new post arrives, or run post-commit hooks, but for now, this will have to do.

Update: I figured out a way to make this work in a timely manner:

  1. there's a post-merge hook in my ikiwiki git repository which calls feed2exec in /home/w-anarcat/source/.git/hooks/ — took me a while to find it! I tried post-update and post-receive first, but ikiwiki actually pulls from the bare directory in the source directory, so only post-merge fires (even though it's not a merge)
  2. feed2exec then finds new blog posts (if any!) and fires up the new ikiwikitoot plugin which then...
  3. posts the toot using the toot command (it just works, why reinvent the wheel), keeping the toot URL
  4. finds the Markdown source file associated with the post, and adds the magic mastodon directive
  5. commits and pushes the result

This will make the interaction with Mastodon much smoother: as soon as a blog post is out of "draft" (i.e. when it hits the RSS feeds), this will immediately trigger and post the blog entry to Mastodon, enabling comments. It's kind of a tangled mess of stuff, but it works!

I have briefly considered not using feed2exec for this, but it turns out it does an important job of parsing the result of ikiwiki's rendering. Otherwise I would have to guess which post is really a blog post, is this just an update or is it new, is it a draft, and so on... all sorts of questions where the business logic already resides in ikiwiki, and that I would need to reimplement myself.

Plus it goes alongside moving more stuff (like my feed reader) to dedicated UNIX accounts (in this case, the blog sandbox) for security reasons. Whee!

@blog January 19, 2023 - 00:00 • 20 days ago
New Release: Tor Browser 12.0.2

Tor Browser 12.0.2 is now available from the Tor Browser download page and also from our distribution directory.

This release updates Firefox to 102.7, including bug fixes, stability improvements and important security updates. There were no Android-specific security updates to backport from the Firefox 109 release.

We use this opportunity to update various components of Tor Browser as well:

  • tor
  • NoScript 11.4.14
  • go 1.19.5

We would like to thank user ryotak for identifying a script blocking bypass on local file:// resources.

Send us your feedback

If you find a bug or have a suggestion for how we could improve this release, please let us know.

Full changelog

The full changelog since Tor Browser 12.0.1 is:

@anarcat January 8, 2023 - 04:09 • 1 months ago
20 years blogging

Many folks have woken up to the dangers of commercialization and centralisation of this very fine internet we have around here. For many of us, of course, it's one big "I told you so"...

(To fair, I stopped "telling you so" because evangelism is pretty annoying. It's certainly dishonest coming from an atheist, so I preach by example now. I often wonder what works better. But I digress.)

Colleagues have been posting about getting back into blogging. This post from gwolf, in particular, reviews his yearly blog output, and that made me wonder how that looked like from my end. The answer, of course, is simple to generate:

anarcat@angela:~$ cd
/home/anarcat/wikis/$ ls blog | grep '^[0-9][0-9][0-9][0-9]' | sed s/-.*// | sort | uniq -c  | sort -n -k2
     62 2005
     49 2006
     26 2007
     25 2008
      8 2009
     16 2010
     24 2011
     19 2012
     17 2013
      7 2014
     19 2015
     32 2016
     43 2017
     40 2018
     27 2019
     33 2020
     22 2021
     45 2022
      1 2023

(I thought of drawing this as a sparkline but it looks like Sparklines are kind of dead. doesn't resolve and the canonical PHP package is gone from Debian. The plugin is broken in ikiwiki anyway...)

So it seems like I've been doing this very blog for 18 years, and it's not even my first blog. I actually started in 2003, which makes this year my 20-year blogging anniversary.

(And even if that sounds really old, note that I was not actually an early adopter. Jorn Barger having coined the term "weblog" in 1997. Yes, in another millenia.)

Reading back some of the headlines in those older posts, I have definitely changed style. I used to write shorter, more random ideas, and more often. I somehow managed to write more than one article per week in 2005!

Now, I take more time writing, a habit I picked up while writing for LWN (those articles), which started in 2016. But interestingly, it seems I started producing more articles then: I hit 43 articles per year in 2017, my fourth best year ever.

The best years in terms of numbers are the first two years (2005 and 2006, I didn't check the numbers on earlier years), but I doubt they are the best in terms of content. Really, the best writing I have ever did was for LWN. I dare hope I have kept the quality I was encouraged (forced?) to produce, but I know I cannot come anywhere close to what the LWN editors were juicing out of me. You can also see that I immediately dropped to a more normal 27 article in 2019, once I stopped writing for LWN...

Back when I started blogging, my writing was definitely more personal. I had less concerns about privacy back then; now, I would never write about my personal life like I did back then (e.g. "I have a cold").

I was also writing mostly in French back then, and it's sad to think that I am rarely writing in my native language here anymore. I guess that brings me an international audience, which is simultaneously challenging, gratifying, and terrifying. But it also means I reach out to people that do not speak English (or French, for that matter) as their first language. For me that is more valuable than catering to my little corner of culture, at least for now, and especially when writing technical topics, which is most of what I do now anyways.

Interestingly, I wrote a lot in 2022. People sometimes ask me how I manage to write so much: I don't actually know. I don't have a lot of free time on my hand, and even less than before in the past two years, but somehow I keep feeding this blog.

I guess I must have something to say. Can't quite figure out what yet, so maybe I should just keep trying.

Or, if you're new to this Internet thing, Bring Back Blogging! Whee!

PS: I wish I had time to do a review of my visitors like i did for 2021 but time is missing.

@kushal January 3, 2023 - 11:21 • 1 months ago
Startup/execution time for a specific command line tool

Generally I don’t have to bother about the startup time of any command line tool. For a human eye and normal day to day usage, if a command takes half a second to finish the job, it is not much of a problem. But, the story changes the moment we talk about a command which we have to run multiple times. What about about a command which have to execute multiple times every minute? This is the time when the startup and execution time matters.

A few weeks ago I was looking at a Python script which was executing as part of Nagios run, it was doing an API call to a remote server with JSON data coming in as command line arguments. Now, to make it scale more the first thought was to move the actual API call to a different process and get the original script to load things into a Redis queue. But, the other issue was the startup time for the Python script, having something with lesser startup time would be more help in this case, where nagios may execute the script/command over a few hundred times in every minute.

So, first I rewrote the code in Rust, and that made things multiple times faster. But, just for fun I wanted to see if writing it in golang will help or not. And I am kind of surprised to see the startup/execution time difference. I am using hyperfine for benchmark.

Python script

  Time (mean ± σ):     195.5 ms ±  11.3 ms    [User: 173.6 ms, System: 19.7 ms]
  Range (min … max):   184.5 ms … 228.8 ms    12 runs

Rust code

  Time (mean ± σ):      31.1 ms ±   8.4 ms    [User: 27.3 ms, System: 3.0 ms]
  Range (min … max):    24.6 ms …  79.0 ms    37 runs

View the code.

Golang code

  Time (mean ± σ):       3.2 ms ±   1.6 ms    [User: 1.0 ms, System: 1.7 ms]
  Range (min … max):     2.6 ms …  19.6 ms    140 runs

The code.

For now, we will go with the golang based code to do the work. But, if someone can explain the different ways Rust/Golang code starts up, that would be helpful to learn why such a speed difference.

Oh, here is the result of a quick poll on Fediverse about startup time.

40% people cares about startup time in cli


I received a PR for the Rust code from, which removes the async POST requests, and made the whole thing even simpler and faster (30x).

  Time (mean ± σ):       1.0 ms ±   0.6 ms    [User: 0.5 ms, System: 0.3 ms]
  Range (min … max):     0.5 ms …   4.3 ms    489 runs
@kushal January 1, 2023 - 09:18 • 1 months ago
Congratulations Anwesha

The year 2022 gave me one of the happiest moments in my life, and I also felt proud as Anwesha joined the Ansible community team as a software engineer in Red Hat. Proud because she became the best example of someone to whom I taught things about computers (she has multiple mentors/friends who helped her during this journey). Though sometimes that created trouble at home, the output is super lovely. From a Masters in Law to a software engineer in Red Hat is a good story.

Also, Red Hat has a special place in our home. I left Red Hat more than 5 years ago, but still, you will notice how Red Hat (the friends there and the culture) changed my life and later the life of our family. Oh, the other special thing is that Anwesha will have her own Red Fedora now :)

@ooni December 23, 2022 - 00:00 • 2 months ago
iMAP 2022: New Research Reports on Internet Censorship in 8 Asian countries
On 21st December 2022, our long-term partner, Sinar Project, published 8 new research reports on internet censorship in Southeast Asia and Hong Kong (China) in collaboration with their Internet Monitoring and Action Project (iMAP) partners. We are particularly excited about these reports as they make use of OONI data! Internet Monitoring Action Project (iMAP) aims to establish regional and in-country networks that monitor network interference and restrictions to the freedom of expression online in 8 countries: Myanmar, Cambodia, Hong Kong (China), Indonesia, Malaysia, Philippines, Thailand, and Vietnam. ...
@ooni December 23, 2022 - 00:00 • 2 months ago
Year in Review: OONI in 2022
As the end of 2022 approaches, we publish this post to share some OONI highlights from the last year. We also share some of the things we’ll be working on in 2023! OONI Team OONI Probe New OONI Probe experiments New Test Lists Editor OONI Run improvements OONI Probe Web prototype OONI data 1 billion measurements ...
@blog December 21, 2022 - 00:00 • 2 months ago
Resistance, Change, and Freedom: Reflecting on 2022

Every end of year calls for reflection. In 2022, censorship and control of information has increased all around the world. I’m thinking about how we’ve seen setbacks in the world’s fight for human rights coming from all directions, like the wave of attacks on reproductive rights that has placed millions of people at risk, and how privacy and freedom online have been critical lifelines for many.

In the midst of these setbacks, 2022 has also been a year of resistance. In the Tor world, we’re currently resisting a DDoS attack on the Tor network. During the time we have been working hard to protect the network and mitigate the impact of this attack, organizations and supporters have come together to demonstrate their support for Tor. Our community has raised awareness about the issue and collectively contributed necessary funds to hire more developers for our network team.

Support from our community will allow us to improve onion services and their defenses against attacks, and we plan to continue to improve the overall experience in deploying and maintaining onion sites in 2023. Increasing our support for onion services would not be possible without people who value Tor coming together in an act of solidarity.

Beyond improving the network and onion services, we look forward to continuing to support our relay operators community, which has been a goal for a long time. We are very happy that we now have the capacity to do so.

This year we’ve also resisted censorship against the Tor network and our website with the incredible help of our community. People came together to build a chain of resistance, from sharing information on social media about Snowflake, to helping others learn what to do to bypass government censorship, to donating their bandwidth to those censored by running a proxy, to legal support in the face of censorship dictated by legislation.

An image of a toot sharing a breakdown of the Snowflake proxies in November 17, 2022. In total, there were 128,408 proxies, with Germany contributing the most proxies.

Resisting censorship has also driven the need for new strategies to reach users, like localized user support and new bridge and Tor Browser distribution mechanisms with our new Telegram channels and improved GetTor support. Simultaneously we launched improvements to the Tor Browser’s user interface and censorship circumvention tools based on user research.

Around the world, we’ve seen people using Tor in some of the most desperate situations resisting violations of their human rights, and we’ve resisted censorship and attacks in order to meet their needs. Resistance is hope, hope for change.

Fortunately some positive change happened this year, too. I’m personally happy to see change coming to my home country, Brazil. We are finally moving away from a government that doesn't respect human rights to one that does. Sometimes change comes as society shifts its attitudes and makes the choice to stand up for their rights. I think we have to celebrate these changes, every victory, small or big, because they are part of a longer process.

Changes are happening at the Tor Project that are worth celebrating, like looking critically at our code and understanding that we need to make a shift away from an older programming language and into a more modern implementation of Tor. I’m excited that we completed our first year of the work to rewrite Tor in Rust. In 2023, we anticipate releasing Arti 2.0.0, which is the next step in replacing the Tor C client with a more secure, easier to maintain Rust implementation.

I also look to our partnership with LEAP and Guardian Project. With these partners we’ve been working on a Tor VPN client for Android over the last year. This is quite a big change for Tor, and one we prioritized because of the needs of our community and for the future sustainability of the Tor Project. Next year, our goal is to release a minimum viable product for internal tests.

We, the Tor Project, and you, our community and our users, are all collaborating in a process of change by using, promoting, and volunteering with Tor and coming along with us as we evolve. I would like to celebrate all of us who share the same values of privacy and freedom online and who are dedicated to making positive changes for the internet and the world with these values.

Staff and friends of Tor pose together in a large group outside on a cloudy day. People are making fun gestures, with some raising their hands towards the sky.

As I reflect on the year and all the work that was made possible with collaboration, all the battles we fought as a community, and all of the resistance we supported by making Tor available to people who need it, I think about the human rights and freedoms that are at stake.

At the Tor Project, our goal is to build technology to help people who are struggling to obtain or protect these rights. Your support makes this possible. If you value Tor, making a donation is one of the ways to ensure it's available for everyone who needs it.

Going into the new year, let’s celebrate our resistance and the changes we’ve made in the world because we stood up for our rights. And for the year that is arriving, let’s keep collaborating so freedoms and rights are a reality for everyone in this world. Happy 2023!

@blog December 21, 2022 - 00:00 • 2 months ago
New Alpha Release: Tor Browser 12.5a1 (Android, Windows, macOS, Linux)

Tor Browser 12.5a1 is now available from the Tor Browser download page and also from our distribution directory.

Tor Browser 12.5a1 updates Firefox on Android, Windows, macOS, and Linux to 102.6.0esr.

We use this opportunity to update various other components of Tor Browser as well:

  • tor
  • go 1.19.4

This version includes important security updates to Firefox and GeckoView. There were no Android-specific security updates to backport from the Firefox 108 release.

The full changelog since Tor Browser 12.0a5 is:

@blog December 20, 2022 - 00:00 • 2 months ago
New Release: Tails 5.8

Tails 5.8 is the most important release of Tails in years. It includes both major redesign of existing features, important usability improvements, and hardened security.

This work has been made possible by donations from users like you. If you like these changes and want more, donate now to fund our work in 2023.

Donate now to fund our work in 2023.

New features

New Persistent Storage

After 2 years of hard work, we are extremelly proud to present you a complete redesign of the Persistent Storage.

The Persistent Storage hasn't changed much since its first release in 2012 because the code was hard to modify and improve. But, we learned from users that the Persistent Storage could do a lot more for you if it had more features and was easier to use.

Screenshot showing Persistent Storage creation

Screenshot showing Persistent Storage configuration

  • You don't have to restart anymore after creating the Persistent Storage or each time you activate a new feature.

  • You can change the password of your Persistent Storage from this new application.

  • You can choose to create a Persistent Storage directly from the Welcome Screen, if you don't have one already.

    Screenshot showing offer to create Persistent Storage

Wayland and better Unsafe Browser

We replaced the deprecated X.Org display system with Wayland.

Even if you won't notice any visual difference, Wayland brings more security in depth to Tails by making it harder for a compromised application in Tails to compromise or misuse another application.

For example, since Tails 4.8, the Unsafe Browser was disabled by default because a security vulnerability in another application in Tails could start an invisible Unsafe Browser , reveal your IP address, and deanonymize you.

Wayland fixes this vulnerability and makes it safe to reenable the Unsafe Browser by default. You can still disable the Unsafe Browser in the Welcome Screen.

Wayland also brings in other features that were not working yet in the Unsafe Browser :

  • Sound
  • Uploads and downloads
  • Alternative input methods for Chinese and other non-Latin languages
  • Accessibility features like the screen reader and virtual keyboard

QR code scanning of Tor bridges

We made it easier to enter new Tor bridges in Tails by scanning a QR code.

To get a QR code, you can either:

We are aware that the QR codes that are currently provided are too big to be easy to scan. We are working with Tor to make them smaller and easier to scan.

Screenshot showing QR code scanning

Changes and updates

  • Update Tor Browser to 12.0.1.

  • Update Thunderbird to 102.6.0.

  • Update Tor to

Fixed problems

We fixed 3 usability issues in the Tor Connection assistant:

  • Display a percentage on the connection progress bar. (#19208)

    Screenshot showing Tor connection progress bar

  • Fix links to documentation. (#19172)

  • Add a Bridge label in front of the line to enter a custom bridge. (#19169)

For more details, read our changelog.

Known issues

  • The switches that turn on and off the different features of the Persistent Storage are very slow to respond on some USB sticks. Please report on #19291 if this happens to you.

  • The top of the Welcome Screen is cut out on small displays (800×600), like virtual machines. (#19324)

You can press Alt+S to start Tails.

  • When using a custom Tor obfs4 bridge, the progress bar of Tor Connection sometimes gets stuck halfway through and becomes extremelly slow. (#19173)

To fix this, you can either:

* Close and reopen _Tor Connection_ to speed up the initial connection.

* Try a different `obfs4` bridge.

This issue only affects outdated obfs4 bridges and does not happen with obfs4 bridges that run version 0.0.12 or later.

See the list of long-standing issues.

Get Tails 5.8

To upgrade your Tails USB stick and keep your persistent storage

  • Automatic upgrades are available from Tails 5.0 or later to 5.8.

You can reduce the size of the download of future automatic upgrades by doing a manual upgrade to the latest version.

  • If you cannot do an automatic upgrade or if Tails fails to start after an automatic upgrade, please try to do a manual upgrade.

To install Tails on a new USB stick

Follow our installation instructions:

The Persistent Storage on the USB stick will be lost if you install instead of upgrading.

To download only

If you don't need installation or upgrade instructions, you can download Tails 5.8 directly:

Support and feedback

For support and feedback, visit the Support section on the Tails website.

@blog December 15, 2022 - 00:00 • 2 months ago
New Release: Tor Browser 12.0.1

Tor Browser 12.0.1 is now available from the Tor Browser download page and also from our distribution directory.

This release updates Firefox to 102.6, including bug fixes, stability improvements and important security updates.

We've fixed a regression in our drag and drop protection, whose hardening disrupted some interface interactions, and most notably rearranging bookmarks by dragging them around.

We'd like to thank poncho for fixing another regression causing the TOR_SOCKS_IPC_PATH environment variable to be ignored.

Send us your feedback

If you find a bug or have a suggestion for how we could improve this release, please let us know.

Full changelog

The full changelog since Tor Browser 12.0 is:

@ooni December 9, 2022 - 00:00 • 2 months ago
OONI Community Video
We are happy to celebrate OONI’s 10th anniversary together with our amazing community, who have been at the heart of our work over the past decade. Today, we are excited to share a new video with OONI community members, where they discuss how OONI has been useful to their work, while sharing what they would like to see OONI do in the future. Featured community members and partners Andrés Azpúrua, Venezuela Inteligente Andrés is the co-founder and Director of Venezuela Inteligente, a non-profit organization that aims to facilitate information, communication and collaboration between citizens and civil society organizations to create impact from a non-partisan perspective. ...
@blog December 7, 2022 - 00:00 • 2 months ago
New Release: Tor Browser 12.0

Tor Browser 12.0 is now available from the Tor Browser download page and also from our distribution directory. This new release updates Tor Browser to Firefox Extended Support Release 102.

What's new?

Upgraded to Extended Support Release 102

Image reading "Firefox Extended Support Release 102"

Once again, the time has come to upgrade Tor Browser to Firefox's newest Extended Support Release. We've spent the past few months since Tor Browser 11.5's release reviewing ESR 102's release notes to ensure each change is compatible with Tor Browser. As part of that process, anything that may conflict with Tor Browser's strict privacy and security principles has been carefully disabled.

Multi-locale support for desktop

Previously, if you wanted to use Tor Browser for desktop in a language other than English, you needed to find and download one of the matching language versions from our download page. Switching language after installing Tor Browser wasn't an easy task either, and would either require adding the new language pack to your existing installation, or redownloading Tor Browser from scratch.

As of today we're pleased to announce that this is a thing of the past: Tor Browser for desktop is now truly multi-locale, meaning all supported languages are now included in a single bundle. For new users, Tor Browser 12.0 will update itself automatically when launched to match your system language. And if you've upgraded from Tor Browser 11.5.8, the browser will attempt to maintain your previously chosen display language.

Either way, you can now switch display language without any additional downloads via the Language menu in General settings – but we'd still recommend giving Tor Browser a quick restart before the change can take complete effect.

Naturally, bundling multiple languages in a single download should increase Tor Browser's filesize – we are very conscious of this; however, we've found a way to make efficiency savings elsewhere, meaning the difference in filesize between Tor Browser 11.5 and 12.0 is minor.

Native Apple Silicon support

Apple Silicon logo

This was no small task, but we're happy to say that Tor Browser 12.0 now supports Apple Silicon natively. Like Mozilla's approach for Firefox, we've opted for a Universal Binary too – meaning both x86-64 (i.e. Intel compatible) and ARM64 (i.e. Apple Silicon compatible) builds are bundled together with the correct version chosen automatically when run.

HTTPS-Only by default for Android

Image reading "HTTPS Only Mode" and a switch turned on

Back in July, we shared an update about Tor Browser for Android and our aspirations for its near future in the Tor Browser 11.5 release post. Since the beginning of the year our developers have been working hard to recommence regular updates for Android, improve the app's stability, and catch up to Fenix's (Firefox for Android's) release cycle.

The next phase in our plan for Android is to begin porting selected, high-priority features that have recently been launched for desktop over to Android – starting with enabling HTTPS-Only Mode by default. This change will help provide the same level of protection against SSL stripping attacks by malicious exit relays that we introduced to desktop in Tor Browser 11.5.

Prioritize .onion sites for Android

Another small but mighty improvement to Tor Browser 12.0 for Android is the option to "prioritize .onion sites" where available. When enabled, you will be redirected automatically to the matching .onion site for any web site that has Onion-Location configured – helping you to discover new .onion sites in the wild.

You can turn "Prioritize .onion sites" on under the Privacy and Security section within Tor Browser for Android's Settings menu. Please note that this update does not include the purple ".onion avilable" button in the address bar, which is still unique to Tor Browser for desktop.

And more...

12.0 is the first stable release of Tor Browser that supports Albanian (sq) and Ukranian (uk). We owe a huge thank you to all the volunteers who worked hard to translate Tor Browser into each language <3

If you spot a string that still needs to be translated, or would like to contribute towards the localization of another language, please visit our Community portal to find out how to get started.

We've also been busy making various behind-the-scenes improvements to features like tor-launcher (which starts tor within Tor Browser), the code for which has undergone a significant refactoring. As such, if you run a non-standard Tor Browser setup (like using system tor in conjunction with Tor Browser, or very partiular network settings) and experience an unexpected error message when launching Tor - please let us know by filing an issue in our Gitlab repo.

Lastly, Tor Browser's letterboxing feature has received a number of minor improvements to its user experience, including (but not limited to) fixing potantial leaks and bypasses, removing the 1px border in fullscreen videos, and disabling the feature entirely on trusted pages like the Connect to Tor screen, among others.

Send us your feedback

If you find a bug or have a suggestion for how we could improve this release, please let us know. Thanks to all of the teams across Tor, and the many volunteers, who contributed to this release.

Full changelog

The full changelog since Tor Browser 11.5.10 is:

@ooni December 5, 2022 - 00:00 • 2 months ago
Highlights: 10 Years of OONI
Today is OONI’s 10th anniversary! As of today, 10 years ago, the first OONI measurement was published. Today, 10 years later, more than a billion OONI measurements have been published, shedding light on internet censorship worldwide. In this post, we share some OONI highlights from the past 10 years, as well as some of our future plans. You can start off by getting a glimpse of “OONI in 10 years” through the following animation, which shares some highlights from the past decade. ...
@blog December 1, 2022 - 00:00 • 2 months ago
New Alpha Release: Tor Browser 12.0a5 (Android, Windows, macOS, Linux)

Tor Browser 12.0a5 is now available from the Tor Browser download page and also from our distribution directory.

Tor Browser 12.0a5 updates Firefox on Android, Windows, macOS, and Linux to 102.5.0esr.

This version includes important security updates to Firefox and GeckoView.

Tor Browser 12.0a5 backports the following security updates from Firefox 107 to Firefox ESR 102.5 on Android:

Major Changes since 11.5

This is the final planned alpha release before 12.0 stable. We have made a lot of changes over the past several months both large and small, and would like to encourage alpha users to test the following features and report any issues you discover.

Universal macOS packages

This is the first universal package release of Tor Browser for macOS. Now Tor Browser should run natively for macOS users, regardless of whether they are running on older x86_64 devices or on newer Apple M1 aarch64 devices.

What to test: Users with existing x86_64 macOS installs should receive an automatic update to the new universal package without any loss of functionality. The universal dmg downloaded from the Tor Project website should continue to work for macOS users on both x86_64 and aarch64 platforms. We would also appreciate if macOS users attempted a build-to-build upgrade from an older version of Tor Browser Alpha to help us validate this update path.

Once installed, macOS users using aarch64-based Macs (i.e. those with Apple Silicon) can verify whether Tor Browser is running natively by following these steps:

  1. Open the Activity Monitor application.
  2. Search for "Tor Browser" within the CPU tab.
  3. Should Tor Browser read "Apple" under the Kind column, you are successfully running the native Apple Silicon build.

Multi-locale bundles (Desktop)

As of Tor Browser 12.0a4, all supported languages are now included in a single bundle, and can be changed without requiring additional downloads via the Language menu in General settings on the about:preferences page.

What to test: Tor Browser Alpha should default to your system language on first launch if it matches a language we support. Alpha testers are also encouraged to test changing language within about:preferences#general, and to report any new bugs with localization in general (in particular instances of 'Firefox' appearing instead of 'Tor Browser' or other similar branding issues).

We would also appreciate if users on all our Desktop platforms attempted a build-to-build upgrade from an older version of Tor Browser Alpha to help us validate the update path.

Unified Español locale (Desktop and Android)

Previous versions of Tor Browser Alpha were available in both "es" and "es-AR" (Español Argentina) locales. As of Tor Browser, 12.0a4 these have been unified into a single Spanish locale instead.

What to test: Alpha testers who use the "es-AR" locale should be automatically switched to "es-ES" after updating.

New supported locales (Ukranian and Albanian)

We have added support for both Ukranian and Albanian languages.

What to test: Alpha testers who use the "uk" and "sq" locales should try them on both Desktop (using the language picker in about:preferences#general) and Android (using the options in Settings > Language).

tor-launcher migration (Desktop)

Parts of the code that power tor-launcher – which starts tor within Tor Browser – have been refactored. Although this work doesn't include any changes to the user experience, those who run non-standard Tor Browser setups are encouraged to test 12.0a5 on their systems.

What to test: Alpha testers who run non-standard Tor Browser setups (including, but not limited to, those who use system tor in conjunction with Tor Browser and those with specific network and bridge settings) should test starting and connecting to Tor, and report any unexpected error messages they encounter. All of the previously supported environment variables should still behave the same way as in the stable series.

Onion Auth fixes (Desktop)

Tor Browser 12.0a4 included two fixes to Onion Service client authorization:

  1. A fix to the auth window itself, which was broken in Alpha due to a regression caused by the esr102 transition: tor-browser#41344
  2. Another fix to a longstanding issue with Onion Auth failing on subdomains, which has also been backported to 11.5.5: tor-browser#40465

What to test: Accessing client authorized Onion Services on both top-level and subdomains.

Always prioritize .onion sites (Android)

Android users can now enable automatic Onion-Location redirects by switching "Prioritize .onion sites" within Privacy and Security settings. However, we have not yet implemented the url bar UI which we have in Tor Browser for Desktop.

What to test: Enable "Prioritize .onion sites" within settings, visit a website that supports Onion-Location, and verify that you were redirected to the website's .onion address.

The full changelog since Tor Browser 12.0a4 is: