NIP-55: Android Signer Application
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:
- Newsletter #1: Releases
- Newsletter #2: News
- Newsletter #2: NIP Updates
- Newsletter #3: December Recap
- Newsletter #4: NIP Updates
- Newsletter #11: NIP Deep Dive
- Newsletter #13: Samizdat v1.0.0-alpha
See also: