
レジリエントデータ向けプロトコル内省型チャンクアダプター
Protocol-Introspecting Chunk Adapter for Resilient Data
独学で学ぶ人、型破りな人、そして「自分の分野に留まれ」と言われたことのあるすべての人へ。作り続け、探求し続けよう。
PICARDはデータを暗号化し、チャンクに分割し、設定した任意のプロトコルエンドポイント(DNS TXTレコード、ソーシャルメディアAPI、MQTTブローカー、S3バケット、Bluetoothアドバタイズメント、あるいはこれらすべてを同時に)にチャンクを分散させます。取得すれば再構築されます。マルチアダプター分散により、単一のエンドポイントが何かを再構築するのに十分な暗号文を保持することはありません。中央サーバーも、毎月のストレージ料金も不要です。通常のファイルシステムとしてマウントできます。
効率的ではない。プロトコル非依存。
[!IMPORTANT] 研究プロジェクト。 PICARDは動作するコンピュータサイエンスの実験であり、本番用のストレージシステムではありません。進める前に研究および法的通知をお読みください。
[!WARNING] 実験的: 自己責任で実行してください。 これらのアダプターはハードウェアの脆弱性をストレージプリミティブとして使用します。結果はハードウェア固有であり、マシン間で非決定的であり、DRAMビットフリップの場合は不可逆です。所有および管理するハードウェアでのみ使用してください。共有またはクラウドインフラストラクチャに対して実行することは、ほとんどの法域で不正アクセスとなります。
PICARDは現在、DRAMビット状態とCPUキャッシュ常駐にチャンクを保存できます。これは完全にオペレーティングシステムの視界の外です。
| アダプター | 機能 |
|---|---|
rowhammer | 隣接するDRAM行をハンマーで叩き、電荷漏れが対象ビットを反転させるまで書き込むことでビットを書き込みます。読み取りは被害行を直接調べることによって行います。ローカル、一時的、非ECC DDR3/4。 |
halfdouble | 2ホップ変種。近接/遠方アグレッサー比がDDR4 Target Row Refresh (TRR)をバイパスします。従来のrowhammerがもはや影響を与えないハードウェアに到達します。 |
throwhammer | RDMA経由でリモートホストのDRAMをハンマーで叩きます。リモートCPUはまったく関与しません。NICがDRAMに直接DMA読み取りを行います。RDMAファブリックが必要です。 |
cpu-cache | Flush+Reload経由でCPU L3 SRAMにビットを保存します。ページ分離スロット全体にわたるN_REPS=5の多数決エンコーディング。i7-12700KFでBERは5e-4未満。同一ホスト上のクロスプロセス、ページ重複排除が有効な場合はクロスVM。 |
4つすべてが一時的です(電源サイクルで消去)。ハードウェア要件と脅威モデルについてはdocs/adapters.mdを参照してください。
plaintext
→ AES-256-GCM encrypt (Argon2id key, per-block salt + nonce)
→ PCHK chunk (protocol-sized pieces)
→ scatter across adapters (DNS, Redis, Reddit, S3, MQTT, …)
→ sealed envelope (HKDF sub-key, correlation tag per adapter)
retrieve
← fan out to all adapters
← collect, verify, assemble
← decrypt
各ブロックは、それぞれ独自のランダムなソルトとノンスで個別に暗号化されます。チャンクはラウンドロビン方式またはRAIDプロファイルによって分散配置されます。どのアダプターも平文を見ることはなく、どのアダプターも何かを再構築するのに十分な暗号文を見ることはありません。
ローカルインデックス(AES-256-GCMで暗号化されたSQLiteデータベース)がパスをチャンクの位置にマッピングします。パスフレーズを失えば、データも失います。
それは涼しいベルリンの朝でした。私はパティオから、赤レンガで縁取られた質素な漆喰の壁をじっと見つめていました。羽音の残像が目を捉え、小さな鳥が屋根の線近くの排水穴へと向きを変えて消えていきました。別の穴からもう一つの頭が現れ、さえずりました。5つの排水穴、5つの巣。雨どいは水を流すためのものであり、家族を住まわせるためのものではありませんでしたが、それでも鳥たちは避難所と隠れ場所、そして容易なアクセスを見つけていました。私はこれまで気づいたことがありませんでした。なぜなら、わざわざ見ようとしなかったからです。
私たちのデジタルインフラは、本来保存するために設計された以上のものを運んでいます。DNSのTXTレコードは仕様の範囲内で任意のテキストを受け付けます。MQTTの保持メッセージはブローカー上にデータを永続化します。ICMPエコーパケットはペイロードフィールドを持っています。ソーシャルメディアのAPIは自由形式の構造化テキストを受け付けます。これらのプロトコルはそれぞれ、メタデータ、検出、または診断を目的としたフィールドを定義しています。それらのフィールドは、設計者が意図した用途と同様に、バイト列を運ぶこともできるのです。
picard web はブラウザダッシュボードを http://localhost:8471 で開きます。
カテゴリ別のストレージ領域、アダプターの状態、暗号化の詳細を一目で確認できます。
カテゴリ別に閲覧可能な259個のアダプター。必須パラメーターとワンクリック追加機能を備えています。
pip install picard-store
export PICARD_PASSPHRASE="your-passphrase" # or picard will prompt
picard init # create picard.toml
# edit picard.toml to add your adapters, then:
picard put myfile.txt --as /docs/myfile.txt
picard get /docs/myfile.txt -o recovered.txt
picard ls
picard tree /
出典:
git clone https://github.com/neitzert/picard
cd picard
pip install -e ".[dev]"
python -m pytest --tb=short -q
# picard.toml
[general]
block_size = 65536
[[adapters]]
name = "dns-primary"
type = "dns"
enabled = true
params = { nameserver = "10.10.10.10", domain = "chunks.example.com" }
[[adapters]]
name = "s3-backup"
type = "s3"
enabled = true
tor_proxy = true # route through Tor SOCKS5
params = { bucket = "picard-chunks", prefix = "data/" }
[[adapters]]
name = "reddit-stash"
type = "reddit"
enabled = true
browser_mode = "headed" # api | headless | headed
params = { subreddit = "u_myuser" }
[[raid]]
level = "raid5"
adapters = ["dns-primary", "s3-backup", "filesystem"]
[scatter.paranoid]
raid_level = "raid10"
min_adapters = 4
スキャッタープロファイル: quiet、resilient、speed、paranoid
| コマンド | 説明 |
|---|---|
picard put <file> --as <path> | ファイルを保存 |
picard get <path> -o <file> | ファイルを取得 |
picard ls [path] | ファイルを一覧表示 |
picard rm <path> | 削除 |
picard cp / mv | コピー / 名前変更 |
picard tree / | ディレクトリツリー |
picard verify <path> | チャンク整合性チェック |
| コマンド | 説明 |
|---|---|
picard mkdir / ln / head / tail / touch / log / stat / find | 標準的なファイルシステム操作 |
picard fsck | 整合性チェックと修復 |
picard mount <mountpoint> | FUSEマウント |
picard webdav | WebDAVサーバー(ポート8471) |
| コマンド | 説明 |
|---|---|
picard web | Webダッシュボード(ダーク/ライト、ドラッグアンドドロップ) |
picard scatter-report | ストレージサーフェスマップ |
picard adapters / profiles | アダプターとスキャッタープロファイルの一覧表示 |
picard recover | ジャーナルクラッシュリカバリ |
picard tor-check / tor-serve / tor-peer / tor-mount | Tor操作 |
picard init | デフォルトのpicard.tomlを作成 |
ほとんどのコマンドは機械可読な出力のための--jsonを受け付けます。
picard mountはFUSE経由で仮想ファイルシステムを公開します。標準的なシェルツールが動作します: cp、ls、mv、rm、mkdir、cat、chmod、ln -s、dfはすべて期待通りに動作します。
プラットフォーム要件:
| プラットフォーム | 要件 |
|---|---|
| Linux | sudo apt install libfuse-dev(またはディストリビューションの同等パッケージ) |
| macOS | brew install --cask macfuse |
| Windows | WinFSP、またはExplorerの「ネットワークドライブの割り当て」でpicard webdavを使用 |
既知の制限: ハードリンクなし、ファイルロック(flock/fcntl)なし。書き込みはファイル全体をRAMにバッファリングし、クローズ時にフラッシュします。マウント内でSQLiteのWALモードやGitオブジェクトストアを直接実行しないでください。
picard webdavはドライバー不要の代替手段です。起動して、Explorer、Finder、またはNautilusをhttp://localhost:8471に向け、ファイルをドラッグインしてください。
PICARDはClaudeやその他のMCP互換エージェント向けに、ストレージツールをMCPサーバーとして公開します:
{
"mcpServers": {
"picard-store": {
"command": "picard-mcp",
"env": { "PICARD_PASSPHRASE": "your-passphrase" }
}
}
}
利用可能なツールとセットアップの詳細については docs/mcp.md を参照してください。
認可要件に応じて4つのティアに分かれた264個のアダプターがあります。完全なリスト: docs/adapters.md。
サードパーティの認可は不要です。これらが主要なユースケースです。
| カテゴリ | 例 |
|---|---|
| ローカル / データベース | Filesystem、Redis、PostgreSQL、S3、SQLite、etcd、CouchDB、Cassandra |
| セルフホストサービス | WebDAV、Matrix(自身のホームサーバー)、MQTT(自身のブローカー)、XMPP、IRC |
| メール / カレンダー | SMTP/IMAP、CalDAV、CardDAV |
| P2P / 分散型 | IPFS、BitTorrent DHT、Nostr、Ethereum(自身のウォレット)、Tor 隠しサービス |
| ステガノグラフィ | 画像 LSB、音声 WAV LSB、EXIF、XLSX 隠しセル、ZIP コメント |
該当プラットフォームで有効なアカウントと API 認可が必要です。各アダプターのソースにはプラットフォーム固有の利用規約に関する通知が含まれています。