Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「Nostrってなんなんだ。」を「Nostrっておもしろそう。」に

 「Nostrってなんなんだ。」を「Nostrっておもしろそう。」に

ゴリラ.Vimで登壇したNostr紹介スライドです。

TSURUDO Ryosuke

February 10, 2024
Tweet

More Decks by TSURUDO Ryosuke

Other Decks in Programming

Transcript

  1. Nostrってなんなんだ。
    つるるん🥕@ROBO358

    View full-size slide

  2. Iʼm つるるん🥕@ROBO358
    ❯ whoami
    昨年新卒入社のエンジニア🔰
    セキュリティプロダクト開発
    2月にNostrを知る
    Nostrのことを本に書く
    技術書典での頒布本(2冊)
    SoftwareDesign誌(2023年8月)
    12月のNostrイベント主催
    その他、諸々……(無限オフ会など)

    View full-size slide

  3. Nostrってアプリ? サイト?
    🤔
    🙄
    🧐

    View full-size slide

  4. いいえ、プロトコルです

    View full-size slide

  5. Nostr
    公開鍵暗号方式を用いて電子署名をしたEventとよばれるJSONファイルをリレーと
    呼ばれるサーバへEventを保管・他のクライアント(ユーザ)への中継をしてくれる
    サーバ複数台へ送信し、他のクライアントがいずれかのリレーからEventを取得す
    るプロトコル。このとき、クライアントは複数のリレーとWebSocketによるコネク
    ションを張っておりEventのやり取りは高速に行うことができる。クライアント
    は、Eventに付与された署名を検証することで本当にその秘密鍵をもったユーザが
    作成したEventであることを確認できる。ここまで読めた方はわかると思うが、
    Nostrで言うユーザは秘密鍵・公開鍵ペアを持っているものであり、どこかに登録
    するという概念は存在しない。あなたもすでにNostrユーザと言っても過言ではな
    い(過言)。しらんが。書くことなくなってきた。どうせすぐ飛ばされるスライド
    なのに真面目なこといっぱい書く必要ないようね。うんうん。

    View full-size slide

  6. 難しく書きすぎました……

    View full-size slide

  7. 恐ろしいほど
    シンプルな
    プロトコル

    View full-size slide

  8. まずは、
    楽しそうな所を
    共有しましょうか
    https://nostter.app

    View full-size slide

  9. Nostr
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b"
    }
    JSON形式のEventと呼ばれるデータでやり取りするプロトコル

    View full-size slide

  10. クライアント?リレー?
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig":
    "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb847644
    93adf91b24c70044bf303f63a6ade58b9b"
    }
    クライアント リレー

    View full-size slide

  11. クライアント?リレー?
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig":
    "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf9
    1b24c70044bf303f63a6ade58b9b"
    }
    リレー
    クライアント

    View full-size slide

  12. クライアント?リレー?
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig":
    "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf9
    1b24c70044bf303f63a6ade58b9b"
    }
    リレー
    クライアント

    View full-size slide

  13. クライアント?リレー?
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig":
    "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf9
    1b24c70044bf303f63a6ade58b9b"
    }
    リレー
    クライアント クライアント

    View full-size slide

  14. クライアント?リレー?
    {
    "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"
    }

    View full-size slide

  15. クライアント?リレー?
    {
    "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"
    }

    View full-size slide

  16. クライアント?リレー?
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b"
    }

    View full-size slide

  17. 無責任分散
    UP DOWN DOWN

    View full-size slide

  18. Event
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b"
    }
    JSON形式のEventと呼ばれるデータ

    View full-size slide

  19. アカウントっていう概念じゃない
    公開鍵: npub147ccm75um0zkn0lr9fg9wrag2g6yxfw234fpmhdwuvaqjyegrhgs46t2td
    秘密鍵: nsecXXXXXXXXXXXXXXXXXXX

    View full-size slide

  20. Event
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b"
    }
    JSON形式のEventと呼ばれるデータ

    View full-size slide

  21. Event
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b"
    }
    JSON形式のEventと呼ばれるデータ
    npub147ccm75um0zkn0lr9fg9wrag2g6yxfw234fpmhdwuvaqjyegrhgs46t2td

    View full-size slide

  22. 署名の検証
    クライアント クライアント

    View full-size slide

  23. 無責任分散

    View full-size slide

  24. プロフィールとかいろいろ
    {
    "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"
    ]
    ]
    }

    View full-size slide

  25. プロフィールとかいろいろ(これは通常の投稿)
    {
    "id": "e54d96f06a96338c47824dc29f28588deb66cd0d3ad44b89c32ea14d9007457d",
    "kind": 1,
    "pubkey": "afb18dfa9cdbc569bfe32a50570fa852344325ca8d521dddaee33a0913281dd1",
    "created_at": 1707400494,
    "content": "ゴリラ.vim好きにもつるるんと呼ばれたい",
    "tags": [],
    "sig": "3b7dd74cfa64a64ddef959f5607e660cc764fd86a0d7a1152f6ad013eb38e959780d33d4f7ffaa33d9a5c5cb84764493adf91b24c70044bf303f63a6ade58b9b"
    }

    View full-size slide

  26. 通信
    クライアント リレー
    WebSocket

    View full-size slide

  27. プロトコルの定義
    プロトコル定義(NIPs)
    https://github.com/nostr-protocol/nips
    有志による日本語翻訳も
    https://github.com/nostr-jp/nips-ja

    View full-size slide

  28. あなたもNostrユーザかも…?

    View full-size slide

  29. Nostrってなんなんだ。
    つるるん🥕@ROBO358

    View full-size slide

  30. Nostrっておもしろそう。
    つるるん🥕@ROBO358

    View full-size slide

  31. Nostrっておもしろそう。
    つるるん🥕@ROBO358
    Nostr
    GitHub

    View full-size slide