Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nostr でパスキー認証 (NIP-07, nostr-keyx, YubiKey)
Search
S. Ota
March 10, 2023
Technology
0
660
Nostr でパスキー認証 (NIP-07, nostr-keyx, YubiKey)
Nostr でパスキー認証 (NIP-07, nostr-keyx, YubiKey)
S. Ota
Nostr勉強会 #1
2023-03-10
S. Ota
March 10, 2023
Tweet
Share
More Decks by S. Ota
See All by S. Ota
# MLGym: A New Framework and Benchmark for Advancing AI Research Agents
s_ota
0
27
Ask-LLM論文紹介: How to Train Data-Efficient LLMs
s_ota
0
820
AI Alignment: A Comprehensive Survey
s_ota
0
250
Emergent Abilities of Large Language Models
s_ota
0
75
Other Decks in Technology
See All in Technology
ライフステージの変化を乗り越える 探索型のキャリア選択
tenshoku_draft
2
370
最近のラズピッピいじり / 20250308-rpijam-13th-birthday
akkiesoft
0
130
困難を「一般解」で解く
fujiwara3
9
2.9k
[OpsJAWS Meetup33 AIOps] Amazon Bedrockガードレールで守る安全なAI運用
akiratameto
1
140
AWSではじめる Web APIテスト実践ガイド / A practical guide to testing Web APIs on AWS
yokawasa
8
830
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
19k
“常に進化する”開発現場へ! SHIFTが語るアジャイルQAの未来/20250306 Yuma Murase
shift_evolve
0
160
Ruby on Railsで持続可能な開発を行うために取り組んでいること
am1157154
3
190
データモデルYANGの処理系を再発明した話
tjmtrhs
0
480
開発者体験を定量的に把握する手法と活用事例
ham0215
0
150
DeepSeekとは?何がいいの? - Databricksと学ぶDeepSeek! 〜これからのLLMに備えよ!〜
taka_aki
2
210
目標と時間軸 〜ベイビーステップでケイパビリティを高めよう〜
kakehashi
PRO
8
1.1k
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Thoughts on Productivity
jonyablonski
69
4.5k
What's in a price? How to price your products and services
michaelherold
244
12k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
GraphQLとの向き合い方2022年版
quramy
44
14k
A designer walks into a library…
pauljervisheath
205
24k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
450
Practical Orchestrator
shlominoach
186
10k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
The Cult of Friendly URLs
andyhume
78
6.2k
Transcript
Nostr でパスキー認証 (NIP-07, nostr-keyx, YubiKey) S. Ota https://iris.to/s_ota Nostr勉強会 #1
2023-03-10 1
Nostr: 気軽に参加出来る実験場 プロトコル策定 (NIP) プロトコル実装 秘密鍵を守るためのブラウザ拡張機能 (NIP-07) nos2x, Alby, Nostore,
nostr-keyx, etc. 拡張サービス開発 リレーサーバ運用 ドキュメント整備 コミュニティ運営 (この勉強会) 2
背景 パスキー認証 3
最近パスキー認証が話題 Apple, Google, Microsoft がサポー トを表明 Yahoo! JAPAN (対応済み) KDDI
(対応済み) NTTドコモ(2023年3月下旬から) https://www.itmedia.co.jp/news/ar ticles/2301/23/news086.html 4
パスキーとは 秘密鍵と公開鍵 Nostr と同じ! https://developer.apple.com/jp/passkeys/ https://wired.jp/article/how-to-use-passkeys-google-chrome-android/ 5
パスキー認証 「パスワードを脳に記憶」から「秘密鍵を物理的に所持」へ https://www.yubion.com/post/パスキー(passkeys)ってなんだろう?(後編) 6
パスキー認証 秘密鍵で署名してサーバに送り、サーバは公開鍵で署名を検証 ユーザが秘密鍵を直接意識せずに利用出来るよう工夫 生体認証 (指紋, 顔, etc.) セキュリティキーやスマートフォンを物理的に所持 Nostr 秘密鍵で署名してリレーに送り、受信者は公開鍵で署名を検証
現状ではパスキー認証のような工夫はなく、秘密鍵を直接取り扱う必要がある nostr-keyx NIP-07 を実装した Chrome 拡張機能 Nostr においてパスキー認証(に近いもの)を実現 7
nostr-keyx Nostr においてパスキー認証(に近いもの)を実現 8
Nostr の現状: ワイルドすぎる実験場 秘密鍵がアイデンティティの源泉 誰でも自由に秘密鍵を作成可能 → 権威に頼らない, 公開鍵マイニング, SPAM 秘密鍵を忘れてしまった
→ アカウント消失, 復活不可 秘密鍵を流出してしまった → なりすまし, 過去のDM全バレ しかも罠がたくさんある 「このサービスを利用するには秘密鍵を入力してください...」がカジュアル 秘密鍵を平文でディスクに保存 秘密鍵( nsec1... )と公開鍵( npub1... )が似ていて間違いやすい 秘密鍵の存在に気が付かずブラウザのキャッシュをうっかり消してしまう 実は初回アクセス時に自動生成されている 秘密鍵を守るためのプロトコルがいくつか提案されている NIP-07, NIP-26, NIP-46 9
NIP-07 の仕組み NIP-07: Web ブラウザの拡張機能 Nostr クライアントに秘密鍵を渡さずに署 名/暗号化/復号化を行う仕組み nostr-keyx Chrome
用 NIP-07 実装 OS標準のキーチェーンに秘密鍵を保存(暗 号化)し、OSログインパスワードで復号化 YubiKey を利用してパスキー認証を実現 YubiKey を所持 + PIN で署名可能に https://github.com/nostr-protocol/nips/blob/master/07.md 10
セキュリティキー (YubiKey) 多機能 パスキー認証(FIDO2) ワンタイムパスワード(OTP) Google Authenticator 相当 OpenPGP (今回使った機能)
gpg コマンドで利用可能 秘密鍵をYubiKey内に保存 署名/検証/暗号化/復号化 YubiKey 5 シリーズ (7600円〜) https://www.yubico.com/products/yubikey- 5-overview/ 11
YubiKey で Nostr 秘密鍵を守る 方法1 Nostr 秘密鍵を YubiKey 内に保存 YubiKey
内で署名を計算 残念ながら現状では出来ない(自分が調べた限りでは) YubiKey が secp256k1.schnorr.sign を未実装 方法2 YubiKey 内に OpenPGP の秘密鍵/公開鍵を作成 (RSA or ECC) OpenPGP の公開鍵 で Nostr 秘密鍵を暗号化してディスクに保存 署名を計算するタイミングで OpenPGP の秘密鍵で Nostr 秘密鍵を復号化 Nostr 秘密鍵で署名を計算 結果: YubiKey を PC に挿して PIN を入力(初回のみ)すると署名出来る リスク: 短時間だが Nostr 秘密鍵が PC のメモリ上に平文で存在 12
NIP-07 実装比較 拡張機能 nos2x Alby Nostore nostr-keyx nostr-keyx+YubiKey 対応ブラウザ Chrome(*1)
Chrome,Firefox,Safari Safari(iOS/macOS) Chrome Chrome 秘密鍵の保存場所 ローカル クラウド ローカル OSキーチェーン ローカル(*2) 秘密鍵の暗号化 共通鍵暗号(AES) (*3) OS管理 YubiKey公開鍵暗号 秘密鍵の復号化 独自パスワード (*3) OSパスワード YubiKey所持+PIN インストール 公式ストア 公式ストア 公式ストア GitHub GitHub *1: nos2x-fox という Firefox 版もある *2: YubiKey の公開鍵で Nostr の秘密鍵を暗号化してローカルディスクに保存 *3: 次バージョンで Apple Keychain に対応予定 NIP-07 実装一覧 https://github.com/aljazceru/awesome-nostr#browser-extensions 13
まとめ: nostr-keyx 秘密鍵を守る NIP-07 Chrome 拡張機能 OS標準のキーチェーンで秘密鍵を暗号化 YubiKey で秘密鍵を暗号化 パスキー認証(に近いもの)を実現
https://github.com/susumuota/nostr-keyx 是非試してみてください。コメントや もよろしくお願いします! 謝辞: Segment(gpsnmeajp)さん、ありがとう ございます! https://iris.to/s_ota 14
付録 発表時間の都合で省いたスライド 15
秘密鍵を守る必要性 秘密鍵がアイデンティティ 誰でも自由に秘密鍵を作成可能 → 権威に頼らない, SPAM 秘密鍵を忘れてしまった → 消失, 復活不可
秘密鍵を流出してしまった → なりすまし, 過去のDM全バレ 秘密鍵流出を Twitter で言うと... IDとパスワードと2要素認証が流出し、復旧用のメールも乗っ取られた 秘密鍵の管理はユーザに任されている 秘密鍵を長期間安全に保持出来るかが重要 秘密鍵を平文のままディスクに保存していると流出のリスクが高い PC紛失/廃棄, バックアップディスク, クラウドストレージ, etc. 16
Nostr の秘密鍵/公開鍵とは 秘密鍵: 32バイトの疑似乱数 公開鍵: 秘密鍵から楕円関数を使って計算 (32バイト) 秘密鍵から公開鍵の計算は容易だが公開鍵から秘密鍵の計算は非常に困難 離散対数問題 export
function generatePrivateKey(): string { return secp256k1.utils.bytesToHex(secp256k1.utils.randomPrivateKey()) } export function getPublicKey(privateKey: string): string { return secp256k1.utils.bytesToHex(secp256k1.schnorr.getPublicKey(privateKey)) } アルゴリズムの詳細は BIP-340 を参照 https://bips.xyz/340 https://github.com/nbd-wtf/nostr-tools/blob/master/keys.ts 17
Nostr における秘密鍵の役割 署名 全ての Nostr イベントに署名を付け、改ざんされていないか検証可能に 楕円曲線DSA(ECDSA), secp256k1, Schnorr 署名
NIP-01, BIP-340 参照 暗号化/復号化 2ユーザ間でダイレクトメッセージをやり取りする ディフィー・ヘルマン鍵共有(DH), NIP-04 参照 NIP-04 はそれほど安全ではないので注意 ( Security Warning 参照) https://www.jipdec.or.jp/project/research/why-e-signature/public-key-cryptography.html https://github.com/nostr-protocol/nips/blob/master/01.md https://github.com/nostr-protocol/nips/blob/master/04.md https://bips.xyz/340 18
NIP-07 実装一覧 https://github.com/aljazceru/awesome-nostr#browser-extensions 19