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
400
「Nostrってなんなんだ。」を「Nostrっておもしろそう。」に
ゴリラ.Vimで登壇したNostr紹介スライドです。
TSURUDO Ryosuke
February 10, 2024
Tweet
Share
More Decks by TSURUDO Ryosuke
See All by TSURUDO Ryosuke
より良いNostrライフのために選ぶリレー
robo358
0
260
Nostr勉強会で副音声会場を開催してみた
robo358
0
230
Other Decks in Programming
See All in Programming
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
630
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
210
Patterns of Patterns
denyspoltorak
0
440
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
0
460
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
240
クラウドに依存しないS3を使った開発術
simesaba80
0
220
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
650
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
170
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
2.1k
チームをチームにするEM
hitode909
0
450
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
170
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Darren the Foodie - Storyboard
khoart
PRO
2
2.1k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Un-Boring Meetings
codingconduct
0
180
Rebuilding a faster, lazier Slack
samanthasiow
85
9.3k
Agile that works and the tools we love
rasmusluckow
331
21k
Abbi's Birthday
coloredviolet
0
4.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.8k
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