Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
610
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
690
AI Alignment: A Comprehensive Survey
s_ota
0
230
Emergent Abilities of Large Language Models
s_ota
0
50
Other Decks in Technology
See All in Technology
MySQL 8.0 から PostgreSQL 16 への移行と RLS 導入までの道のりと学び
baseballyama
0
1k
振る舞い駆動開発(BDD)における、テスト自動化の前に大切にしていること #stac2024 / BDD formulation
nihonbuson
3
980
TimeTreeが経た3つの転換点 ー プロダクト成長過程でその時、その瞬間、何を考えてたか
ysmtysts
1
3.6k
知らない景色を見に行こう チャンスを掴んだら道が開けたマネジメントの旅 / Into the unknown~My management journey~
kakehashi
10
1.1k
GeminiとUnityで実現するインタラクティブアート
hokkey621
0
640
12/3(火)のBedrockアプデ速報(re:Invent 2024 Daily re:Cap #2 with AWS Heroes)
minorun365
PRO
4
140
スパイクアクセス対策としての pitchfork 導入
riseshia
0
180
大規模サーバ移行を成功に導くための事前調査フェーズの工夫事例
fukuchiiinu
2
110
Nihonbashi Test Talk #3_WebDriver BiDiと最新の実装状況 / WebDriver BiDi latest status
takeyaqa
1
150
Will Positron accelerate us?
lycorptech_jp
PRO
1
120
pmconf2024_UPSIDER
upsider_tech
0
7.4k
最近のUplift Modeling手法にRでトライ
hskksk
0
120
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Code Review Best Practice
trishagee
64
17k
Building Adaptive Systems
keathley
38
2.3k
Unsuck your backbone
ammeep
669
57k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Making the Leap to Tech Lead
cromwellryan
133
9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
780
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
23
Become a Pro
speakerdeck
PRO
25
5k
Embracing the Ebb and Flow
colly
84
4.5k
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