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
380
「Nostrってなんなんだ。」を「Nostrっておもしろそう。」に
ゴリラ.Vimで登壇したNostr紹介スライドです。
TSURUDO Ryosuke
February 10, 2024
Tweet
Share
More Decks by TSURUDO Ryosuke
See All by TSURUDO Ryosuke
より良いNostrライフのために選ぶリレー
robo358
0
210
Nostr勉強会で副音声会場を開催してみた
robo358
0
210
Other Decks in Programming
See All in Programming
GoのGenericsによるslice操作との付き合い方
syumai
3
690
Beyond Portability: Live Migration for Evolving WebAssembly Workloads
chikuwait
0
390
WebViewの現在地 - SwiftUI時代のWebKit - / The Current State Of WebView
marcy731
0
100
DroidKnights 2025 - 다양한 스크롤 뷰에서의 영상 재생
gaeun5744
3
330
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
270
XSLTで作るBrainfuck処理系
makki_d
0
210
ReadMoreTextView
fornewid
1
480
Go1.25からのGOMAXPROCS
kuro_kurorrr
1
810
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
110
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
570
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.4k
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
850
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Unsuck your backbone
ammeep
671
58k
Site-Speed That Sticks
csswizardry
10
660
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Why You Should Never Use an ORM
jnunemaker
PRO
57
9.4k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
BBQ
matthewcrist
89
9.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
Speed Design
sergeychernyshev
32
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