Signalbots: Secrets Distribution and Social Graph Protection for Activists
6:52PM Aug 1, 2020
Welcome back everyone to hackers on planet earth 2020. We still have two more days of the event online and we're glad that you decided to join us from wherever you are just a couple of quick announcements. First one is that we are still raising funds for the E FF, there should be a link at the top of your screen if you'd like to contribute we really want to help out our friends at the electronic Freedom Foundation, defend internet freedom. And thank you to everyone who has given them your support so far. Additionally later tonight, we've got hackers got talent, it'll be very simple we're going to set up a Zoom Room, we're going to share the link in the conference chat, and anybody can join it is gonna get interesting. I don't know if this will be the best hackers got talent, but it will definitely be a hackers Got Talent. And now on to our next talk and presentation signal is currently one of the most useful and widely adopted tools we have for secure communication among activists journalists and human rights defenders. Sara Leone and Josh King are our presenters of signal bots secrets distribution and social graph protection for activists, Sara Leone, is the Chief Technologist of the open technology fun, Josh King is a co founder of throne lists tech, a DC based tech worker co operative. We're going to start off with a presentation, and then afterwards, we will have questions and as a reminder, the only way you can ask is to do it through the matrix chat, look up the livestream session q&a channel.
My name is Josh King, I'm a software developer and co founder at drumless tech and activist focused technology worker cooperative based in Washington DC. Over the past 14 years or so I've been focused on technology projects around internet freedom and community technology, providing support for activists, human rights defenders and independent journalists around the world.
Hi, I'm Sarah I'm the Chief Technologist of the open tech fund or ETF for short. Most people haven't really heard about ETF, But you've definitely heard of the technologies that OTF funds and supports, such as tour signal wire guard tails, and a lot more of them OTF is kind of like a tech incubator for open and accessible technologies that promote human rights and open access to the internet. We work with technologists with human rights defenders with journalists with activists with NGOs and really anyone experiencing restricted access to the internet's. And while we mostly fund, tools, and research and projects. We also offer different types of services. We localize tools in different languages. We conduct security audits, we offer UX and UI support, and in dealing with all these different contexts and the focus and all these different contexts, we're always thinking and weighing the different types of circumvention technologies for people that live in places where internet freedom is restricted and actively repressed in the form of network censorship, or digital security threats. And as a founder, or chief is in kind of a unique position. We have the ability to engage with commercial VPN providers to subsidize access and service for journalists for activists for free expression defenders, really anywhere in the world. So we all know that VPNs don't provide anonymity, there have been enough horror stories out there of logs, getting leaked or ending up on the internet's, and that's not really what we're trying to solve for. It's just that we often work with people in regions where content is blocked and getting access to some sites is only possible through circumvention technology. And sometimes that means using Tor and then other times that means using a VPN. So in thinking about this and wanting to provide this type of service clearly going around and handing out codes one by one to people is not really a viable option. So, it got us thinking how can we facilitate this process, how can we create a system of distribution that's safe, that's private, and that's secure, and why should we even do this at all as OTF, and in thinking about this VPN question. I also got us to take a step back and think about a broader issue here. We work with very sensitive groups. So how do we create a dissemination tool that solves for this activist social graph problem. How do we create a dissemination tool that essentially protects and keeps the information safe for all these people that we work with,
signal is one of the best tools that we currently have, for secure communication online, not just because of how secure it is, but also because of its wide adoption is an obvious move to see if when what other ways that we could utilize signal to provide other kinds of services to people without having to require them to install it yet another app. So with OTF help we create a project called ionosphere named after the where in Earth's atmosphere, off of which you can bounce signals. In order to provide, essentially, a chat bot or other text services that operate over signal to be able to provide different kinds of information to people. The initial use case for this, that we serve like focused on was what we've been calling the activists social graph problem. So, signal groups are great. They're super secure they're great for keeping up with people for organizing everything, but probably the most common complaint I would guess about signal is that it requires your account to be tied to a phone number, and that's the same as signal groups where everyone in a group has everyone else's phone number. Now, there are very clear reasons why Siegel designed it that this way, but you can see a use case where, say you're using a single group for organizing, you're organizing a protest and you're at a protest or rally, and someone in the group's phone gets stolen or confiscated. Or, in other some other way a bad actor gets their hands on it, and then that bad actor is able to see the phone numbers of every other person in that group that is connected with this person doing this organizing work. So the idea that we had was to create an intermediary a bot that could be controlled by the by an organizer or whoever is operating the bot that could essentially be sent a message and then that bot redistributes that message to every other member in the equivalent of a group, recalling a list or or whatever that's the, the bot receives a message from an administrator, and then the bot sends that message one to one to every other user that the bot internally knows is supposed to receive this message. And then, if a some on that list if their phone gets confiscated or stolen or whatever that, then that user only has the number for the bots. And that number can be a throw away Google Voice or Twilio number that isn't necessarily as easily connected to every single other person who might be receiving those messages that provide warnings and notifications and whatever else to people at that protest, as it would be if it was a signal group with everybody's individual phone numbers in it. And so
for users to be able to request different kinds of tokens and secrets and other access stuff, particularly VPN codes. In this case, over signal so that a user would be able to request like a certain number of VPN codes or other other secrets and then that that would get approved by an administrator and then that list of codes would be sent to them over signal. So, what are some of the security ramifications of running this kind of framework for being able to provide text services over signal. Well, one advantage is that over having something like a signal group is that, because the bot can be tied to a throwaway phone number and, really, other than maintaining ownership of that phone number so that it can't be appropriated by some other signal user, whether by malicious intent or accidentally. Beyond that, retaining ownership for those reasons, after that initial registration against the signal server, the bot doesn't even really need to receive messages or have any connection to the phone system or anything like that it only needs to be able to connect to signal servers. So, the bot can essentially run anywhere, it can run over Tor wherever and because without the addition of like other sorts of things like web interfaces and other stuff all interaction with the bot happens over signal that has very very little attack surface. And so you don't need any particular hosting you don't need like publicly exposed IP address in order to be able to run the service. It just needs to be able to connect to signal and you need to have a phone number in order to set it up in the first place is probably a good idea to maintain ownership of that phone number so that you aren't suffering from the equivalent of sim jacking by having someone else take that phone number and then re register it. Although everyone would see the safety numbers for that for the bot change for them. So you could have procedures in place to be able to anticipate that eventuality but other than that you have the advantage that the bot can be running essentially anywhere and not publicly exposed to the internet. Now, there's a very obvious reason that signal doesn't provide these kinds of services which is the bot is inescapably a person in the middle. And so the messages that someone might be sending through this kind of relay are going to pass at some points in plaintext through the bot. And so, whoever has access to the battery's running it at least potentially has access to these messages, it's kind of a wheeze so far somewhat escapable consequences of running this kind of like relay infrastructure, it's the equivalent of like sending a signal message to someone, and a friend of yours and my copy and pasting it or typing it into the, the chat box to another signal user that they are familiar with. And so the bot is only as trusted as the people operating it. So it's pretty obvious why signal doesn't provide this sort of service when they want to make sure that their service has like their servers know as little about the users who are sending messages through it as possible and as little about the contents of those messages as possible. That said, for all the reasons that we've outlined, you can see some use cases where a trusted group of people might want to make use of this kind of service, or that they might want to provide a service over signal that doesn't require any sort of like additional trust, like informational services and things like that, that they might choose to decide that that's low enough risk that they trust the operator of the bot. And so we size still a service that was worthwhile in like designing and building and providing so that people could choose to run this kind of service for
for folks that they were
interested in providing trusted services for. Okay,
so back to a TF. Why do this at all. Why think about VPN services in the first place. One, a lot of folks on the front lines don't really need the full anonymity that Tor provides to VPNs are complicated, and we know that from the dozens and dozens of guides that you can find on the internet about how to choose a VPN and how to set one up. And a lot of the folks on the ground, don't really know which VPN providers to trust in the first place, and three. In some countries, figuring out online payments to a VPN provider can actually be a very complicated process or not even possible in the first place. So in thinking about all these things, and about this VPN but how can we essentially put up the system in a way that is safe and secure and thinking about it we were really inspired by the good Tor project which is a service that provides alternative methods to download the Tor Browser, especially for people who live in places with a high level of censorship. And we're accessing the Tor website is blocked or just restricted. So this is where a VPN bot comes in, and in thinking about it and sketching it out, the MVP looked essentially like this, we would have three types of users and admin a manager and a recipient, an admin would be able to deploy VPN codes to recipients, or to managers, a manager would be essentially a trusted member of our community, someone that would have has worked with a lot. Someone that we trust and that we know has a wide network and is able to disseminate codes to a bunch of recipients if needed, and a recipient would be able to request codes from a manager or from an admin to then be approved by those folks, and the points. So the bot will be able to answer to a certain set of commands and that can be adapted as you need depending on the project that you're working on. So in our case, an admin would be able to add managers, remove managers, check on the status of codes that are still available, deploy codes to recipients, create buckets of codes to be deployed in bulk, a manager in their case can mostly do the same thing and also deploy. We can codes and choose from say one provider or another VPN provider. And then the recipient will be able to request codes, as I said, from the bots. They could say request one code or up to 20 codes, they could request codes for a one year service or a month long service. So say you're a security trainer and you're giving a security workshop somewhere, and you're teaching people how to use a VPN, then say, and in a situation like this, requesting 10 codes for a month long service would be ideal. So we were guided by the following principles, safe. We're trying to help people at the end of the day, under heavy censorship and security threats reachable. A user has to be able to engage the bot, even in a heavily censored network, easy to use, the fewer user interactions exists, the better. clean code should be able for other developers and contributors to work on this bot, and to see how it can be improved multilingual. It has to be able to support different languages for different people in different contexts provider agnostic, the VPN bot should be able to support different VPN providers. Private admins should have no visibility at all, or the ability to engage with recipients directly, we assume that recipients, don't have insurance trust, which if we don't want to know who they are, and they don't want us to know who they are, the bot is incredibly versatile and could be adapted and evolved anything really. At this point, for OTF we receive a list of VPN codes from a provider, and then the bot will essentially ping that list to distribute codes to whoever is requesting them. But in thinking further the bot can also be used to deploy configuration files for standalone VPN servers or other types of cloud services like karoku or green host. Sometimes groups that we work with. Need to host their content on an encrypted server or to deploy standalone VPN servers, but sometimes don't have the capacity in house to do something like that. So OTF would offer the services, and then we distribute the credentials to the person then we'll maintain the server after the initial deployment. So you can imagine how that would work. And so this way you could take it and essentially adapted to your needs as necessary. Now we're going
to show a quick tech demo of the signal bot in action sending messages to a list of users, we're skipping over the setting up of Hugh bot, but you can find instructions on how to set up Hugh bot in the threadless tech GitHub firstname.lastname@example.org slash threadless tech slash ionosphere. Now, we're sending up Hugh bot with a few plugins for the purposes of the demo we're using a simple plugin for storing the state for the bot and the encryption keys in just a JSON file in the bots directory, we're defining the number that the signal bot is using in order to communicate with the users, we're setting a particular number as an admin that is capable of administering the bot. And we are specifically defining the adapter that the bot is using is the one that connects it to signal itself. So we just run this and then on first run the bot has sent a verification code, the number that you defined as the bot number. And then once you receive that code, you can start the bot again, defining that code on the command line. And that continues with the verification process so we received the code 444437. And so, then we're just going to go back and run Hugh bot again. We'll define that verification code, after us run at this time, it will generate all the keys and register it with the servers, you don't need to keep specifying the code if you want to in the future things and it runs the server. Now we're going over to two different instances of signal that are already are set up to communicate with the bot we just set up previously. The one on the left is the admin user that we defined before the one on the right is just a regular user that the bot doesn't know anything about. And we can see that the. Each of these users is able to ping the bot and it replies. So they're both able to communicate with the bot. Now, the admin user is going to create a list of users to distribute messages to. And then they can add any number of users to that list that they want to send messages to. In this case, we're just using the one number of the demo user on the right now they're added to the list and we can easily send messages to any number of users on this list. And for the purposes of VPN codes, the bot is also capable of keeping track of not just lists of users but lists of codes and then distributing sets of codes to any list that we define. So we worked
with. Simply secure and key the new design Congress to do UX and UI design for users and folks interacting with the bots. To think essentially about the easiest way to use the bot, and the most flexible workflow across different use cases, and different languages. So an important part of doing this work other than just thinking about the UX UI is thinking about risk assessments, what are the different risks involved with this project, and when this was specifically, what are the different attack surfaces and what information can be exposed. How can we put people in danger and essentially doing this work. One example for instance is the issue around phone numbers and thinking about the different users that we have. The interact with the bot. We have an admin that's essentially in charge of the entire platform and can add managers, then we have managers that are essentially trusted nodes in our network of folks that have worked with OTF foxtel that we know and that we trust essentially to be that person in the middle, and then we have recipients. So, for the managers, specifically in interacting with them, and having them interact with Zubat, we would recognize them essentially based on their phone number. But then, how do we account for folks that have different phone numbers and could be texting from a from say a burner number. How do we account for the fact that some of these phone numbers are actually quite sensitive. Do we save this information somewhere. Do we store it in an external spreadsheet. How do we store this information. And then the second issue here is what if this phone number is leaked. What happens when someone goes after this trusted phone list of essentially all these managers, where essentially you know all the different network nodes in OTS network. How do we remove this dependency on this phone list or on this external spreadsheet and how do we reduce the attack surface there. Another issue that we thought of his account bumping, how do we plan for that. How do we deal with situations in which the bot is actually overloaded. What if the bot is receiving incessant requests for VPN codes, how do we limit maybe that rate. Is it possible to break the VPN box by requesting codes, over and over again. How do we account for situations like this and how do we essentially plan for in a potential DDoS attack against our VPN bot. There are lots of considerations to take into account when thinking about this part and thinking specifically about the types of users it's supposed to serve. And, you know, creating technology is relatively easy, but creating technology for high sensitive groups, human rights defenders activists. Journalists lawyers is really incredibly challenging because whatever you do in whatever you create has to be done with not putting people in more danger or unnecessary danger, and in some cases, technology is not the solution at all and that's important to recognize at some point. If anyone is ever in the position of creating technology or be building technology for activism. It is important to know when to walk away from a project or to recognize that this technology is not solving the problem that's at hand and is not really serving the purpose that it was supposed to serve the VPN bot is up and running, it's ready to use. We're testing it out with different groups. If anyone has any thoughts about it, we'd love to hear more. Once again, I'm Sarah I'm the Chief Technologist at OTF. Thank you for listening to this talk, and looking forward to your questions. Thank you for attending
our session. thank you to the organizers for accepting our session proposal is to do this talk. Thank you to the open technology fund for funding this work and to signal for creating such a great service and app for us to build these technologies on top of. Again, my name is Josh King, I work at threadless tech which you can find online at threadless. Tech, all of the code for the projects that we outlined in this talk is available open source on our GitHub, and thank you for taking your time.
And we're back with Josh King and Sarah.
So, we have demo setup to show how this works.
Yeah. Yeah, so we have an instance of the bot that we were just talking about in the video set up. You can hopefully see the number at the top so you can try it out as well if if you want it will be online for the rest of the session and we'll do after that. Please don't abuse it or anything like that it's set up so that anyone who messages is and admins that you can try out, like all the features. First of all, we can see. if you ask for help you can see like a large number of commands that are available for this bot. This particular instance is set up with the, the plugins for creating and managing lists of users for distributing messages to, and also creating and managing collections of VPN tokens, to be able to distribute to different users and those lists. The, the style of the commands and everything in this version. If you saw the sort of flowchart at the in the video. That's kind of part of a process that we're that we're undergoing to kind of turn this from was currently sort of like an internally focused sort of tool for trusted users to be able to use this to distribute tokens to more of a to something that has more of a user facing kind of elements or a self service kind of element, and has more of a natural language kind of style to the commands. So we can see. Well, we can show right away like the lists that we have available. We've got admins and we also have recipients. We can create additional lists of users. Let's create one for hope. And we're going to add a number two. To this all the numbers if you try out the bot all the numbers are in the E 164 format so plus sign country code. And then the full phone number without any spaces or dashes is kind of the format that signal expects numbers to be in and we sort of adhere to that.
you know yeah not using any real numbers but if you mess with the bot and add like your phone number to one of the lists just be aware that that phone number would show up to anyone else who uses the bot and like dumps the list so just, you know, FYI, we can. You can also add a list of numbers all at once by doing list add the name of the list and then space separated like multiple phone numbers. And then if we want to send obviously as when we're because this isn't like a real phone number but if this was like a real phone number or list of phone numbers, we just have to do add in the name of the list and then whenever we want to say to that list and then they receive a message from the bot with a prefix indicating whether or not, like, indicating the list that this is coming from, including the map like and, including the message that you sent to the list. The that option for like whether to prefix the name of the list is configurable.
The, we also have token buckets.
So right now
we just have one token bucket.
That's just kind of the
sort of name that we've used because you know token bucket sort of thing but it's the name that we've used to like for the sort of collection of a given set of tokens, the tokens can have like are relatively arbitrary. They include
for code like whatever the, the string that the token actually is value which is an arbitrary. Also an arbitrary value but might be useful if you are getting issued say like a VPN code that's useful for a certain number of days, or a certain amount of time, it's useful to be able to assign a value to each of the codes, so that when they get issued you're able to see like, Oh, this is worth, whatever 60 days or whatever the person who loaded that code into the system. assigned to it. They can also have an expiration date, and you can see where it shows total issued expired. So that if tokens expire a certain time the bot can automatically expire those out of the bucket that they're using. We can create
tokens are generally loaded into the buckets by.
This is using a functionality of the library where we can actually use like file attachments.
Hopefully I'm remembering the syntax correctly off the top of my head.
So does the CSV file that just includes like a bunch of is just mock data as the file name might suggest they aren't real like VPN codes, they're just a bunch of you you IDs.
The, but now the.
Now we have 500 tokens in that
CRA forgot like all right token show buckets.
So now we have 500 tokens
in that particular bucket. It also keeps track of D duplicating tokens based on the
whether or not the,
the particular code was already loaded into a into this token bucket previously. This is useful because previously VPN codes for this particular project by OTF were managed entirely in like basically spreadsheets and so it was important to be able to like be able to automatically consolidate those spreadsheets across different things to make sure that there weren't any duplicates. There isn't a. I didn't include a way to directly view the, the tokens from kind of like an admin level I print out all 500 tokens because that wasn't really, it didn't feel particularly useful for anyone but the individual person that is actually receiving the token to actually be able to see what the code is. But then you.
You can say issue 10 tokens, from
a given bucket to
recipients and it will send out, that number of or to a particular number. We're not saying response because that's not real number that's in there, but the. It's the recipient receives a message with a list of tokens that that they have been issued, saying like hello you've been issued this number of tokens they have this value here all the tokens.
You're also able to issue tokens that have
a particular amount of value.
And we also if we look at the
at the command help again, you can see that we've got some.
We have some special functionality for some VPN services. So currently we only support mullvad, but the bot is actually set up so that we can assign a bucket to either be a set of mullvad accounts like codes for setting up accounts on the mullvad VPN service, or codes that are for value that can be assigned to a particular account. So this uses a, an API that mullvad exposes for being able to create accounts and assign value to those accounts, so you're able to use this to say create a list of free accounts, be able to issue an account to somebody, and then go back and be able to re up their accounts by saying, hey, I want to apply.
I have a bucket of all that codes I created
when I created the bucket I said it was a mullvad codes bucket.
I want to
assign a code to this user to their account. If that user has multiple mobile ad accounts, then the bot will come back and ask you. Hey, like this user has multiple mobile accounts, select from this list of accounts in which one you want to be able to assign value to. So this is like a valuable administrative tool for like being able to sort of manage this this program and if there mullvad VPN accounts, then it doesn't even require any user interaction, other than like accepting codes that are that are issued but more value can be added to someone's account directly from the bot without them having to then go and load up a website and go in and enter this code into that system. We want to add support for additional VPN.
You know that are used by this by
this project at OTF. When I get unsuspended and the. And so that basically just depends upon available time and also what kinds of API endpoints are are exposed by the different VPN providers, but while that's very been very helpful with like setting up those VPN endpoints, those API endpoints for us. So, this bot is, like I said it's currently available it's normally the bot has a certain amount of access control like it wouldn't respond to someone who isn't an administrator codes can only be issued to users who are in the recipients list. But for the purposes of this demo, basically all those access privileges have been disabled so you can just go ahead and you're essentially an admin if you message the bot. Like I said, Please don't use it to send a bunch of codes to somebody who doesn't want it or anything like that but this will be available for the next hour so like it said in the video also all of the code also instructions for setting this up, are all in on GitHub email@example.com slash threadless slash tech slash ionosphere is basically the repository that contains the top level directions for setting up all of this stuff.
So, yeah, thank you.
I think you're muted.
Indeed, I was muted. So time for some questions. And as a reminder, the only way you can ask questions of our great presenters, is through the live stream q&a channel in our exclusive matrix chat. So one pretty straightforward question. Do you have an URL for that signal add on
for the whole thing, like I said, the, the, the code for the bot. So ionosphere as a project includes a number of different repositories, you can get the links to all the repositories along with the instructions on how to set up the whole thing. And where you can file issues and things like that, firstname.lastname@example.org slash throne list. Yeah, threadless dash tech slash ionosphere is the sort of top level repository with all of the instructions for how to set that up, including instructions for how to set it up standalone using Docker or on Heroku. Okay.
Well, some audience members have expressed concern over the anonymity guarantees of ionosphere. Could you talk a little bit about that.
Sure. I mean, kindly as I said in the video inherently about like this is a person in the middle. For and like. It is a relay that sits in the middle between the operator of the bot and any users who are who are receiving messages. So, the. I want to make absolutely clear that messages are end to end encrypted to the bot and from the bot to whoever else that message may be going to. But the bot has access to the content of the message. So, an operator. So, an instance of this bot is only as trusted as the operator that is admin who's running it, and the system that that bot is running on. However, the. We felt that there were enough use cases where it was useful to either have like an automated way to be able to send different kinds of messages and notifications through a secure channel like signal, or where there were other security concerns about the sort of possibility of socially engineering signal groups where you know you're in a single group and you have access to everybody else's phone number. That was still useful have this bot. But the. Yeah, it, it is only as trusted as the as the administrator of the bot. Another thing to make clear is that all of the that whoever is using a library for that underpins the bot or is offering an instance of the bot has a lot of latitude for how the state and keys for the bot are stored. The library is set up in such a way that you can implement your own storage interface for all of that state, very easily, and then for the bots, particularly it implements a version of that storage interface that uses Hubert's own abstraction interface for storage so you can store it in any kind of database that you want. So there are a lot of options for being able to store it in encrypted databases secure key rings, obviously would advocate running a system that is encrypted at rest, things like that but it definitely. Yeah, it's a very long way of saying it's only as trusted as the person who's who's writing the bot, and that's absolutely true.
Um, what is your experience been training managers to use this interface.
well, Sarah is one of the people who I've worked with and like using this interface. I mean, we've engaged with
the so currently it's a small group of people who are using the interface for this for the VPN stuff specifically, the technology underpinning the bot has also been used in some other projects, most notably Guardian project has written a project called platform called CIG Rio for basically wrapping a REST API around the signal library. In order to be able to integrate with other platforms. In particular, like ticketing systems and things like that for sending out notifications for training for this particular thing. It's largely been kind of like an experimental process of working to iron out the bugs and do like more lately with the design flowchart and stuff we've started focusing more on changing the interaction workflow to be something a little bit more approachable than something that's like a more structured. Currently it's more of a structured command line like interface, rather than having a conversation. And so we're moving in the direction of like having more of a conversation has been very helpful working with Cade new design Congress and the folks at simply security to kind of like help you do the those interviews and like interaction stuff in order to like, come up with new design stuff for that has been based on feedback from training people to use this,
this bot. Sorry I hadn't talked a lot there Sarah.
It's exactly what I was going to say, just we're basically in this phase right now focusing on the more on the UX and UI, with a lot of privacy and security considerations as well, kind of like how we talked about it on, on the talk. And so simply security has been really really helpful in making this happen.
So, one of the concerns that folks have been putting pointing out in the chat is the signal pin situation. Do you have any plans on implementing recovery pin for the signals or the server signals instance. Do you have any idea how that new secure value recovery will affect your code base and, or perhaps you have a workaround for that whole pin issue. Well,
I mean we don't currently have a workaround for it or anything like that. The.
And I do have one last question and this one, perhaps for Sarah, living Luke keynote talked about OTF 's current challenges have these impacts of the project yet, or do you expect them to.
Yeah, that's a good question and if folks did not manage to catch Libby's keynote I would definitely highly encourage everyone to watch it. It was truly fantastic and she gave a really good background on everything that's happening. Yes. Unfortunately, it is affecting this project as well. I had to tell Josh this week essentially the pas work on everything because our funds are being eroded essentially hold hostage at this point. And we don't have access to them, so that impacts basically all of our projects, all of our active projects including this one. With that said, I would highly encourage folks to check out. Open collective, a lot of members from this community like the internet freedom community folks are focused at the intersection of human rights and technology, kind of, gathered together and rallied around, essentially supporting each other and supporting all the projects that have been affected by this. And they've created a page on open collective, and the link I believe is open collective. COMM slash safe, internet freedom funds. And if you go there, you can get some, a bit more information on donating and supporting projects specifically, and in parallel that CF team is still trying to work as hard as possible essentially on getting back on our feet. Considering all the everything that's going on I say the things and the impact that it's having on projects and deeply affecting people. So yes, unfortunately this is this is one of them that we're going to have to pause for a moment. The good thing is that code is available and public and open source and that's the beauty of open source projects that we have, so anyone that wants to jump in there and contribute and work with us can definitely do that
as well. So obviously there's still a lot of conversation that we still have going on in the matrix chat if you'd like to go into our hallways chat or Hallway Conversations channel to follow up with some of them we'd like to invite you and attendees to do so. Sarah, Josh King thank you very much for joining us at hope 2020. Thank you. Thanks so much.