ZYCORD belgeler
Türkçe
ZycordBelgelerBir indirmeyi doğrulama

Bir indirmeyi doğrulama

Yeniden üretilebilir bir derleme şunu ileri sürer: bu, şu kaynaktan geldi ve herkes denetleyebilir — anonim olarak yayımlanan bir projenin bir kod imzalama sertifikası yerine sunabileceği güvence budur. İşte bunu tahsil etmenin yolu.

Üç denetim ve her biri farklı bir soruyu yanıtlar. Bu sırayla çalıştırın; her biri, kendinden öncekiler olmadan daha az değerlidir.

DenetimNeyi kanıtlarNeyi kanıtlamaz
Sağlama toplamıDosyanın aktarım sırasında değiştirilmediğini.Onu kimin ürettiğine ya da içinde ne olduğuna dair hiçbir şeyi.
İmzaSağlama toplamı listesinin, proje anahtarını elinde tutandan geldiğini.Anahtarın, güvenmek için nedeniniz olan birine ait olduğunu.
Yeniden derlemeİkili dosyanın bu kaynağı içerdiğini, başka hiçbir şeyi içermediğini.Kaynağın dürüst olduğunu — onu okuyun ya da incelemeleri okuyun.

Sağlama toplamı#

curl -fsSLO https://zycord.com/releases//download/v<version>/SHA256SUMS.randomx
sha256sum --check --ignore-missing SHA256SUMS.randomx

# on macOS:
shasum -a 256 --check --ignore-missing SHA256SUMS.randomx
--ignore-missing ne isteğe bağlıdır ne de bir hoşgörüdür

Sürümler artık yalnızca -randomx arşivlerini dağıtıyor, dolayısıyla indirdiğinizi kapsayan liste SHA256SUMS.randomx; SHA256SUMS.deb ve SHA256SUMS.desktop ise Debian paketlerini ve masaüstü cüzdanı kapsıyor. Her biri birkaç dosyayı kapsar ve siz bunlardan yalnızca birini indirdiniz. Bu bayrak olmadan, elinizde olmayan beş tanesi FAILED open or read olarak bildirilir ve komut, gayet sağlam bir indirmede sıfırdan farklı bir kodla çıkar; hem de size bir uyuşmazlığın ele geçirilmiş bir ikili dosya anlamına geldiğini söyleyen sayfada. Olağan sonucu başarısızlık olan bir denetim, insanların görmezden gelmeyi öğrendiği bir denetimdir.

İmza#

Henüz hiçbir imza yayımlanmadı; bu bölüm, yayımlandığında izlenecek yordamı anlatıyor

Sürümler şu anda zycord-release-key.asc dosyasını — açık anahtarı — dağıtıyor, ama güncelleyicinin bildirimi dışında onunla imzalanmış hiçbir şeyi değil: sağlama toplamı dosyalarının hiçbirinin ayrık bir imzası yok ve hiçbiri açık metin imzalı değil. Aşağıdaki gpg --verify bu nedenle bugün eksik bir dosya yüzünden başarısız oluyor ve bu sizin hatanız değil, sürümün eksiği. Bu kapatılana kadar, güven gerekçesini gerçekten taşıyan denetim yeniden derlemedir: baytları kendiniz üretip karşılaştırdığınız için hiçbir imzaya ihtiyaç duymaz.

Bir sağlama toplamı imzası yayımlandığında proje anahtarıyla yapılır. Tam parmak izi şudur:

E724 39CE DD85 11F9 D607 550B 87FD 60D5 EB4A 0B29

Teknik doküman başlığında, arşivlenmiş depozitte ve genesis duyurusunda yayımlanmıştır. Hiçbir zaman sessizce değiştirilmez: eskisinden imzalı bir bildirim olmadan değişen bir anahtar, ele geçirilmiş bir anahtardan ayırt edilemez ve öyle sayılmalıdır.

Dayanak, anahtar dosyası değil, parmak izidir

Anahtarı size uygun olan yerden alın, sonra aldığınızı yukarıdaki satıra karşı denetleyin. Parmak izi o olan bir anahtar dosyası, onu size hangi sunucu vermiş olursa olsun proje anahtarıdır; parmak izi başka bir şey olan bir dosya ise sunucu ne kadar güvenilir görünürse görünsün hiçbir değer taşımaz.

Onu üç yer taşıyor. Herhangi biri işinizi görür:

# 1. The repository, if you have a clone. No network, no keyserver.
gpg --import packaging/zycord-release-key.asc

# 2. The release page, as an asset beside the archives.
curl -fsSLO https://zycord.com/releases//download/v<version>/zycord-release-key.asc
gpg --import zycord-release-key.asc

# 3. A keyserver. Use this one.
gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys E72439CEDD8511F9D607550B87FD60D5EB4A0B29

Sonra, ona dayanmadan önce anahtarlığınıza ne girdiğini doğrulayın:

gpg --fingerprint E72439CEDD8511F9D607550B87FD60D5EB4A0B29
Bu anahtar için keys.openpgp.org kullanmayın

Birkaç GnuPG derlemesinde varsayılan anahtar sunucusudur ve budanmış bir kopya sunar: kullanıcı kimliği ve öz imzası olmayan, çıplak açık anahtar paketi. GnuPG bu kopyayı reddeder — gpg: key 87FD60D5EB4A0B29: new key but contains no user ID - skipped — ve anahtar anahtarlığa hiç girmez; böylece aşağıdaki doğrulama, bozuk bir imza gibi görünen ama aslında eksik bir anahtar olan bir şeyle başarısız olur. O sunucu, bir adres kendi üzerinden doğrulanana kadar kullanıcı kimliklerini ilke gereği budar; bu da takma adla yayımlayan bir projenin yapabileceği bir şey değildir.

gpg --verify SHA256SUMS.randomx.asc SHA256SUMS.randomx

Bugün bu komut No such file or directory bildiriyor, çünkü henüz hiçbir sürüm o dosyayı yayımlamadı. Bu bölümün başındaki nota bakın.

gpg, anahtarın güvenilir bir imzayla onaylanmadığını da ekleyecek. Bu beklenen bir durumdur ve bir başarısızlık değildir. Anlamı, anahtarlığınıza bu anahtara kişisel olarak kefil olduğunuzu söylemediğinizdir; parmak izinin çözmek için orada olduğu şey de tam olarak budur. Önemli olan, imzanın doğrulanması ve doğrulandığı anahtarın yukarıda yazan parmak izi olmasıdır.

Teknik doküman da imzalıdır#

Bu siteden sunulan PDF'in yanında, aynı anahtarla yapılmış ayrık bir imza vardır:

curl -fsSLO https://zycord.com/assets/zycord-whitepaper.pdf
curl -fsSLO https://zycord.com/assets/zycord-whitepaper.pdf.asc
gpg --verify zycord-whitepaper.pdf.asc zycord-whitepaper.pdf

Yeniden derleme — bir sertifikanın yerini gerçekten alan denetim#

Bir özet, dosyanın aktarım sırasında değiştirilmediğini söyler. Yayımcının içine ne koyduğu hakkında hiçbir şey söylemez. Bu ise söyler:

git clone https://gitlab.com/zycord-group/zycord-node.git
cd zycord-node
git checkout v<version>
make build
sha256sum bin/zcd bin/zycordd

Sürümdeki SHA256SUMS.binaries ile karşılaştırın. Tam olarak örtüşmeliler. Örtüşüyorlarsa, indirdiğiniz ikili dosya bu kaynağı içerir ve başka hiçbir şeyi içermez — hiçbir sertifikanın hiçbir şey hakkında öne sürmediği bir iddia.

Go araç zinciri, yeniden ürettiğiniz şeyin bir parçasıdır#

Sürüm go1.26.2. İki farklı Go sürümüyle derlenen aynı kaynak, iki farklı ikili dosyadır; bu bir incelik değil, ölçülebilir bir şeydir — bu deponun kendi sürüm iş akışı, bir zamanlar tek bir işleme ve tek bir bayrak kümesi için Go sürümü başına bir tane olmak üzere üç ayrı SHA-256 değeri kaydetti. Bu yüzden make build, GOTOOLCHAIN=go1.26.2 değerini sabitler ve o araç zincirini kullanamıyorsa, bütün bu sayfanın saptamak için var olduğu kurcalamaya benzeyen bir uyuşmazlık üretmek yerine bir açıklamayla durur.

Sahip olmaya değer iki sonuç:

  • Yukarıda yazan sürüme güvenmek zorunda değilsiniz. Yayımlanan ikili dosya bunu kendisi bildirir: go version -m zcd, onu derleyen araç zincirini, modül ve derleme bayraklarının yanında yazdırır. O satır ile Makefile'daki sabit bir gün çelişirse, ikili dosya bu sayfanın söylediği biçimde derlenmemiştir.
  • Daha eski bir etiketi çıkarmak, kaynağıyla birlikte onun sabitini de çıkarır; böylece eski bir sürümü yeniden derlemek, proje daha yeni bir Go'ya geçtikten sonra da çalışmayı sürdürür.

Satır sonları burada kaynağın bir parçasıdır#

wallet/webui, cüzdan arayüzünü //go:embed ile gömer; dolayısıyla o dosyaların satır sonları ikili dosyadaki baytlardır: CRLF'e dönüştürülmüş bir çıkarma, aynı işlemeden farklı bir zcd derler — masum bir nedeni ve ürkütücü bir görüntüsü olan bir uyuşmazlık. * text=auto eol=lf taşıyan bir .gitattributes, her platformda ve her git yapılandırmasında çalışma ağacında LF verir; böylece taze bir klon her yerde aynı yanıtı verir.

Kapsamadığı iki durum: o dosyadan daha eski bir etiketi yeniden derlemek (çıkarmadan önce core.autocrlf=input ayarlayın) ve core.autocrlf=true ile yapılmış, çekmekle düzelmeyen mevcut bir klon.

-randomx arşivleri, kuruluş gereği yeniden üretilebilir değildir

RandomX C++'tır, dolayısıyla bir cgo derlemesi çıktıya bir sistem C araç zinciri taşır ve kimse onu bayt bayt yeniden üretemez. O arşivlerin sağlama toplamı SHA256SUMS.randomx ile alınır ve SHA256SUMS.binaries dosyasında bilerek bulunmazlar; o dosya, sizin kaynaktan yaptığınız bir derlemenin hangi özeti vermesi gerektiğini listeler. Ağa katılan katman ile tanıklığı yapılan katmanın örtüşmediği tek yer burasıdır — Kurulum altındaki iki katman tablosuna bakın. Bunu belirtmek asıl meseledir: sizin adınıza yapılmış bir varsayım değil, sizin kararınızdır.

Gerçekleştirimi protokole karşı denetleyin#

Bir ikili dosyanın kökenini denetlemekten ayrı olarak, onun protokolü gerçekleştirdiğini de denetleyebilirsiniz. Altın vektörler protokolün kendisidir; onları geçen bağımsız bir gerçekleştirim bir çatallanma değil, bir eştir.

zcd vectors            # check this build against spec/vectors
zcd genesis --testnet  # rebuild block 0 and print its id
zcd params --testnet   # print the frozen parameters

En çok önem taşıyan komut zcd genesis'tir: bir açılış duyurusu, haftalar öncesinden kod etiketine, parametre özetine ve genesis kimliğine bağlanır — ve bu komut, hepsini kaynaktan, herhangi bir makinede, milisaniyeler içinde yeniden kurar. Açık testnet'in değerleri testnet sayfasındadır; başka değerler yazdıran bir derleme, başka bir zincir üzerindeki bir derlemedir ve bağlanmayacaktır.

Bağımsız tanıklıklar#

Bir kişinin bir etiketi yeniden derlemesi, etiketin yeniden üretilebilir olduğunu kanıtlar. Birkaç yabancının onu yeniden derleyip sonucu imzalaması ise epeyce fazlasını kanıtlar ve ciddi projelerin tam da bu nedenle yakınsadığı örüntü budur. Bir etiketi yeniden derleyin, ardından elde ettiğiniz özeti ve derlediğiniz etiketi duyuru başlığına yazın — tutmadığı durumlar dahil; asıl duyulmaya değer olan da odur.