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
270
「Nostrってなんなんだ。」を「Nostrっておもしろそう。」に
ゴリラ.Vimで登壇したNostr紹介スライドです。
TSURUDO Ryosuke
February 10, 2024
Tweet
Share
More Decks by TSURUDO Ryosuke
See All by TSURUDO Ryosuke
より良いNostrライフのために選ぶリレー
robo358
0
160
Nostr勉強会で副音声会場を開催してみた
robo358
0
160
Other Decks in Programming
See All in Programming
I/O Extended Android in Korea 2024 ~ Whats new in Android development tools
pluu
0
250
Activities at Cairo Library
cairolibrary720
0
1.2k
DMMプラットフォームにおけるTiDBの導入から運用まで
pospome
7
3k
MIERUNE BBQにおけるユーザー中心設計()
mierune
PRO
1
110
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
kako351
0
160
Polarsの成長: v0.14からv1.0までの変遷と今後の展望
zerebom
1
350
なぜ宣言的 UI は壊れにくいのか / Why declarative UI is less fragile
uenitty
29
13k
ピグパーティにおけるMongoDB CommunityバージョンからAtlasへの移行事例
10969hotaka
0
130
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
15
8.5k
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
81k
開発部に不満を持っていたCSがエンジニアにジョブチェンしてわかった「勝手に諦めない」ことの大切さ
sakuraikotone
28
16k
feature環境をGitHub ActionsとCloudFormationでいい感じに管理する
nealle
2
310
Featured
See All Featured
Side Projects
sachag
451
42k
10 Git Anti Patterns You Should be Aware of
lemiorhan
652
58k
Principles of Awesome APIs and How to Build Them.
keavy
124
16k
Creatively Recalculating Your Daily Design Routine
revolveconf
214
11k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
12
3.8k
Raft: Consensus for Rubyists
vanstee
134
6.5k
Pencils Down: Stop Designing & Start Developing
hursman
118
11k
Statistics for Hackers
jakevdp
792
220k
Leading Effective Engineering Teams 2024
addyosmani
3
300
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
149
45k
Unsuck your backbone
ammeep
666
57k
Thoughts on Productivity
jonyablonski
64
4.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