Skip to content

What a warrant canary cannot do

BlogExplainer

What a warrant canary cannot do

Share

A warrant canary is a statement a service publishes saying it has not received a secret order. The idea: a government can compel silence, but it is harder to compel a lie.

In short

  • Verifying a canary tells you one thing: this text was signed by this key and not altered. It does not prove the statement is true.
  • A real canary uses a key published in advance, has a renewal date, and cannot be written ahead of time.
  • Skudo's is renewed by a person every thirty days, at /canary.asc.
  • The legal theory behind canaries has not been tested in court.

What a canary proves

You learn one thing: the text was signed by this key and has not changed. Nothing tells you the statement is true. A canary rests on a person being unwilling to sign something false.

The Electronic Frontier Foundation explains the legal idea as compelled speech: a government may not be able to force a provider to state falsely that it received nothing. The same source says this has not been tested in court.[1]

Three properties of a real canary

Property Why it matters What Skudo does
Signed with a key published in advance Otherwise anyone who takes the server can publish a canary Signed with the same PGP key as Skudo's mail
Has a renewal date Otherwise a healthy canary and an abandoned one look the same Renewed every thirty days, with a visible status
Cannot be written in advance Otherwise a scheduled job could keep publishing after an order arrives Contains the latest Bitcoin block hash

How the freshness proof works

Bitcoin miners find a block hash by trial and error, so the next one cannot be predicted.[4] Once a block exists, anyone can check its hash.

Four steps: a new block appears, the generator fetches its hash, a person confirms the statements and signs, and the canary is published with the hash inside. A canary signed last year cannot contain a hash that did not exist until today.
Four steps: a new block appears, the generator fetches its hash, a person confirms the statements and signs, and the canary is published with the hash inside. A canary signed last year cannot contain a hash that did not exist until today.

Skudo's generator refuses to publish if it cannot fetch the hash.

Why it is not automated

The act of renewing is the point

A canary signed by a cron job survives a gag order without noticing it. A person types a command and confirms the statements are true, and that person could refuse.

How to read silence

State What it means
Renewed on time Nothing to read into it
A few days late People are late
Well past renewal The statement has stopped being made. There is no code to decode.

Canaries are hard to track at scale. The EFF stopped accepting submissions to Canary Watch in May 2016 because canaries are not standardised.[2] Apple's transparency reports dropped their canary in September 2014 after a change in reporting rules.[3]

Check it yourself

Ours is at /canary.asc. The transparency page shows the state and three commands to check it without trusting that page.[5]

Sources

All checked on 20 September 2026.

  1. Electronic Frontier Foundation, Warrant Canary Frequently Asked Questions: https://www.eff.org/deeplinks/2014/04/warrant-canary-faq ↑
  2. Electronic Frontier Foundation, Canary Watch: One Year Later: https://www.eff.org/deeplinks/2016/05/canary-watch-one-year-later ↑
  3. Help Net Security, Apple drops the warrant canary from transparency report: https://www.helpnetsecurity.com/2014/09/19/apple-drops-the-warrant-canary-from-transparency-report/ ↑
  4. Bitcoin Wiki, Proof of work: https://en.bitcoin.it/wiki/Proof_of_work ↑
  5. Skudo, transparency page and canary: https://skudo.org/transparency/ ↑