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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
S. Ota
March 10, 2023
Technology
0
830
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
Cognitive Behaviors that Enable Self-Improving Reasoners, or, Four Habits of Highly Effective STaRs
s_ota
0
41
FinePersonas を用いた日本語指示データの合成
s_ota
0
40
MLGym: A New Framework and Benchmark for Advancing AI Research Agents
s_ota
0
99
Ask-LLM論文紹介: How to Train Data-Efficient LLMs
s_ota
0
1.1k
AI Alignment: A Comprehensive Survey
s_ota
0
280
Emergent Abilities of Large Language Models
s_ota
0
120
Collective Intelligence for Deep Learning: A Survey of Recent Developments
s_ota
0
16
Reinforcement Learning: An Introduction second edition, Chapter 16 Applications and Case Studies
s_ota
0
18
Planning to Explore via Self-Supervised World Models
s_ota
0
18
Other Decks in Technology
See All in Technology
Claude in Chromeで始める自律的フロントエンド開発
diggymo
1
270
20260114_データ横丁 新年LT大会:2026年の抱負
taromatsui_cccmkhd
0
380
Databricks Free Edition講座 データエンジニアリング編
taka_aki
0
2.8k
ReproでのicebergのStreaming Writeの検証と実運用にむけた取り組み
joker1007
0
390
AIAgentを駆使してSREが貢献する開発体験の向上
yoshiiryo1
4
1.1k
かわいい身体と声を持つ そういうものに私はなりたい
yoshimura_datam
0
350
これまでのネットワーク運用を変えるかもしれないアプデをおさらい
hatahata021
4
270
それぞれのペースでやっていく Bet AI / Bet AI at Your Own Pace
yuyatakeyama
1
510
re:Inventで出たインフラエンジニアが嬉しかったアップデート
nagisa53
4
190
20260120 Amazon VPC のパブリックサブネットを無くしたい!
masaruogura
2
160
なぜCREを8年間続けているのか / cre-camp-4-2026-01-21
missasan
0
1.2k
AI Agent Agentic Workflow の可観測性 / Observability of AI Agent Agentic Workflow
yuzujoe
6
2.3k
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
200
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
How GitHub (no longer) Works
holman
316
140k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Speed Design
sergeychernyshev
33
1.5k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
230
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
A designer walks into a library…
pauljervisheath
210
24k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.5k
Building Applications with DynamoDB
mza
96
6.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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