Warrant canary
A signed statement of what we have not been compelled to do, to be reissued on the 21st of every month. The first issue has not been signed. Until it is, this page describes a mechanism rather than reporting one.
There is nothing signed here yet. No statement below is currently asserted, there is no signed text to download, no detached signature, no embedded block hash and no archive — because there has been no first issue. We would rather show you an empty document than a filled-in one nobody can verify.
Read this as an absence, not as a signal. A canary carries information when a published series stops. Nothing has stopped here; nothing has started.
- ·No gag order has been received
no_gag_orders_received: null - ·No secret warrant has been served
no_secret_warrants_received: null - ·No national security letter or equivalent has been received
no_national_security_letters: null - ·No demand for encryption keys or passphrases has been received
no_key_disclosure_demands: null - ·No request to introduce a backdoor, weakness or interception capability has been received
no_backdoor_requests: null - ·No server has been seized since the previous issue
no_servers_seized_since_last: null - ·No customer data has been disclosed to any party
no_customer_data_disclosed: null - ·We retain full control of our signing keys and infrastructure
full_control_retained: null
Each issue will embed the height and hash of a recent Bitcoin block, taken from a live chain source at signing time. Because block hashes are unpredictable, that proves the document could not have been signed before the block was mined — which is what stops a provider pre-signing twelve months of canaries and publishing them automatically after it has been compelled. There is no block to quote yet, and a block height printed before a document is signed proves nothing at all.
The signing key is not published yet either. When it is, verify its fingerprint against a source that is not this website before you trust anything signed with it.
Verify it yourself
A canary you have not verified is a web page. The critical step is step 2 — obtaining the key from somewhere that is not this website. If you take the key from the same server that serves the canary, an attacker who controls that server controls both, and the signature verifies perfectly while proving nothing.
# Nothing to run yet — no canary, no key.
# This is the procedure the first issue will support.
# 1. Fetch the canary and its detached signature
curl -sO https://vpsden.com/canary.txt
curl -sO https://vpsden.com/canary.txt.asc
# 2. Get our key from somewhere that is NOT this site
gpg --keyserver hkps://keys.openpgp.org --recv-keys <keyid>
# 3. Confirm the fingerprint against an independent source
gpg --fingerprint <keyid>
# 4. Verify the detached signature against the text
gpg --verify canary.txt.asc canary.txt
# 5. Confirm the embedded block is real and recent
curl -s https://blockstream.info/api/block-height/<height>Monitor it automatically
Nobody reliably checks a web page monthly. That is why the canary is also published as JSON at a stable URL — so a machine can watch it and tell you when something changes.
#!/bin/sh
# Today this only tells you when the first issue lands:
# the document carries "published": false and no statements.
c=$(curl -sf https://vpsden.com/canary.json) || {
echo "CANARY UNREACHABLE"; exit 1; }
[ "$(echo "$c" | jq -r .published)" = "false" ] && {
echo "NO CANARY PUBLISHED YET"; exit 0; }
# From the first issue onward, next_due and one boolean
# per statement are present and these two checks apply.
due=$(echo "$c" | jq -r .next_due)
[ "$(date +%F)" \> "$due" ] && \
echo "CANARY OVERDUE (was due $due)"
echo "$c" | jq -e \
'.statements | to_entries[] | select(.value==false)' \
&& echo "CANARY STATEMENT CHANGED"Run it daily from a machine that is not one of ours. We would rather you did not have to trust us about whether we are trustworthy.
Empty, and honestly so
We will not delete a past canary. If an issue were ever missing, that absence would itself be information — which is precisely why the archive has to be complete from the first issue onward.
Nothing to list. The archive begins with the first signed issue and will hold every issue after it, each with its signing date, its embedded block height and a detached signature you can check offline. We are not going to publish an index of files that do not exist so the page looks busier.
Canary questions
What is a warrant canary?
A warrant canary is a regularly reissued signed statement asserting that a provider has not received certain kinds of legal process. The theory is that while a court can compel silence about a demand, compelling a company to affirmatively publish a false statement is a harder constitutional question. The canary therefore stops being updated rather than being falsified, and its absence is the signal.
How do I verify a warrant canary?
Obtain the signing key from a source that is not the provider's own website — a public key server, a git repository, an archived social media post. Verify the fingerprint against that independent source. Then fetch the canary and check the PGP signature against the key. Finally confirm the embedded Bitcoin block hash is real and recent, which proves the document could not have been signed in advance.
What happens if the canary is not updated?
Treat it as a signal to investigate, not as proof of anything specific. A lapse could mean legal process was received, or that a person was ill, or that an automation broke. From the first issue onward each one will carry a stated due date so that absence is unambiguous, and /canary.json exists so a cron job can watch it rather than a human remembering to.
A canary tells you when something happened. Encryption makes it not matter.
Zero-knowledge LUKS is free and on by default. GHOST instances have no disk at all.
No email · No KYC · Pay in Monero · Deployed in under a minute