仕組み
mynachat は、マイナポータルにあるあなた自身のデータで「参加条件を満たしている」ことだけを証明します。記録そのものは、患者会にも運営にも渡りません。その仕組みを順番に説明します。
検証者に見えるもの
同じ応答でも、あなたの画面と検証者の手元ではこれだけ違います。例は2027年予定の傷病名データですが、処方薬でも開示されるのは薬の名前1つだけです。
POST /api/my/healthinfo/get-six-medical-info HTTP/1.1 Host: myna.go.jp Cookie: SESSION=9f2c1e7a4bd03e58a1c6 {"commonHeader":{"screenId":"hm_mc_________"},"reqBody":{"cipCategory":"SBM"}} HTTP/1.1 200 OK {"resultCode":"0000","resBody":{"diseaseList":[ {"name":"潰瘍性大腸炎","icd10":"K51.9", "startDate":"2024-05-13","institution":"みなと総合病院"}, {"name":"うつ病","icd10":"F32.9", "startDate":"2025-11-02","institution":"さくら心療内科"}, {"name":"本態性高血圧症","icd10":"I10", "startDate":"2023-02-20","institution":"こうち内科"}]}}
どこに何が残るか
| 場所 | 残るもの |
|---|---|
| あなたの端末 | マイナポータルの応答の全体(拡張機能のメモリ内、ブラウザを閉じると消えます)、パスキーの秘密鍵。 |
| 患者会の検証者 | 開示された部分(パスと薬の名前1つ)と、監査用の記録。 |
| mynachat のサーバー | ユーザー名、World ID の番号、パスキーの公開鍵、参加グループと表示名、判定の短い記録(例: 「ビラノアの処方」)、投稿。 |
| World ID | mynachat 向けの証明が作られたこと。どの病気のグループに参加したかは伝わりません。 |
監査レポート
証明ごとに監査レポートがあります。あなたの拡張機能が見た応答と、検証者が受け取ったバイトを並べて表示し、「Cookie が開示されていない」「開示していないバイトは検証者側でゼロ」「証明書は myna.go.jp のもの」などを一つずつ確認できます。
使っている技術
- TLSNotary(tlsn v0.1.0-alpha.15): 拡張機能の WASM 証明者と Rust の検証者
- World ID 4.0(IDKit): 1人1アカウントと秘密投票
- パスキー(WebAuthn): パスワードのないログイン
- ICD-10(2013年版): e-Stat の日本語分類と CMS の英語名
- Next.js、SQLite、Fly.io
できないこと、まだ解決していないことも正直に書いています。
制限事項を読む