Skip to content
VPSDen
Not yet issued0 issues published · no signed text · no archive

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.

No issue publishedcanary.json

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.

Statements the first issue will assert
  • ·
    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
Proof of freshness

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.

Signing key

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.

What a canary cannot do
The compelled-speech theory that canaries rest on has never been tested at appellate level anywhere. It is an argument, not a precedent. Prosecutors have generally chosen not to force the question, so canaries have worked in practice while remaining legally unsettled. Anyone presenting a canary as a legal guarantee is overselling it.
Why we publish one anyway
Because the second effect is real regardless of the legal theory. A canary with a published due date creates an expectation, and when an expectation lapses, informed users notice. That signal exists whether or not a court would uphold the compelled-speech argument — and it costs us nothing but the discipline of signing a document every month.
Archive

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.

0 issues

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.

Questions

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