プライバシーモデル
Raiznetのプライバシーモデルはフィールド単位で動作します。各センサー読み取り(pH、EC、温度など)は、何がどこへ伝わるかを決める独立した可視性ポリシーを持ちます。
処分(Disposition)
Disposition は、ある宛先に対してフィールドがどう扱われるかを定義します。
| 値 | 意味 |
|---|---|
OMIT | フィールドはこの宛先に送られません。保存もされません。 |
PLAIN | フィールドは平文で伝わります。その宛先にアクセスできるすべてのピアから見えます。 |
ENCRYPTED | フィールドは送信前にデバイスのAES-256-GCM対称鍵で暗号化されます。blobは通常通り伝わりますが、鍵を持つ者だけが読めます。 |
ENCRYPTED 値はネットワークの集計や地図に決して入りません — 集計器は不透明なblobを無視します。
FieldPolicy
各センサーフィールドは FieldPolicy を持ちます。
message FieldPolicy {
Disposition default_disposition = 1;
map<string, Disposition> per_destination = 2;
}default_disposition は、明示的に列挙されていない任意の宛先に適用されます。per_destination は宛先キーをオーバーライドにマップします。
- サーバーpubkey(hex): その特定のサーバーに適用されます。
- ネットワークtopic(例
raiznet:public:arateki:v1): そのネットワークのすべてのピアに適用されます。
UIは3段階の粒度を提示し、すべて同じマップで支えられます。
| UIレベル | 設定 |
|---|---|
| すべて同じ | default_disposition 設定、マップ空 |
| 公開 vs ローカル | クラスでグループ化した2エントリ |
| 宛先ごと(上級) | サーバーpubkeyまたはtopicごとに1エントリ |
publish_to
デバイスの publish_to 設定は、どの宛先カテゴリがアクティブかを制御します。
| 値 | アクティブな宛先 |
|---|---|
LOCAL_ONLY | local_servers のエントリのみ |
PUBLIC | 公開ネットワークtopicのみ |
BOTH | すべての宛先 — それぞれ独自のFieldPolicy |
差別化要因としての local_servers
デバイスの local_servers リストは、「ローカル」なデータがそもそもサーバーに届くかどうかを決めます。
local_servers空 → プライベートフィールドはESP32のフラッシュに留まります。所有者は近くにいるときローカルHTTP、BLE、シリアル経由で直接アクセスします。local_servers設定済み → プライベートフィールドはそれら特定のサーバーに送られ、raiznet_private.dbに保存されます。各サーバーは独立で、他のサーバーとプライベートデータを複製しません。
ノードを動かさないユーザーは local_servers を設定する必要が決してありません。アプリはこれを明確に伝えます。ローカルデータはアプリが直接接続するまでデバイスに留まります。
分離によるセキュリティ
サーバー上の2つのデータベースは、クエリレベルではなく接続レベルで分離を強制します。
raiznet_public.db— 公開取り込みで供給されます(ピア複製は計画中)。公開エンドポイントはこのデータベースにのみアクセスできます。接続オブジェクトがそもそも利用できないため、出来の悪いクエリもプライベートデータを漏らせません。raiznet_private.db— ローカル取り込みのみで供給されます。ローカルエンドポイント(127.0.0.1)のみがアクセスできます。ノードから決して出ません。
常に公開されるもの
デバイスが publish_to: PUBLIC | BOTH の場合、次のメタデータはFieldPolicyにかかわらず常に公開です。
id(デバイスのpubkey)macowner_pubkeytype(sensor_mains / sensor_battery / gateway)location(所有者が選んだ解像度のH3セル)hardware(モデル、ファームウェアバージョン)
これらのメタデータは、ネットワークがデバイスの存在を知り、集計が機能するために必要です。
ポリシーの変更
FieldPolicy の変更は将来の読み取りにのみ影響します。すでに公開されたデータ(平文または暗号化)は、すでに受け取った者の手元に残ります — ピアがダウンロードしたものを「非公開化」する仕組みはありません。これは追記専用・複製データの帰結です。
暗号化フィールドと所有者のアプリ
ENCRYPTED の処分は特定のユースケースを解決します。所有者がLAN外から(トンネル不要で)自身のセンサーデータを追跡したいが、値を公開ネットワークに晒したくない場合です。
フロー:
- デバイスは公開宛先に送る前にフィールドを自身の対称鍵で暗号化します。
- 任意のピアが暗号化されたblobを受け取り保存します — 読むことはできません。
- 対称鍵を保持する所有者のアプリが、blobをローカルで復号します。
これは、所有者が任意の公開ゲートウェイやピアノードを使ってデータを取得でき、平文値をそれに委ねる必要がないことを意味します。