物理ゆらぎを溜めて、一滴ずつ払い出すエントロピー配管。
真空の量子ゆらぎ(ANU QRNG)と、放射性崩壊(ガイガー管 + ESP32)を源泉として
Cloudflare Worker上のプールに蓄え、/drop で1バイトずつアトミックに取り出す。
LLMや人間の「拮抗した選択」を、疑似乱数ではなく物理的な対称性の破れに委ねるための道具。
- 消費一回性 — popは削除と同時。同じ粒は二度と出ない。
- 引き直し禁止 — 出た値がどうであれ採用する。使う側の規律だが、監査ログがそれを検証可能にする。
- キャッシュは真空ではない — 全レスポンスは
Cache-Control: no-store。drop_seqは単調増加で、同じ値を二度見たらそれはキャッシュであり、新しいゆらぎではない。 - 管が空なら空と言う — プール枯渇時は503。疑似乱数へのサイレントフォールバックは禁忌。
- 出自の保存 — 全ての粒に源泉ラベル(
anu#/home#)が付き、drops表に全履歴が残る。
[ANU QRNG]──cron(1日1回)──┐
▼
[自宅: ガイガー管]──┐ Cloudflare Worker (Durable Object + SQLite)
│ │ pool表: 未消費の粒
[ESP32]──WiFi──┴──▶ drops表: 払い出しの監査ログ
パルス間隔LSB │
→ SHA-256 ▼
→ POST /ingest GET /drop ──▶ 消費者(一滴 = 1バイト)
- 第一源泉: ANU QRNG — オーストラリア国立大の真空ゆらぎ測定。cronがサーバー側で 定期取得するため、レガシーAPIのクライアント側キャッシュ問題を構造的に回避する。
- 第二源泉: ガイガー管 — CAJOE系キットのパルス出力をESP32のGPIO割り込みで受け、
崩壊イベント間隔のLSBをSHA-256で白色化して
/ingestにPOSTする。 崩壊のタイミングは量子過程であり、予測は原理的に不可能。
すべてのレスポンスは Cache-Control: no-store 付きJSON。
一滴取り出す。呼ぶたびにプールから1バイトが不可逆に消費される。
{
"value": 199,
"drop_seq": 42,
"pool_seq": 1337,
"batch": "anu#2026-07-09T…#a1b2c3d4",
"drawn_at": "2026-07-09T…",
"pool_remaining": 511
}value: 0–255drop_seq: 単調増加。重複を見たらキャッシュを疑うことbatch: 粒の出自- 枯渇時:
503 {"error": "pool empty — 管が空。補充が必要"}
残量と履歴の概観。消費しない。 ヘルスチェックはこちらを使う。
ANUから手動補充。通常はcronが1日1回(1024バイト)自動実行する。
自宅源泉からの補充。body: {"bytes": "<base64>", "source": "home"}。最大64KiB/回。
npm install
npx wrangler secret put INGEST_TOKEN # 補充用トークンを設定
npx wrangler deploy- SQLite-backed Durable Objectを使用(無料プランで動作)。
- cronトリガー(1日1回のANU補充)は
wrangler.jsoncのtriggers.cronsで設定済み。 - デプロイ後、
POST /refillを一度手で叩いてANUのレスポンス形式とレート制限の 挙動を確認すること(レガシーAPIは仕様が変わることがある)。
アカウント準備・認証・secret登録・初回シードまでの詳細な手順は docs/cloudflare-setup.md を参照。
配線は3本。ブレッドボード不要、メス-メスのジャンパで直結できる。
| ガイガーキット | ESP32 |
|---|---|
| VIN (パルス出力) | GPIO (例: 4) |
| GND | GND |
| 5V | 5V (VUSB) |
パルスは3V負論理なのでレベル変換不要。ファームウェアは WiFi設定・Worker URL・INGEST_TOKENを書き換えて焼く。 動作確認は線源なしのバックグラウンド(20〜30CPM程度)でよい。 ビットレートを上げたい場合はウランガラス等の微弱線源を管に近づける。
- INGEST_TOKENを共有しない・チャットやログに貼らない。 管に混ぜ物をされたら、出自の保証がすべて崩れる。
- 公開してよいのは
/dropと/statusのURLのみ。 - 監査: drops表に全払い出しが残るため、蓄積後にχ²検定等で一様性を確認できる。 分布からの逸脱を見つけたら、疑う順番は ①ハードの故障 ②抽出器のバイアス ③宇宙。
なぜその値が出たのか。