NIP-55は、Android appが別のsigner applicationに対して署名と暗号化操作を要求する方法を定義します。これはAndroid clientにとって、browser extensionやremote bunkerに代わるネイティブな選択肢になります。

仕組み

NIP-55は、Androidの2つの機構を使います。

  • Intents - 明示的なユーザー承認を伴うforeground flow向け
  • Content resolvers - ユーザーが永続的な権限を与えた後のbackground flow向け

通常の接続フローはget_public_keyから始まります。signerはユーザーpubkeyとsigner package nameの両方を返し、clientは両方をcacheすることが期待されます。background loopの中でget_public_keyを繰り返し呼ぶのは、仕様が明示的に警告している実装ミスです。

主要操作

  • get_public_key - ユーザーpubkeyとsigner package nameを取得する
  • sign_event - Nostrイベントへ署名する
  • nip04_encrypt/decrypt - NIP-04メッセージを暗号化または復号する
  • nip44_encrypt/decrypt - NIP-44メッセージを暗号化または復号する
  • decrypt_zap_event - zap関連イベントのpayloadを復号する

セキュリティとUXメモ

NIP-55は鍵をデバイス上に保持しますが、それでもAndroid app境界とsignerの権限制御に依存します。content resolver対応は、ユーザーがそのclientへ継続的な承認を与えた後なら、繰り返しintent promptを出すよりもはるかに滑らかなUXを実現します。

Android上のweb appにとっては、NIP-55はNIP-46より使い勝手が落ちます。browserベースのflowでは、ネイティブAndroid appのように直接background responseを受け取れないため、多くの実装はcallback URL、clipboard transfer、手動pasteへfallbackします。


Primary sources:

Mentioned in:

See also: