⋆。˚ ☁︎ ˚。⋆。˚☽˚。⋆

Kako ne izgubiti svojega Bluesky računa, če PDS izgine

Ta objava je nadaljevanje širšega razmisleka o Blueskyju, ATmosferičnih orodjih in selitvah na alternativne PDS-je, zlasti Eurosky. Osredotoča se na zelo konkretno vprašanje: kako poskrbeti, da račun ostane prenosljiv tudi, če trenutni PDS odpove.

Iz različnih razlogov se lahko zgodi, da strežnik PDS, na katerem gostuje tvoj račun, izgine ali preneha delovati. Če se to zgodi nepričakovano, lahko ostaneš brez možnosti, da svoj račun in podatke preseliš drugam.1 Protokol AT takšno selitev načeloma omogoča, vendar ni samodejna, niti trivialna. Zato je smiselno vnaprej urediti nekaj ključnih stvari.

PDS, handle in DID

Kratka razlaga osnovnih pojmov:

Kaj gre lahko narobe

Če PDS, na katerem trenutno gostuješ, izgine ali preneha delovati, lahko tvoj račun hitro postane precej manj prenosljiv, kot se morda zdi na prvi pogled. V protokolu AT je namreč trenutni gostitelj računa zapisan v tvojem DID-dokumentu.2 Dokler ta kaže na PDS, ki je dosegljiv in ima delujoč repozitorij, je tvoj račun aktiven in ga je mogoče normalno uporabljati ali preseliti.

Ko pa PDS izgine, se situacija zaplete: če DID-dokument kaže na strežnik, ki ne obstaja več, ali če repozitorija ni mogoče več prebrati, je račun na ravni protokola "pokvarjen". Ni nujno izgubljen, je pa bistveno težje obnovljiv, selitev pa ni več trivialna. Za varno selitev tako ni dovolj, da poznaš svoje geslo; če želiš račun preseliti tudi v primeru, ko stari PDS ni več dosegljiv, moraš pravočasno urediti dve stvari:

Rotacijski ključ in varnostna kopija CAR

V protokolu AT obstajata dva nivoja "lastništva" oziroma nadzora nad računom. Prvi je nadzor nad identiteto računa, drugi pa nadzor nad vsebino računa.

Rotacijski ključ je ključ, s katerim lahko potrjuješ spremembe v svojem DID-dokumentu. To pomeni, da z njim ne "odklepaš svojih objav", temveč dokazuješ, da imaš pravico svoj račun preusmeriti na drug PDS.

Uradna dokumentacija to jasno loči od običajnega podpisnega ključa:

Varnostna kopija CAR rešuje drugo težavo: tvoje podatke. Izvoz repozitorija v .car datoteko vsebuje trenutne zapise tvojega računa, npr. objave, všečke, sledenja in druge javne zapise, ne vsebuje pa nujno vsega. Slike in drugi medijski blobi3 niso shranjeni neposredno v repozitoriju, zato sam CAR še ni popoln izvoz celotnega javnega računa. Za bolj poln izvoz javnega računa potrebuješ še blobe.

Skratka: rotacijski ključ ti pomaga rešiti račun, varnostna kopija CAR pa vsebino.

Ko si dodaš svoj rotacijski ključ, računa ne preseliš nikamor. Trenutni PDS ostane isti, handle ostane isti in v aplikaciji se praviloma ne zgodi nič vidnega. Sprememba je predvsem ta, da DID-dokument tvojega računa od tega trenutka dalje vsebuje še tvoj javni rotacijski ključ. S tem si vnaprej pripraviš dodatno pot za spremembo gostitelja računa, če bi jo kdaj potreboval.

Praktično gledano to pomeni naslednje:

  1. lokalno ustvariš nov par ključev,
  2. javni del dodaš v DID-dokument,
  3. zasebni del shraniš pri sebi,
  4. narediš še izvoz repozitorija in po možnosti blobov.

Če trenutni PDS nekoč izgine, lahko s tem zasebnim ključem dokažeš, da imaš pravico račun preusmeriti na nov PDS. Z varnostno kopijo CAR in blobov pa si pomagaš obnoviti vsebino računa.

Kako to nastaviš korak za korakom

1. Namestiš goat. Za delo z računom, PLC ukazi in izvozi repozitorija je priročno uporabiti goat, uradni ukaznovrstični pripomoček iz atproto/Bluesky ekosistema.

Če uporabljaš WSL/Ubuntu, je najlažja pot običajno prek .deb paketa iz GitHub Releases.4 Najprej v terminalu preveri arhitekturo:

uname -m

Če dobiš x86_64, potrebuješ paket za amd64. Če dobiš aarch64, potrebuješ paket za arm64.

Nato v brskalniku odpri bluesky-social/goat/releases in prenesi ustrezen .deb paket za Linux. Ko je datoteka prenesena v mapo Downloads, jo v WSL namestiš takole:

cd /mnt/c/Users/TVOJE_WINDOWS_UPORABNISKO_IME/Downloads
ls
sudo apt update
sudo apt install ./goat*.deb

Preveriš še, ali ukaz deluje:

goat --help

2. Prijaviš se v svoj račun. Ko je goat nameščen, se prijaviš z app passwordom, ne z glavnim geslom računa.5

goat account login -u TVOJ_HANDLE -p 'TVOJE_APP_GESLO'

Po prijavi se verjetno ne zgodi nič posebej vidnega. To je normalno.

3. Shraniš trenutno stanje DID/PLC dokumenta. Preden karkoli spreminjaš, je smiselno shraniti trenutno stanje:

goat account plc current > plc-before.json

Ta datoteka ti kasneje omogoča primerjavo med stanjem pred spremembo in po njej.

4. Lokalno ustvariš nov par ključev. Zdaj ustvariš nov par ključev:

goat key generate > rotation-key.txt
cat rotation-key.txt

V tej datoteki se nahajata dve pomembni stvari:

Zasebni ključ shrani na vsaj dve ločeni varni mesti, idealno izven samega PDS-ja. Dober minimum je upravljalnik gesel (password manager) in še ena dodatna varna kopija.

5. Zahtevaš potrditveni token po e-pošti. Ker gre za spremembo, povezano z identiteto računa, je potreben še dodaten potrditveni token:

goat account plc request-token

Na e-poštni naslov računa prejmeš kodo.

6. Javni ključ dodaš med dovoljene rotacijske ključe. Ko dobiš token, med dovoljene rotacijske ključe dodaš javni did:key:... iz prejšnjega koraka:

goat account plc add-rotation-key --token TVOJ_EMAIL_TOKEN did:key:TVOJ_JAVNI_KLJUC

Če dobiš Success, to pomeni, da je bil nov javni ključ uspešno dodan v DID-dokument računa.

7. Preveriš, da je ključ res dodan. Po uspešnem ukazu si ponovno shraniš stanje:

goat account plc current > plc-after.json

Zdaj lahko primerjaš plc-before.json in plc-after.json ali pa preprosto odpreš plc-after.json in preveriš, ali se tvoj novi did:key:... pojavi v seznamu rotationKeys.

8. Narediš še varnostno kopijo repozitorija in blobov. Rotacijski ključ rešuje identiteto, ne pa vsebine. Zato je smiselno takoj narediti še izvoz repozitorija v formatu CAR in po možnosti še izvoz blobov:

goat repo export TVOJ_HANDLE
goat blob export TVOJ_HANDLE

Prvi ukaz ti ustvari .car datoteko z repozitorijem, drugi pa prenese vse javne blobe računa v mapo TVOJ_HANDLE_blobs, če ne določiš druge poti. Če želiš izvoz usmeriti drugam, lahko uporabiš goat blob export -o moja-mapa-z-blobi TVOJ_HANDLE, če želiš prej samo preveriti seznam blobov, pa goat blob ls TVOJ_HANDLE.

To je dober trenutek, da si te datoteke spraviš nekam varno in ločeno od računalnika, na katerem si jih ustvaril. Po koncu se lahko po želji še odjaviš z goat account logout.

Kaj se zgodi, če PDS res izgine

Če PDS, na katerem gostuješ, nekoč res ugasne, si z zgornjim postopkom pripraviš precej boljšo izhodiščno točko za migracijo. V idealnem primeru je pot potem približno taka:

  1. izbereš nov PDS,
  2. s svojim zasebnim rotacijskim ključem dokažeš nadzor nad identiteto računa,
  3. DID-dokument preusmeriš na nov PDS,
  4. na novem PDS obnoviš podatke iz varnostne kopije CAR,
  5. po potrebi dodaš še blobe.

To pomeni, da ne rešuješ samo "imena" računa, ampak hkrati tudi njegovo identiteto in vsebino.

(Sicer pa ne vem, kako to v praksi poteka; s tem delom, k sreči, nimam izkušenj. Moj testni PDS je sicer ugasnil, a se mi, očitno, ni zdelo vredno vnaprej pripraviti ustreznih ključev, tako da sta oba tamkajšnja računa verjetno odplavala v pozabo.)

Kratek seznam opravil (checklist)

Če želiš zelo kratek povzetek, preveri naslednje:

To je to. Ni ravno najbolj opazen del uporabe odprtega omrežja, je pa eden najbolj uporabnih. Če gostuješ zunaj bsky.social ali če preprosto nočeš biti popolnoma odvisen od enega samega PDS-ja, je to ena izmed najbolj smiselnih stvari, ki jih lahko urediš vnaprej.

Povzeto tudi po prispevku Bryana Newbolda.


  1. To seveda ni težava, omejena na Eurosky; enak problem lahko nastane pri kateremkoli PDS-ju.

  2. DID-dokument je javni zapis o identiteti računa: pove, za kateri račun gre, kateri javni ključi veljajo zanj in na katerem PDS-ju trenutno gostuje. Svojega lahko običajno pogledaš z ukazom goat account plc current; pri did:plc tudi prek PLC Directory na https://plc.directory/TVOJ_DID/data, pri did:web pa je objavljen na sami domeni.

  3. Blob je ločena datoteka oziroma medijski objekt, ki ga zapis v repozitoriju samo referencira, ne vsebuje pa ga neposredno. Sem sodijo npr. slike, video ali drug priložen medij.

  4. Če ne uporabljaš Ubuntu/WSL, obstajajo tudi drugi načini namestitve, npr. prek Homebrew ali z go install. Tu opisujem postopek, ki ga uporabljam jaz.

  5. Uradni goat README priporoča uporabo app passworda. Opozarja tudi, da goat trenutno app password in avtentikacijske tokene shrani v domačo mapo v cleartext obliki; goat account logout te podatke pobriše.

#atproto #blogpost #bluesky #modro nebo