База ведаў Пад капотам
Праверка зборкі
Адкрыты зыходны код дапамагае толькі ў тым выпадку, калі код, які вы выкарыстоўваеце, гэта той самы код апублікавана. Nymchat пабудаваны дэтэрмінаваным чынам, так што вы можаце праверыць гэта самастойна, знутры прыкладання або з тэрмінала.
Для зручнасці гэтая старонка перакладзена машынай. Прымяняецца англійская арыгінал.
Узнаўляльныя зборкі
Стварэнне прыкладання вылучае a build-manifest.json які змяшчае зыходны фікс, a
Хэш SHA-256 кожнага абслугоўванага актыву HTML, JavaScript і CSS, а таксама асобнага
bundleHash над усім наборам актываў.
Выхад залежыць толькі ад зыходнага кантэнту - нават запісаны час зборкі з'яўляецца
пазнака часу фіксацыі, а не момант запуску зборкі - таму кожны, хто перабудоўвае тое ж самае
commit атрымлівае ідэнтычныя па байту файлы і тое ж самае bundleHash.
Затым дзеянне GitHub перабудоўвае кожнае фіксаванне незалежна і падпісвае паходжанне зборкі
атэстацыі для хэша і маніфеста, таму ёсць падпісаны запіс, які звязвае a
bundleHash да фіксацыі ў сховішчы, створанай чымсьці іншым, чым
разгортванне.
Што правярае дыялогавае акно "Аб".
Аб у загалоўку запускае праверку ў прамым эфіры ў вашым браўзеры.
Ён паўторна атрымлівае кожны актыв, на якім фактычна запушчана старонка, хэшуе яго з дапамогай Web Crypto API і
параўноўвае з маніфестам. Затым - і гэта частка, якая мае значэнне - гэта
пералічвае bundleHash з хэшаў гэта проста разлічваецца, а не з
усё, што сцвярджае маніфест, і шукае гэта ў падпісаных атэстацыях сховішча
праз API GitHub.
Вось што перашкаджае разгортванню паручыцца само за сябе: абслугоўванне змененых файлаў разам з адпаведны маніфест па-ранейшаму не атрымліваецца, таму што паўторна вылічаны хэш не мае атэстацыі.
| Статус | Сродкі |
|---|---|
| &праверыць; Праверанае афіцыйнае прыкладанне (н/н) | Кожны актыв супадае, перавылічаны хэш пакета пацверджаны рэпазіторыем, і старонка абслугоўваецца з афіцыйнага дамена. |
| ⚠ Правераная зборка · не з'яўляецца афіцыйным дадаткам | Код сапраўдны і зацверджаны, але гэта люстэрка ў іншым дамене. Люстэрка не можа выдаліць гэтае папярэджанне без праверкі. |
| ✗ Неадпаведнасць | Актывы не хэшуюць тое, што сказана ў маніфесце. |
| ✗ Неафіцыйная зборка | Паўторна вылічаны хэш пакета не мае атэстацыі з рэпазіторыя — гэта самаробны маніфест. |
| ⚠ Паходжанне недасяжнае | API GitHub недасяжны, таму атэстацыю немагчыма праверыць у любым выпадку. |
Правяраючы гэта самастойна
Аднавіце фіксацыю імёнаў дыялогавых вокнаў «Аб» і параўнайце:
git clone https://github.com/Spl0itable/NYM
cd NYM
git checkout <commit shown in the About dialog>
npm ci
npm run build # prints "Build hash: <bundleHash>"
Надрукаваны хэш павінен адпавядаць і таму, што ў дыялогавым акне «Аб праграме», і таму, што ёсць у гэтай фіксацыі рэзюмэ па паходжанні зборкі. Вы таксама можаце праверыць подпіс непасрэдна з GitHub CLI:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
Праграмы для Android і iOS
Вышэйпрыведзеная праверка - гэта праверка вэб-праграмы, і прычыну варта назваць прама: родная праграма не можа зрабіць тое ж самае з сабой. Тое, што працуе на вашым тэлефоне, з'яўляецца скампіляваным машынным кодам, а не крыніца ў сховішчы, і нічога, што праграма можа вылічыць на прыладзе, не адносіцца да іншае.
Android можа зрабіць наступнае лепшае. Усталяваны .apk гэта файл, які праграма можа прачытаць
і хэш, і хэш кожнага апублікаванага выпуску ўжо публічны: публікацыя ў
Zapstore
падпісвае падзею Nostr, якая змяшчае SHA-256 APK і SHA-256 яго сертыфіката подпісу. Так што
Android Аб дыялог хэшуе APK, з якога ён запускаецца, здабывае падпісаныя
падзеі, захоўвае толькі тыя, якія падпісаны ключом распрацоўшчыка, і параўноўвае. Гэта паказвае дваіх
таксама хэшы, так што вы можаце паўтарыць праверку прылады: спампаваць апублікаваны APK, запусціць
sha256sum на ім, і самі паглядзіце на тую ж падзею.
Прыкладанне, усталяванае з Google Play, нельга праверыць такім чынам, і гэта не знак, што нічога няправільна. Google перапісвае кожную загрузку з уласнымі ключамі і пабудавае асобны APK для кожнага прыладу, так што тое, што прыземляецца на вашым тэлефоне, не з'яўляецца файлам, які вырабляе распрацоўшчык, і яго хаша не адпавядае нічога, што можа быць апублікавана.
IOS наогул немагчыма праверыць. Apple шыфруе і перападпісвае кожную загрузку індывідуальна, таму хэш, вылічаны на вашым iPhone, унікальны для вашага iPhone і не супадае ні з чым апублікавана дзе заўгодна. У дыялогавым акне "Аб" гэта прама сказана, а не абнадзейвае статус, які нічога не значыць. Калі вы хочаце Nymchat, які вы можаце праверыць на абсталяванні Apple, выкарыстоўвайце Інтэрнэт дадатак, якое правярае кожны запушчаны файл.
Праверка, якую запускае праграма сама па сабе, не можа пацвердзіць, што праграма сумленная - незалежна ад таго, хто яе змяніў можа таксама зняць чэк. Што гэта даказвае, гэта звычайны выпадак: што копія вас усталяваная копія, якая была апублікаваная. Гэта варта мець, таму што гэта шануе параўнанне агульнадаступнае, таму нехта, акрамя вас, можа праверыць іх і не пагадзіцца.
Ордэрная канарэйка
Ордэрная канарэйка - гэта апублікаваная па фіксаваным графіку заява, якую мае распрацоўшчык не атрымалі сакрэтны ўрадавы загад, ім забаронена разгалошваць — а Ліст нацыянальнай бяспекі, загад FISA. Забудоўшчыка можна прымусіць маўчаць такі парадак, але нельга прымусіць хлусіць, таму канарэйка чэрствае або знікае сам сігнал.
Жыве ў canary.json у корані сховішча і атрымоўваецца непасрэдна
з GitHub, таму яго гісторыю можна правяраць незалежна ад таго, што сказана на разгорнутым сайце.
У дыялогавым акне «Аб» ён пазначаны колерам:
| Колер | Сродкі |
|---|---|
| Зялёны — усё зразумела | Падпісана, актуальна, і подпіс адпавядае ключу распрацоўшчыка. Ніякага сакрэтнага загаду не паступала. |
| Жоўты — пратэрмінавана, ці не ўсё зразумела | Ён не быў абноўлены да заяўленай даты або яго allClear сцяг ілжывы. Нельга выключаць і замоўчаны загад. |
| Чырвоны — подпіс несапраўдны, або яго няма | Подпіс не супадае з ключом распрацоўшчыка, або файл быў цалкам выдалены. Успрымайце гэта як сур'ёзнае папярэджанне. |
Якар свежасці
Падпісаная канарэйка ўбудоўвае апошнюю вышыню блока біткойнаў і хэш на момант падпісання. Гэты хэш не мог быць вядомы да існавання блока, што даказвае, што канарэйка была падпісаны пасля канкрэтны момант часу, а не папярэдне падпісаныя масава месяцамі раней. Дыялогавае акно «Аб праграме» звязвае прывязку з правадыром блокаў, каб вы маглі праверыць яе.