提案中の NIP-82(未割り当て): ソフトウェアアプリケーションカタログ
このページで説明するソフトウェアアプリケーションカタログは、レビュー中の提案です。採用された NIP ではありません。提案は nostr-protocol/nips プルリクエスト #2526 にあり、そのタイトルは「Zapstore spec」です。このページの最終更新時点で、このプルリクエストはオープンのまま未マージであり、公式 NIPs の master ブランチには 82.md ファイルが存在しません。「NIP-82」は提案が自ら名乗っている名称であり、公式の NIP 番号ではありません。event kind、tag、動作は、マージされるまでに変更される可能性があります。このプルリクエストは、以前の プルリクエスト #1336 を置き換えるものだと述べています。
提案されている event kind
このドラフトは、ソフトウェアカタログを複数の種類の event に分けています。
- Kind 32267、アプリケーション: アプリを説明する addressable event。
- Kind 30063、リリース: そのアプリの 1 つのバージョンを表す addressable event。そのバージョンのアセットを参照します。
- Kind 3063、アセット: ダウンロード可能な 1 つのファイルを説明する通常の event。
- Kind 30267、キュレーション: キュレーターがアプリをまとめたり推薦したりするために公開する addressable なリスト。
- Kind 30509、署名証明書リンク: APK 署名証明書などの X.509 証明書を、ソフトウェアを公開する Nostr 鍵に結び付ける addressable event。これにより、クライアントはその公開者がどの証明書を管理しているかを把握できます。その
dtag は、DER エンコードされた証明書の SHA-256 ハッシュです。証明書の秘密鍵で作成された署名と、Unix タイムスタンプで表された有効期限を含み、オプションでリンクを失効済みとしてマークすることもできます。 - Kind 10067、relay リスト: カタログの event が見つかる relay を並べた replaceable なリスト。
プラットフォーム、完全性、有効性
アセット event にはプラットフォームとランタイムの識別子が含まれるため、クライアントはデバイスに合うファイルだけを表示できます。各アセットにはファイルハッシュも含まれます。クライアントはこれを使って、ダウンロードしたバイト列が公開者の署名した内容と一致するかを確認できます。Android パッケージについては、ドラフトに署名証明書のフィンガープリントが含まれています。インストーラーは、アップデートを提示する前に、これをインストール済みアプリの証明書と照合できます。Android パッケージをインストールする前に、クライアントは証明書ハッシュを使って kind 30509 event を取得すべきです(SHOULD)。さらに、その証明書署名を APK に埋め込まれた証明書およびアセットの公開者と照らし合わせて検証し、証明が期限切れになっていないこと、失効していないことを確認すべきです。
信頼の限界
有効な署名が示すのは、特定の鍵が event を公開したということだけです。その鍵が本物の開発者のものであることも、ソフトウェアが安全であることも、キュレーターのリストが信頼できることも証明しません。この提案は、任意の公開者について何の保証も与えていません。どの公開者鍵とキュレーター鍵を信頼するかは、クライアントとユーザーが判断しなければなりません。このページは、いかなるセキュリティ監査も、本番環境での相互運用性も主張するものではありません。
NIP-89 との関係
NIP-89 のハンドラー event は、どのアプリケーションがどの event kind を処理できるかを告知します。一方、この提案はソフトウェアの成果物とその入手先を説明するものであり、両者はそれぞれ別の関心事を扱っています。
一次資料:
- nostr-protocol/nips PR #2526: Zapstore 仕様(オープン、未マージ。PR #1336 を置き換え)
言及されている記事:
関連項目: