Herkos

セキュリティポリシー

Herkos は秘密鍵と暗号化されたメッセージを扱うため、セキュリティに関する報告を 真剣に受け止めています。問題は遅く知るより、早く知りたいと考えています。

脆弱性の報告

セキュリティ上の問題について、公開の issue を立てないでください。

メールで security@herkos.email まで非公開で報告してください。

含めていただくと役立つもの:問題の内容、再現方法、テストしたプラットフォームと バージョン、攻撃者が何を達成できるか。概念実証(PoC)があると大いに助かります。

報告に、ご自身の nsec、秘密鍵、bunker のシークレットを決して含めないでください。

報告には数日以内に受領の返事をすることを目標としています。Herkos は小さな プロジェクトなので、公開する前に修正のための妥当な時間をいただけるようお願いします。 ご希望がない限り、アドバイザリーにあなたのお名前を喜んで記載します。

対象範囲

Herkos アプリケーションそのもの:鍵の取り扱いと保存、メッセージの暗号化と 復号(local_packages/nostr_mail にある NIP-59 の送信者チェックと Bcc の分離を 含む)、アプリロック、リレーおよびブリッジとの通信、添付ファイルの扱い、 ビルドとリリースのパイプライン。Herkos Drive については、そのプロトコルパッケージ (packages/herkos_drive_protocol)と、そのリンクを開くページ(herkos.app/f/)も 含みます。後述の専用の節を参照してください。

対象範囲外

既知の制限(率直に)

これらは設計上のトレードオフであり、脆弱性ではありません。誰かが痛い目に遭って 発見するより、ここに書いておきたいと考えています。

Herkos Local Relay:守るものと守らないもの

Herkos Local Relay は、あなたのアプリのイベントを、非公開のもの(下書き、 非公開の一覧、あなたが受け取る封筒)も含めて、あなたの端末に保存します。 ここでは、それを何が守り、限界がどこにあるかを、プラットフォームごとに 説明します。リレーのセキュリティ上の問題も、ほかの問題と同じ方法で報告して ください(上記参照)。

データベースは全体が暗号化されます。ジャーナルも含みます(SQLite3 Multiple Ciphers、AEGIS-256)。鍵は端末上で作られる 32 バイトのランダムな値で、 システムの安全な保存領域に保管されます。Android では Keystore、Windows では DPAPI、Linux ではキーリング(libsecret)です。リレーは自動で起動する必要が あるため、鍵にはあなたのパスワードを使いません。鍵がなければリレーは起動せず、 そのことを表示します。暗号化されていないデータベースを開いたり作ったりする ことは決してなく、開けないデータベースを削除することも決してありません。

もし… Android Windows Linux
誰かがデータベースファイルをコピーした(バックアップ、同期フォルダー、ディスクイメージ) 保護される 保護される 保護される
電源が切れた状態で端末やディスクが盗まれた 保護される:鍵は Keystore にある 保護される。ただし Windows のサインインパスワードを知られている場合を除く:DPAPI はそのパスワードで鍵を保護する 保護される。ただしキーリングのパスワード(ほぼ常にセッションのパスワード)を知られている場合を除く
同じ端末の別のユーザーアカウント 保護される 保護される:DPAPI はユーザーごと 保護される:キーリングはユーザーごと
あなたのユーザーとして動く別のアプリやプログラム 保護される:Android は各アプリを分離し、Keystore は鍵をリレーにだけ渡す 保護されない:DPAPI はアプリごとではなくユーザーごとに暗号化する。あなたとして動くプログラムは、リレーと同じように鍵を要求できる 保護されない:セッションのキーリングはアプリどうしを分離しない
root 化されたスマートフォン、またはアプリとしてコードを実行するツール 保護されない — —
ロック解除された端末を誰かが手にしている リレーの PIN か指紋(設定している場合)だけ 同じ 同じ
動作中のリレーのメモリーを誰かが読む 保護されない 保護されない 保護されない

デスクトップでは、DPAPI とキーリングの限界はどのプログラムとも同じです。 ほかのユーザーやディスクを持ち去る人からは守りますが、すでにあなたとして 動いている悪意のあるプログラムからは守りません。その場合が心配なら、守って くれるのはシステムディスクの暗号化(BitLocker、LUKS)と、信頼できない プログラムを実行しないことです。キーリングのない Linux(Secret Service が ない環境)では、リレーは起動せず、その理由を説明します。鍵を平文で保管する ことは決してありません。

端末そのものの上で、誰が入れるか。 リレーは 127.0.0.1 だけで待ち受けますが、 端末上のどのアプリも、ブラウザーで開いたウェブページも、そのアドレスに 届きます。そのため:

ここで守らないもの:

ローカルネットワーク(オンにした場合。既定ではオフです):

ここで守らないもの:同じネットワークにいる人は、端末に開いたポートがあることと、 そこを通る通信量はわかりますが、その中身はわかりません。また、端末にパブリック アドレスがある場合(間にルーターがない場合)、そのポートはインターネットから 見えますが、それでもあなたの一覧にある鍵を求めます。

バックアップ。 暗号化されたバックアップにはパスワードがあります(scrypt と XChaCha20-Poly1305)。パスワードがなければ、私たちを含め誰も開けません。 JSONL の書き出しは暗号化されず、非公開のイベントが平文で含まれます。アプリは そのことを警告します。

ロック(PIN と、指紋または Windows Hello)は、アプリを開くとき、30 秒離れた あと、ペアリングを承認するときに求められます。これは Mail と同じく利便性のための 障壁で、何も暗号化しません。Android では、PIN を設定するとスクリーンショットが 撮れなくなり、最近使ったアプリにサムネイルも表示されません。また Android 12 以降は、使用中のリレーのウィンドウの上にほかのアプリのウィンドウが重なることは できません。

Herkos Drive:守るものと守らないもの

Herkos Drive は、あなたのファイルを Blossom サーバーに、ファイルとフォルダーの一覧を Nostr リレーに保存します。どちらも端末上で暗号化されます。 ここでは、それを何が守り、限界がどこにあるかを説明します。 詳細は packages/herkos_drive_protocol/ にある spec-drive.md と脅威モデル amenazas-drive.md にあります。各リレーとサーバーに何が見えるかはプライバシーポリシーにあります。 Drive のセキュリティ上の問題も、ほかの問題と同じ方法で報告してください(上記参照)。

リレーとサーバーにできないこと:

守らないもの:

どのように検証しているか。 脅威モデルに基づく 2 回の内部レビュー(2026年11月2日)とその修正、各イベントと各ブロックに何が表れるかのテスト、外部から来るものを読むすべての処理(イベント、封印、マニフェスト、リンク、バックアップ)のファジング。 外部監査はまだありません。公開ベータの前に 1 回予定しており、その報告書は全文を公開します。Drive はまだ開発中です。

サポート対象のバージョン

セキュリティ修正は、最新のリリース版に適用されます。プロジェクトの規模から、 古いバージョンは保守していません——報告の前に更新してください。