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
410
「Nostrってなんなんだ。」を「Nostrっておもしろそう。」に
ゴリラ.Vimで登壇したNostr紹介スライドです。
TSURUDO Ryosuke
February 10, 2024
Tweet
Share
More Decks by TSURUDO Ryosuke
See All by TSURUDO Ryosuke
より良いNostrライフのために選ぶリレー
robo358
0
280
Nostr勉強会で副音声会場を開催してみた
robo358
0
240
Other Decks in Programming
See All in Programming
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
170
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
300
AHC061解説
shun_pi
0
410
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
610
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
750
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
410
ロボットのための工場に灯りは要らない
watany
11
3.1k
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
530
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
360
へんな働き方
yusukebe
5
2.8k
『Kubernetes ☸️ で実践する Platform Engineering 』を最高速度で読み抜いたる!!👊🏻
hiroki_hasegawa
0
100
20260315 AWSなんもわからん🥲
chiilog
2
170
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Become a Pro
speakerdeck
PRO
31
5.9k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
310
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
52k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
300
WCS-LA-2024
lcolladotor
0
490
Design in an AI World
tapps
0
180
A designer walks into a library…
pauljervisheath
210
24k
A better future with KSS
kneath
240
18k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
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