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ってなんなんだ。」を「Nostrっておもしろそう。」に
Search
TSURUDO Ryosuke
February 10, 2024
Programming
0
350
「Nostrってなんなんだ。」を「Nostrっておもしろそう。」に
ゴリラ.Vimで登壇したNostr紹介スライドです。
TSURUDO Ryosuke
February 10, 2024
Tweet
Share
More Decks by TSURUDO Ryosuke
See All by TSURUDO Ryosuke
より良いNostrライフのために選ぶリレー
robo358
0
190
Nostr勉強会で副音声会場を開催してみた
robo358
0
200
Other Decks in Programming
See All in Programming
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
240
Swift Testingのモチベを上げたい
stoticdev
2
220
Google Cloudとo11yで実現するアプリケーション開発者主体のDB改善
nnaka2992
1
160
Rubyと自由とAIと
yotii23
6
1.9k
5分で理解する SOLID 原則 #phpcon_nagoya
shogogg
1
430
フロントエンドオブザーバビリティ on Google Cloud
yunosukey
0
110
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
1
310
Your Architecture as a Crime Scene:Forensic Analysis @bastacon 2025 in Frankfurt
manfredsteyer
PRO
0
130
クックパッド検索システム統合/Cookpad Search System Consolidation
giga811
0
190
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
230
自力でTTSモデルを作った話
zgock999
0
130
たのしいSocketのしくみ / Socket Under a Microscope
coe401_
8
1.5k
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
244
12k
How to Think Like a Performance Engineer
csswizardry
22
1.4k
BBQ
matthewcrist
87
9.5k
Music & Morning Musume
bryan
46
6.4k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Typedesign – Prime Four
hannesfritz
41
2.5k
A Tale of Four Properties
chriscoyier
158
23k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
The Language of Interfaces
destraynor
156
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Transcript
Nostrってなんなんだ。 つるるん🥕@ROBO358
Iʼm つるるん🥕@ROBO358 ❯ whoami 昨年新卒入社のエンジニア🔰 セキュリティプロダクト開発 2月にNostrを知る Nostrのことを本に書く 技術書典での頒布本(2冊) SoftwareDesign誌(2023年8月)
12月のNostrイベント主催 その他、諸々……(無限オフ会など)
Nostrってアプリ? サイト? 🤔 🙄 🧐
いいえ、プロトコルです
Nostr 公開鍵暗号方式を用いて電子署名をしたEventとよばれるJSONファイルをリレーと 呼ばれるサーバへEventを保管・他のクライアント(ユーザ)への中継をしてくれる サーバ複数台へ送信し、他のクライアントがいずれかのリレーからEventを取得す るプロトコル。このとき、クライアントは複数のリレーとWebSocketによるコネク ションを張っておりEventのやり取りは高速に行うことができる。クライアント は、Eventに付与された署名を検証することで本当にその秘密鍵をもったユーザが 作成したEventであることを確認できる。ここまで読めた方はわかると思うが、 Nostrで言うユーザは秘密鍵・公開鍵ペアを持っているものであり、どこかに登録 するという概念は存在しない。あなたもすでにNostrユーザと言っても過言ではな
い(過言)。しらんが。書くことなくなってきた。どうせすぐ飛ばされるスライド なのに真面目なこといっぱい書く必要ないようね。うんうん。
難しく書きすぎました……
恐ろしいほど シンプルな プロトコル
まずは、 楽しそうな所を 共有しましょうか https://nostter.app
Nostr { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" } JSON形式のEventと呼ばれるデータでやり取りするプロトコル
クライアント?リレー? { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb847644 93adf91b24c70044bf303f63a6ade58b9b" } クライアント リレー
クライアント?リレー? { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf9 1b24c70044bf303f63a6ade58b9b" } リレー クライアント
クライアント?リレー? { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf9 1b24c70044bf303f63a6ade58b9b" } リレー クライアント
クライアント?リレー? { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf9 1b24c70044bf303f63a6ade58b9b" } リレー クライアント クライアント
クライアント?リレー? { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" } { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494, "content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" } { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494, "content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" }
クライアント?リレー? { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" } { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494, "content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" } { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494, "content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" }
クライアント?リレー? { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" }
無責任分散 UP DOWN DOWN
Event { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" } JSON形式のEventと呼ばれるデータ
アカウントっていう概念じゃない 公開鍵: npub147ccm75um0zkn0lr9fg9wrag2g6yxfw234fpmhdwuvaqjyegrhgs46t2td 秘密鍵: nsecXXXXXXXXXXXXXXXXXXX
Event { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" } JSON形式のEventと呼ばれるデータ
Event { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" } JSON形式のEventと呼ばれるデータ npub147ccm75um0zkn0lr9fg9wrag2g6yxfw234fpmhdwuvaqjyegrhgs46t2td
署名の検証 クライアント クライアント
無責任分散
プロフィールとかいろいろ { "content": { "nip05": "
[email protected]
", "website": "https://ROBO358.com", "display_name": "つるるん🥕(tsururun)",
"banner": "https://www.robo358.com/.well-known/banner.jpg", "about": "つるぽ\n🔑セキュリティプロダクト研究/社会人\n#8dc640\nScrapboxみてね \nhttps://scrapbox.io/nostr/ROBO358", "name": "つるるん🥕(tsururun)", "picture": "https://www.robo358.com/.well-known/icon.png", "displayName": "つるるん🥕(tsururun)" }, "created_at": 1707088637, "id": "1f166f9db88e3475defc62c44b86578fcd2b3a2275f19bc51129bdd7ce76a11f", "kind": "0", "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "sig": "95cc43c4f1bda519e3cfca4c755dff6a9db8fb3fa7513189b3b9cc1001e46eac99cb4dcfe4761a87fe3112f2 d20c568364fc476cee1d0f80884baa2610067398", "tags": [ [ "i", "github:ROBO358", "ececa3267ccd3191a092e375484bff0d" ] ] }
プロフィールとかいろいろ(これは通常の投稿) { "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d", "kind": 1, "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1", "created_at": 1707400494,
"content": "ゴリラ.vim好きにもつるるんと呼ばれたい", "tags": [], "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b" }
通信 クライアント リレー WebSocket
プロトコルの定義 プロトコル定義(NIPs) https://github.com/nostr-protocol/nips 有志による日本語翻訳も https://github.com/nostr-jp/nips-ja
あなたもNostrユーザかも…?
Nostrってなんなんだ。 つるるん🥕@ROBO358
Nostrっておもしろそう。 つるるん🥕@ROBO358
Nostrっておもしろそう。 つるるん🥕@ROBO358 Nostr GitHub