cinnabar — ウェブカメラを使ったラバランプ方式エントロピーシーダー
概要
cinnabarは「ウェブカメラベースのラバランプエントロピーシーダー」を目指したRust製プロジェクトです。カメラ映像に含まれる微少な変動(ノイズ、揺らぎ、光の変化など)を取り込み、SHA-256でハッシュ処理することで乱数シードを生成します。ラバランプのゆらぎのように見た目はアナログだが、映像中のピクセル差分や時間的揺らぎをデジタルに取り出してエントロピー源とする手法を採用しており、外部の乱数サービスに頼らない自己完結型のシード作成が可能です。
リポジトリの統計情報
- スター数: 1
- フォーク数: 0
- ウォッチャー数: 1
- コミット数: 4
- ファイル数: 6
- メインの言語: Rust
主な特徴
- ウェブカメラ映像をエントロピー源として利用(ラバランプ風の「動的ノイズ」)
- 取得した生データをSHA-256でハッシュしてシード化
- Rustによる安全かつ小規模な実装、CI(GitHub Actions)によるビルド確認あり
- シンプルなファイル構成で導入や解析が容易
技術的なポイント
cinnabarの肝は「カメラから得られる非決定的情報をどのように取り込み、安全にシード化するか」です。一般的な流れは次のようになります:カメラから連続フレームを取得し、各フレームのピクセル値やフレーム間差分を取り出して生のビット列を構成します。生データはカメラ固有のバイアス(センサーの固定パターンノイズや露光設定)や環境要因(照明、動き)に影響されるため、そのまま使うと偏りが残る可能性があります。そこでSHA-256などの暗号学的ハッシュ関数で「ホワイトニング」し、出力ビット列の統計的偏りを減らす(かつ一方向性を与える)ことが重要です。
Rustを選ぶ利点として、メモリ安全性と高速なバイナリ生成が挙げられます。リアルタイムでフレームを扱う際のバッファ管理や並列処理(キャプチャ→処理→ハッシュのパイプライン化)を所有権/ライフタイムで明確に扱えるため、安全で効率的な実装が可能です。エントロピー評価や推定は慎重に行う必要があり、NIST SP 800-90 系の評価や経験的な統計検定(周波数テスト、連続性テストなど)を併用するのが望ましい旨も留意点です。
攻撃モデルでは、カメラへの物理的干渉(照明制御や映像の録画を使った予測)やソフトウェア改ざんが想定されます。これらに対処するためには、複数フレームの差分や時間的ランダム化、外部の補助エントロピー源との混合、そして実行環境の整合性チェック(署名済みバイナリや限定的パーミッション)といった対策が有効です。cinnabarは小規模なPoC的実装として、こうした基本コンセプトをRustで試すための土台を提供します。
プロジェクトの構成
主要なファイルとディレクトリ:
- .github: dir
- .gitignore: file
- Cargo.toml: file
- LICENSE: file
- README.md: file
…他 1 ファイル
まとめ
シンプルかつ実用的なウェブカメラ由来のエントロピー生成ツール(Rust製)。
リポジトリ情報:
- 名前: cinnabar
- 説明: A webcam-based lava lamp entropy seeder in Rust (w/ SHA-256).
- スター数: 1
- 言語: Rust
- URL: https://github.com/n0uveau/cinnabar
- オーナー: n0uveau
- アバター: https://avatars.githubusercontent.com/u/81056435?v=4
READMEの抜粋:
cinnabar
A webcam-based lava lamp entropy seeder in Rust (w/ SHA-256).
| branch | ci |
|---|---|
| main | |
| dev | ![dev status](https://github… |