Github: https://github.com/WardPearce/Purplix.io
View our canary: https://purplix.io/c/purplix.io/3ZjhTlZRWv8iqa6sn9yJ3TRiIkVbwITOOlwLjJD36jQ
What is Purplix Canary?
Purplix Canary is a free & open source warrant canary tool what helps you to build trust with your users.
It allows you to inform users cryptographically if your site has been compromised, seized or raided by anyone.
How does it work?
Site verification
Purplix uses DNS records to verify the domain the canary is for, giving your users confidence they are trusting the right people.
Canary signatures
Each domain is associated with a unique key pair. The private key is generated locally and securely stored within the owner’s keychain. When a user visits a canary from a specific domain for the first time, their private key is used to sign the public key. This signed version of the public key is then automatically employed for subsequent visits, effectively mitigating man-in-the-middle attacks and ensuring the trustworthiness of canary statements from the respective domain.
Files
Canaries can include signed documents to help users further understand a situation.
Notifications
Users are automatically notified on the event of a new statement being published.
Shouldn’t there be a notification when a statement isn’t published? Or when the text changes? (Or is that what is meant by a new statement?)
Is the intention to build this into a browser extension?
Love your projects, love the philosophy, great work!
Agreed, should have an alart for missed canaries. Each canary has “statements” you publish new statements to update ur canary. This provides a signed record of passed canaries.
Browser extension or even mobile app could be another aspect of further securing validation. Currently we do store a offline backup for each public key in idb storage & a signed copy if you have a account for further validation if the URL hash has been tampered with.
Thank you for your kind words ❤️❤️
Someone please correct me if I am wrong, but I was under the impression that warrent canaries were a broken concept. Anyone with the power to submit a warrant to a company also has the ability to prevent the company from triggering their canary.
The idea is that there is no such action as “triggering the canary” that the government can stop them from taking. Instead they refrain from updating it, thus alerting people that something has occurred. However, since the point of a canary is that not updating it raises concerns, I’m not sure how this service makes any sense (alerts on new canaries?).
The idea is that there is a big difference between the government saying “don’t tell anyone about this” and saying “you must make a false statement (the canary) every X amount of time indefinitely.” In the past courts in the US have taken a fairly dim view of the government trying to compel speech. There are some example cases at https://en.m.wikipedia.org/wiki/Compelled_speech#United_States.
I wonder where mandated sonograms and abortions are bad disclaimers to patients seeking abortions falls.
That speecch is mandated, yet SCOTUS barred California from mandating crisis pregancy centers reporting to patients you cannot get an abortion here but instead call these numbers to schedule one
Lots of controversies outside the topic of the thread, but certainly examples of mandated speech and rulings to prevent mandated speech.
None of those compelled speech examples include national security though, which has its own level of rules and courts. (I am not American or a lawyer, so i may be wrong).
And if a company can be compelled to hand over customer data, why wouldnt they be hand over access to the systems that update the canaries?
The other issue is thar once a canary is triggered, it cant be reset, which means that XXX agency can trigger the canary with something meaningless, and then its forever untrustworthy.
You may well be correct, and they are sufficient, but i am not convinced that canaries work, especially against the higher level adversaries.
Yes, most of those points are the concerns with warrant canaries. So far as we know the concept is totally untested in court so it’s hard to say what the result would be until it happens.
Updating the canary should require a human input (like a password to unlock the GPG key), which is not sometime the government would generally get access to (they make a request for data about XYZ user, and the company turns it over; they wouldn’t get actual access to the production system). The government could seek a ruling to force the company to update the canary, but as such a thing hasn’t been granted before (at least as far as we know), it’s not a guarantee. So, there is a chance that the warrant canary will serve to alert users to something happening, which is better than nothing. But because of its untested nature, it might be broken by a court.
I’m not sure I understand your point about “once it’s triggered it can’t be reset.” If a company fails to update their canary on schedule it means something happened that they can’t disclose. Once they are released from the NDA they can release a new canary explaining what happened.
Wikipedia does claim that patriot act subpeonas can penalise any disclosure of the subpeona. But i am not a lawyer, and afaik this is untested (or at least undisclosed :/ )
https://en.m.wikipedia.org/wiki/Warrant_canary
Some subpoenas, such as those covered under 18 U.S.C. §2709© (enacted as part of the USA Patriot Act), provide criminal penalties for disclosing the existence of the subpoena to any third party, including the service provider’s users.
In September 2014, U.S. security researcher Moxie Marlinspike wrote that “every lawyer I’ve spoken to has indicated that having a ‘canary’ you remove or choose not to update would likely have the same legal consequences as simply posting something that explicitly says you’ve received something.”
I think my point is that a gag order with a long time out essentially kills the canary, even if it doesnt affect the vast majority of the services users.
Thanks for your response though, I appreciate the additional information.
Also to note, that Purplix does warn users to assume the site has been compromised if the latest statement has expired.
That actually could be useful, by having a completely external company send a notification without action by the company receiving the warrant, it may be possible to circumvent the prohibition on alerting users.
I think that’s the purpose of the “next update” part. As long as the ability to refresh that timestamp is gated behind a passphrase (for 5A protection) then it functions as a deadman switch for the canary.
Passphrases only work in locales with 5a or similar protection, and either have to be managed by a single person or have the potential to be leaked.
Great for small businesses, but unworkable at the enterprise level.
But having a canary mechanism for smaller businesses is crucial, because they can’t afford to put a wall of lawyers between them and potential government overreach.
The canary is triggered through inaction, not action. The government would have to compel the target of the subpoena to keep updating the canary on schedule.
This is a great idea! I wish more websites did warrant canaries, and those that do often fail to maintain them or plan for the case when a gag order prevents them from updating an existing canary. The only thing I would suggest is making it more clear that being in an alpha stage means that the product should not be relied upon in critical situations.
A failed warrant canary is effectively a triggered warrant canary. If its triggered, you have to assume the company has been issued a warrant, and is therefore vulnerable.
What do you mean by a failed warrant canary? In most cases there is no clear failure because there’s no clear plan in place to maintain them.
For example, if a website has a statement “we have received 0 warrants”. When was that published? Yesterday? A year ago? More? Even if it has a date, say 6 months ago. What does that mean? That they only update it every year? Or maybe there were meant to update it they just forgot, maybe they aren’t allowed to update it due to a gag order.
Due to the way each website does things differently with no clear guidelines, there isn’t actually a defined failure case.
They typically have a date for the message and the date for the next update. If they miss their update, they have failed.
While you can find examples of companies doing it correctly, it’s also easy to find companies who do not. Also, some update theirs seemingly daily but don’t actually state this. Sure, you can check and see that it was updated “today”, but what if it doesn’t get updated and you don’t know its “typically” updated daily. Again, no date for the next update.
These are all examples of companies who do not explicitly specify when the next update will be: kagi.com/privacy nordvpn.com/security-efforts/ cloudflare.com/transparency/
Maybe it was updated after your comment, but the demo site has that notice prominently at the top for me
Purplix.io looks cool, I don’t make surveys but If I do I’d probably use it