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
540
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
Ask-LLM論文紹介: How to Train Data-Efficient LLMs
s_ota
0
570
AI Alignment: A Comprehensive Survey
s_ota
0
220
Emergent Abilities of Large Language Models
s_ota
0
40
Other Decks in Technology
See All in Technology
ラブグラフ紹介資料 〜プロダクト解体新書〜 / Lovegraph Product Deck
lovegraph
0
14k
普通の Web エンジニアのための様相論理入門 #yapcjapan / YAPC Hakodate 2024
ytaka23
7
1.6k
Webセキュリティのあるきかた
akiym
32
11k
Amazon CloudWatchで小さく始めるWebサービスのオブザーバビリティ / How to start Observability for Web Sevices with Amazon CloudWatch
sms_tech
3
100
TypeScript x Raycast x AIで変える開発者体験
nagauta
1
280
シェルとPerlの使い分け、 そういった思考の道具は、どこから来て、どこへゆくのか?v1.1.0
fmlorg
0
530
塩野義製薬様のAWS統合管理戦略:Organizations設計と運用の具体例
tkikuchi
0
150
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
48k
Unlearn Modularity
lemiorhan
6
160
Efficient zero-copy networking using io_uring
ennael
PRO
0
400
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
2
240
怖くないオフライン機能開発 〜基本的な技術で実現する現場向けオフライン機能 / Developing offline functions without fear ~ Offline functions for the field realized with basic technology
kaminashi
1
110
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
325
23k
Adopting Sorbet at Scale
ufuk
73
9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
11
1.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Fireside Chat
paigeccino
32
3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
167
49k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
41
9.2k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
For a Future-Friendly Web
brad_frost
174
9.3k
Designing Experiences People Love
moore
138
23k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
22k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
39
2.1k
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