Share
Embed
分散型SNS最新状況
ABC 2023 Automnで登壇した内容
https://abc.android-group.jp/abc2023a/
https://japan-android-group.connpass.com/event/287690/
kojira
November 22, 2023
Transcript
56 slides
-
ࣗݾհ u ࢄܕ4/4ͱͷؔΘΓ u /PTUSͷษڧձΛΑΓԿ։࠵ u #MVFTLZΛ͔Β։࢝ u ʹੈքॳͷ#MVFTLZNFFUVQΛ։࠵ u
Ҏޙ#MVFTLZͷษڧձԿ։࠵ u /PTUSͰPQFOBJͷ(15ΛͬͨνϟοτϘοτΛମӡ༻ u /PTUSͷ࢝ऀΑΓ/PTUSͷߩݙ͕ೝΊΒΕͯɺສTBUPTIJ #5$ Λ Β͏ u /PTUSBTJBͱ͍͏ौ୩ͰߦΘΕͨਓنͷΠϕϯτͰ u དྷ͍ͯͨ͠5XJUUFSͷۀऀͷδϟοΫɾυʔγʔͱϋά u /PTUSͷຊίϛϡχςΟʹ͍ͭͯొஃ -
ΞδΣϯμ u ࢄܕ4/4ͱ u ैདྷͷ4/4ͷ u #MVFTLZͱ u #MVFTLZͷࠓޙ u
/PTUSͱ u /PTUSͷࠓޙ u FUD -
ैདྷͷ4/4ͷ u தԝूݖܕͷιʔγϟϧϝσΟΞͷΛৄ͠ ͘ղઆͨ͠ಈը u ʮιʔγϟϧϝσΟΞյΕ͍ͯΔɻͤΔͩ Ζ͏͔ʁʯ u δϟοΫɾυʔγʔچ5XJUUFSͷओΤϯδ χΞͳͲ͕ग़ԋ
u ҰݟͷՁ͋Γ u ࣗಈ༁Ͱͳ͍ຊޠࣈນ͍͍ͭͯΔ -
ैདྷͷ4/4ͷ u δϟοΫɾυʔγʔʮݪଇͱͯ͠ɺ୭5XJUUFSΛ ॴ༗ͨ͠ΓӡӦͨ͠Γ͢Δ͖Ͱͳ͍ͱࢥ͏ɻձ ࣾͰͳ͘ɺϓϩτίϧϨϕϧͷެڞࡒͰ͋Γ͍ͨɻ ͔͠͠ͳ͕Βʢ࣮ࡍʣձࣾͰ͋Δͱ͍͏͕͋ ΓɺͦΕʹରͯ͠ɺΠʔϩϯࢲ͕৴པ͢Δ།Ұͷ ղܾࡦʹͳΔɻࢲٿҙࣝͷޫΛ͛Δͱ͍͏൴ ͷϛογϣϯΛ৴͍ͯ͡Δʯͱߘ͍ͯ͠Δ u
˞ޙʹΠʔϩϯͷߦಈਖ਼͘͠ͳ͔ͬͨͱޙ෦ Λ൱ఆ͠ɺ#MVFTLZͷ$&0ͱνʔϜ͔ͬ͠Γߏங Ͱ͖͍ͯΔͱൃݴ͍ͯ͠Δ ࠒ -
ࢄܕ4/4ͱ u தԝͷཧऀ͕ډͳ͍ΦʔϓϯͳωοτϫʔΫʹΑΔ ϓϥοτϑΥʔϜϓϩτίϧ u ಛఆͷࣄۀऀʹΑͬͯҰݩཧ͞Ε͓ͯΒͣɺ୯Ұো ͕ͳ͍ u .BTUPEPOͳͲ"DUJWJUZ1VCΛͬͨαʔϏεࢄ ͍ͯ͠Δͱݴ͑Δ͕ɺॴଐαʔόʔͷཧऀ͕ಥવ
ӡ༻ΛΊͯ͠·ͬͨΒσʔλΛҾ͖ܧ͙͜ͱͰ͖ ͣʹফ͑ͯ͠·͏ͷͰਅͷࢄܕ4/4ͱݴ͍͍ -
#MVFTLZͷྺ࢙ u 5XJUUFSۀऀͷδϟοΫɾυʔγʔ͕5XJUUFSͰ#MVFTLZߏΛൃද u ݄ʹ5XJUUFS͔Βͯ͠ެӹ--$ͱͳΓɺδΣΠɾάϥόʔ͕࠷ߴܦӦऀɺδϟοΫɾυʔγʔ͕औకʹब u ݄ ৽ͨʹൃද͞Εͨ5XJUUFSͷϒϩοΫνΣʔϯ෦ͱ#MVFTLZߏͱͷ࿈ܞΛܭը u
݄ ΠʔϩϯɾϚεΫͷਃ͠ग़Ͱ5XJUUFS͔Βສυϧ ԯԁ ͷࢧԉ u ݄ "VUIFOUJDBUFE%BUB&YQFSJNFOU "%9 ͱͯ͠ϓϩτίϧͷॳظόʔδϣϯΛެ։ u ݄ ΠʔϩϯɾϚεΫͷ5XJUUFSങऩʹΑΓϒϩοΫνΣʔϯ෦ͷऀ͕ࣙ u ݄ "51SPUPDPMʹվ໊ u ݄ J04൛ΞϓϦϦʔεɺট੍Ͱελʔτ u ݄ "OESPJE൛ΞϓϦϦʔε u ݄ ̍̌ສਓಥഁ🎉 u ݄ ̐̌ສਓಥഁ🎉 u ݄ γʔυϥϯυͰສυϧ ԯԁ ௐୡ u ݄ ̑̌ສਓಥഁ🎉 u ݄̍̌̌ສਓಥഁ🎉 u ݄̎̌̌ສਓಥഁ🎉 -
1%4 #MVFTLZ "51SPUPDPM ͷߏ #(4 "QQ7JFX 'FFE (FOFSBUPST "1* 1%4ΞΧϯτొ
ొߋ৽௨ 1%4ͷΫϩʔϧ TUSFBN DVTUPNGFFET 1-$ %*%ใ %*%ใ ΞΧϯτ ใ Πϯλʔωοτ͔Βͷใ λΠϜϥΠϯ ࿈߹ ࣮த -
#MVFTLZ "51SPUPDPM ͷಛ u 5XJUUFSͷਖ਼ͳޙܧʹͳΔͣͩͬͨ u ΫϩʔζυЌͰະͰ͋Γɺটίʔυ͕ඞཁ u ΦʔϓϯιʔεͰ͋Δ u
*%ʹ%*% %FDFOUSBMJ[FE*EFOUJGJFSࢄܕ*% Λར༻͍ͯ͠Δ u ϞσϨʔγϣϯʹΑΔΈ͚ܯࠂ ηΫγϟϧɺྗɺϔΠτɺ εύϜɺͳΓ͢·͠ u ΦʔϓϯιʔεͳͷͰ͢ͰʹݸਓͰෳͷ1%4ཱ͕ͯΒΕ͍ͯΔ u ΧελϜϑΟʔυػೳ͕͋Δ ϑΟʔυͷதΛࣗ༝ʹ࡞Մೳ u ผͷ1%4ݸਓͷσʔλͱϑΥϩʔؔΛͦͷ··Ҿͬӽ͕͠Մೳ ະ࣮ݱ u 1%4ͷ࿈߹ͷλΠϜϥΠϯݕࡧ ະ࣮ݱ ˞TBOECPYڥͰ࣮ ݱ u %.ɺݤΞΧϯτ͕ͳ͍ -
#MVFTLZͷࠓޙ u ࠓ݄ ݄ ʹϩάΠϯແ͠Ͱߘ͕දࣔͰ͖ΔΑ ͏ʹͳΔ༧ఆ (PPHMFʹJOEFY͞ΕΔʁ u དྷॳ಄ʹ࿈߹ػೳ͕ϦϦʔε͞ΕΔ༧ఆ u
ͦͷޙɺ%.ػೳɺݕࡧػೳͷ্ͳͲ u ࠓޙɺটίʔυͳ͘ͳΔͷ͔ෆ໌ u ·ͩ·ͩػೳ࣮தͷஈ֊ͰΏͬ͘Γͱத -
#MVFTLZͷ·ͱΊ ओ؍ u ݐஙதͰະͰ͋Δ͕ΞϓϦͷߴ͍ u 5XJUUFSॳظͷۭؾײ u ࠂͷͳ͍շద͞ u ΧελϜϑΟʔυͷՄೳੑ
ήʔϜϒοΫͳͲ࡞Β Ε͍ͯΔ u CPU͕ແྉͰࣗ༝ʹ࡞ΕΔ u 8FCΞϓϦଟ͍͕ɺ"OESPJEΞϓϦ͕खബͳͷͰ νϟϯε u 1SPUPDPMΛҰॹʹ࡞͍ͬͯ͘͜ͱՄೳ u টίʔυ͕ඞཁͳํ͙ͤ͢ΔͷͰɺޙ΄Ͳ͓ਃ ͚͍ͩ͘͠͞ -
u UIFGJBUKBGࢯʹΑΓ/PTUSϓϩτί ϧͷ։ൃ։࢝ u ݄δϟοΫɾυʔγʔʹΑΓ GJBUKBGࢯʹ#5$ ສԁ ͷࢧԉ u
݄5XJUUFS͕ΞΧϯτౚ݁ࡇΓͷ ൃੜͷλΠϛϯάͰ/PTUSΛར༻ͨ͠4/4Ξ ϓϦ%BNVT͕ϦϦʔε͞Ε͞ΕΔ u ݄δϟοΫɾυʔγʔ͕͞Βʹ ສυϧ ̓ԯԁ ΛGJBUKBGࢯʹࢧԉ -
u /PUFTBOE0UIFS4UVGG5SBOTNJUUFECZ3FMBZTͷུ u 8FC4PDLFUΛ͍ͬͯΔͨΊಈ࡞͕͍ u ಡΈํ͕ࢄ͍ͯ͠Δ ϊελʔɺϊετϥɺφελʔɺϊγϡτϥɺ ϊετΡϧͳͲ u /*1
/PTUS*NQMFNFOUBUJPO1PTTJCJMJUJFT ͱݺΕΔϓϩτίϧ༷ ʹΑͬͯ࡞ΒΕ͍ͯΔ u #*1 #JUDPJO*NQMFNFOUBUJPO1PTTJCJMJUJFT Λ౿ऻ u ൿີݤͱެ։ݤΛར༻ u ΞΧϯτͷ֓೦͕ͳ͘ɺൿີݤ͕ΞΧϯτͦͷͷɻൿີݤ͕࿙ ΕͨΒऴΘΓ u FWFOUΛൿີݤͰॺ໊͠ɺൿີݤͷॴ༗ऀ͕࡞ͨ͜͠ͱΛূ໌͢Δ u ෳͷϦϨʔʹFWFOUΛߘ͢Δ͜ͱͰੑΛ֬อ u ϏοτίΠφʔͷίϯςΩετ͕ೱ͍͕ϒϩοΫνΣʔϯͰͳ͍ u ؆୯ʹݴ͏ͱϒϩοΫνΣʔϯ͔ΒաڈࢀরͷνΣʔϯΛ֎͠ ͨΈ u ࿈ଓੑ͕อূ͞Εͳ͍ͷͰաڈະདྷʹߘ͕Մೳ u ୯Ұো͕ͳ͘ɺӬଓͷՄೳੑ͕͋Δ u -JHIUOJOHʹΑΔ͛મ͕Մೳ u ڧݻͳݕӾੑ͕͋Δ u ࢄ͍ͯ͠ΔͨΊɺআ͕͍͠ -
Relay 1 Relay 2 Relay 3 Relay 4 Relay 5
Relay 6 user A user B user C -
Relay 1 Relay 2 Relay 3 Relay 4 Relay 5
Relay 6 user A user B user C 全員の 投稿が⾒える user Cの 投稿が⾒えない user Aの 投稿が⾒えない -
NIP-05 Mapping Nostr keys to DNS-based internet identifiers https://github.com/nostr-protocol/nips/blob/master/05.md ユーザーの公開鍵をDNSベースで紐づけて本⼈確認する仕組み
kind 0のeventがユーザー情報になっているが、本⼈かどうか証明が難しいため、本⼈を証明する⽅法 のひとつとして⽤意されている(ドメインがコントロールできていれば本⼈だろうという前提) "kind":0, "content":"{ "name":"kojira", "nip05":"[email protected]", :(省略) -
NIP-05 上記のような場合、 https://kojira.io/.well-known/nostr.json を参照し、jsonの中に該当のpubkeyが存在することをクライアント側で確認 することで、アカウントが本⼈かどうかをverifyできる "kind":0, "content":"{ "name":"kojira", "nip05":"[email protected]", :(省略)
{ "names": { "kojira": "b3e43e8cc7e6dff23a33d9213a3e912d895b1c3e4250240e0c99dbefe3068b5f” } nostr.json -
/*1 u/*1ͷϒϥβ֦ு u $ISPNF͚ u OPTY IUUQTDISPNFHPPHMFDPNXFCTUPSFEFUBJMOPT YLQHFGDGNOBGKHQCMPNJIQHNFKKEBOKKQ u "MCZIUUQTHFUBMCZDPN
u 'JSFGPY͚ u OPTYGPYIUUQTEJFHPHVSQFHVJDPNOPTYGPY u J04͚ u OPTUPSF IUUQTBQQTBQQMFDPNKQBQQOPTUPSFJE -
FWFOU { "kind": 1, "pubkey": "b3e43e8cc7e6dff23a33d9213a3e912d895b1c3e4250240e0c99dbefe3068b5f", "created_at": 1698898789, "tags": [],
"content": "テスト投稿", "id": "1674b37334c009104e4e420fc1374ccce3e7950251365ad4d490f4e95b989ed3", "sig": "2e8d0042e47028527df51c24a9346b156d3561d7a55ef982f0a7d8ab848e716eea29f becb5e574b51bbc6ab696e8909ec150a83e31dac6c60eca4d5cb0efa3c2" } イベントの種類 公開鍵 unixtime 内容 タグ event id シグネチャ event json -
$MJFOUT • %BNVTIUUQTEBNVTJP • J04ΫϥΠΞϯτɻڪΒ͘ੈքҰΘΕ͍ͯΔΞϓϦɻདྷ"OESPJE൛ΛϦϦʔε ͢ΔΒ͍͠ • "NFUIZTUIUUQTHJUIVCDPNWJUPSQBNQMPOBBNFUIZTU • "OESPJEΫϥΠΞϯτɻػೳ͕࠷๛ɻߋ৽͕සൟɻ
• OPTUUFSIUUQTOPTUUFSBQQ • ຊࠃ࢈ΫϥΠΞϯτɻຊਓॳ৺ऀ͕͍͍͢ • SBCCJUIUUQTTZVTVJTHJUIVCJPSBCCJU • ຊ࢈ΫϥΠΞϯτɻϚϧνΧϥϜͷEFDLλΠϓɻͷ͢ഇਓ͚ -
/PTUSͰͷࢲͷ։ൃ u /PTUJGZͱ͍͏/PTUSͷߘΛϑΟϧλͯ͠EJTDPSEʹ ߘ͢ΔEJTDPSEͷCPU u /PTUSDIBOͱ͍͏ରCPUγεςϜ ମՔಇத u /PTUSߘͷίϚϯυͰCPUΛ৽ͨʹੜΉ͜ͱ͕Մೳ u
XTTSLPKJSBJPͷϦϨʔΛՔಇத u ઌ%BNVTͷຊޠ͚ϦϨʔͱͯ͠Έࠐ·Ε·ͨ͠ u ຖΫΠζΛ࣮ࢪத u ਖ਼ղऀʹTBUPTIJΛ͛મ -
/PTUSͷΓ্͕Γ u ʙʹϕϧαʔϧौ୩ͰߦΘΕͨ/PTUSBTJBͱ͍͏ Πϕϯτ͕ͱΜͰͳ͔ͬͨ u ॳϚάϩղମγϣʔͰڻ͔͞ΕɺೋΤυ ϫʔυɾεϊʔσϯͱδϟοΫɾυʔγʔͷରஊ͕͋ ΓɺࡾδϟοΫͱ/PTUSJDIͷύωϧͳͲΓͩ ͘͞ΜͩͬͨʹؔΘΒͣɺऔࡐϝσΟΞ͕΄΅ډͳ ͍ͱ͍͏͋Γಘͳ͍ঢ়ଶͰશવهࣄʹͳ͍ͬͯͳ͍ʂ
u ण͕࢘େྔʹ༨ͬͨͷͰण͓࢘͡͞ΜདྷΕΑ͔ͬ ͨͷʹ u /PTUSͷੈքنͷΦϑձͱݴ͏͖Πϕϯτ u ৄ͘͜͠ͷهࣄΛ u ࢲͷ/PTUSBTJBͷهԱ u IUUQTCMPHMBCOFUFOUSZ -
/PTUSͷࠓޙ u ੈքنͷΦϑձ ʁ ͕ʹճ͘Β͍ͷϖʔεͰ։࠵͞Εͦ͏ u δϟοΫɾυʔγʔ/PTUSεʔύʔΞϓϦʹͳΔͱड़͍ͯΔ u Ұઃఆͯ͠͠·͑ϒϥβͷϩάΠϯ͕0"VUIΑΓ؆୯ ௨৴͕ൃੜ͠ͳ͍
u /PTUSΛόοΫΤϯυʹͯ͠IPTUJOH͢ΔαʔϏεɺϥΠϒ৴ɺνϟοτɺήʔϜͳͲ͕͋ΓɺͦΕ Ҏ֎ʹແݶͷՄೳੑ͕͋Δ u GJBUKBGΑΓ͢Ͱʹຊਓ໊ʹສTBUPTIJ͕ࢧԉ͞Ε͍ͯͯɺ0QFO4BUT͔Βຊͷ/PTUS։ൃऀ ʹࢧԉ͞Ε͍ͯΔɻࠓޙͬͱΜʹͳΔ͜ͱ͕༧͞ΕΔ ຊϢʔβʔҐ u 0QFO4BUTͷࢧԉͰຊۀͷऩೖΛӽ͑ͨਓ -
/PTUSͷ·ͱΊ ओ؍ u ݄ͷதࠃޠɺӳޠεύϜ͔Γͷঢ়گͱ͏ҧ͏ u ϓϩτίϧʑߋ৽தͰϢʔβʔΤϯδχΞ͔ Γ͕ͩɺ%*:ָ͕͗͢͠Δ u Ұൠओ්͕/PTUSຊΛಡΜͰCPUΛ࡞ͬͯ/PTUS #MVFTLZຊͰࣥචͯ͠͠·͏΄Ͳͷັྗ
u "OESPJEͷᴈ໌ظΑΓૣ͘ɺଟ͘ͷਓͱܨ͕Δ͜ͱ ͕Ͱ͖͍ͯΔ u ࠓ౧ݯڷͷΑ͏ͳوॏͳλΠϛϯά u σβΠφʔෆ u ͍ͭ/PTUSΛ࢝ΊΔͷʁ