健全性テスト
ビットの対称性の議論は、ハードウェアが行儀よくしている間だけ成り立つ。健全性テストは、そうでない日のためにある: 固着したトランジスタ、垂れる電源、動いた線源、数ミリボルト漂うコンパレータのしきい値。三つの層が、三つの時間スケールで、それぞれ別の問いに答える。
第一層は拒み、残りは報告する
連続テストは NIST SP 800-90B の 4.4 節にある二つで、抽出器が処理のたびに走らせる。そしてプールに配線されているのはこの層だ: 直近のウィンドウが不合格なら、次のウィンドウが合格するまで API はバイトの給仕を拒む。不合格のビットはすでにストリームファイルの中にあるかもしれない。抽出器は出力を巻き戻さないからだ。だがプールはそれを手渡さない。
- 反復カウントテスト (RCT) は、同一ビットが 21 個続いたら不合格にする。 線源固着の警報だ: 噛んだコンパレータや死んだ管は一本の長い連を作る。カットオフは誤警報率 (1 ビットあたり 2 の -20 乗) と、1 標本あたり 1 ビットの最小エントロピーから導かれる。
- 適応比率テスト (APT) は、重ならない 512 ビットのウィンドウごとに、 ウィンドウ先頭のビットと一致するビットを数え、およそ 311 のカットオフを超えたら不合格にする。偏りの警報だ: 線源は固着していなくても傾ける。
一つの機微は、コードが意図して正しく作らねばならなかったものなので、書き残しておく。RCT の不合格フラグは粘着式だ: 仕様どおりなら最初の超過でラッチされ、不合格のまま残る。それを給仕のゲートに繋いだら、乱数が一瞬だけ不運に見えた最初の時点でプールは永久に凍る。だからゲートは、ウィンドウごとにリセットされる APT の判定だけを読む。
そして乱数は、予定どおりに、一瞬だけ不運に見える。公正なコインは約 200 万ビットに一度、21 連に到達する。このストリームは約 2700 万ビットを出力しており、/stats は l1_rct_max_seen
に 21 を報告している: カットオフには、算術が言うのとおおよそ同じ頻度で、実際に触れている。最悪の連がカットオフよりはるか下にしかない装置のほうが、疑わしい装置だ。
第二層はドリフトを見張る
五分ごとに、直近 1 キロバイトについて: バイト単位のエントロピー、ビットの偏り、ラグ 1 の自己相関。サービスが公開する時系列に追記される。何もゲートしない。その仕事は、ゆっくりした傾きを、不合格ウィンドウになる前にトレンド線として見えるようにすることだ。装置の実験ノートにある偏りドリフトの調査は、まさにこの種のプロットから始まった。
第三層は深部の検定
毎日、直近 64 KB (実測レートでおよそ一日分) について: ent、PractRand、
TestU01 の Rabbit と Alphabit。判定はサービスが /battery/history で提供する履歴に追記される。毎週、NIST SP 800-90B 6 節の非 IID 最小エントロピー推定が、NIST のリファレンス推定器で百万標本のウィンドウを走る。
層になっていること自体が要点であって、偶然ではない: 連続テストは壊れた装置を数秒で捕まえて代わりに拒み、移動統計は漂う装置を数時間で捕まえ、検定はどちらにも繊細すぎる構造を、一日分のデータをもらって捕まえる。一つの時間スケールの一つのテストでは、三つの壊れ方のうち二つを取り逃がす。
どこで見られるか
/ja/hotbits は現在の判定を読み込み時に読む。生の系列はサービス自身が公開している:
hotbits.tinymachines.ai の
/health/continuous、/metrics、/battery/history、/stats。ここに書かれていてあちらに見えないのは機構のほうだ: テストは抽出器のツリーの中で走っていて、このリポジトリの中ではない。このページはサービスの要約からではなく、そのソースから書かれている。