גיין צו די אינהאַלט
צוריק צו נימטשאַט

וויסן באַזע אונטער די קאַפּטער

באַשטעטיקן די קאַנסטראַקשאַן

עפֿענען מקור העלפּס בלויז אויב דער קאָד וואָס איר לויפן איז דער קאָד וואָס איז געווען ארויס. Nymchat איז געבויט דיטערמאַניסטיק אַזוי איר קענען קאָנטראָלירן אַז זיך, פֿון ין די אַפּ אָדער פֿון אַ וואָקזאַל.

רעפּראָדוסיבלע בויען

בילדינג די אַפּ גיט אַ build-manifest.json מיט דעם מקור איבערגעבן, א SHA-256 האַש פון יעדער געדינט HTML, דזשאַוואַסקריפּט און CSS אַסעט, און אַ איין bundleHash איבער אַז גאַנץ אַסעט שטעלן.

דער רעזולטאַט דעפּענדס בלויז אויף די מקור אינהאַלט - אפילו די רעקאָרדעד בויען צייט איז די commit ס צייט סטאַמפּ אלא ווי דער מאָמענט די בויען איז געלאפן - אַזוי ווער עס יז ריבילדינג די זעלבע commit געץ בייטע-יידענטיקאַל טעקעס און די זעלבע bundleHash.

א גיטהוב אַקשאַן דעמאָלט ריבילדז יעדער יבערגעבן ינדיפּענדאַנטלי און סיגנס בויען-פּראָווענאַנס אַטטעסטיישאַנז פֿאַר די האַש און די מאַנאַפעסטיישאַן, אַזוי עס איז אַ געחתמעט רעקאָרד טייפּינג אַ bundleHash צו אַ יבערגעבן אין די ריפּאַזאַטאָרי, געשאפן דורך עפּעס אַנדערש ווי די דיפּלוימאַנט.

וואָס די וועגן דיאַלאָג טשעקס

וועגן אין די כעדער לויפט די טשעק לעבן, אין דיין בלעטערער.

די Nymchat וועגן דיאַלאָג, וואָס ווייַזן די ווערסיע, בויען אָרנטלעכקייַט און באַרעכטיקן קאַנאַרי סטאַטוס.
די וועגן דיאַלאָג: ווערסיע, בויען אָרנטלעכקייַט, באַרעכטיקן קאַנאַרי און אַ דירעקט שורה צו די דעוועלאָפּער.

עס שייַעך-פעטטשעס יעדער אַסעט די בלאַט איז פאקטיש פליסנדיק, האַשעס עס מיט די וועב קריפּטאָ אַפּי, און פאַרגלייַכן קעגן די מאַנאַפעסטיישאַן. דערנאָך - און דאָס איז דער טייל וואָס איז וויכטיק - עס רעקאַמפּיוץ די bundleHash פון די האַשעס עס נאָר גערעכנט, נישט פֿון אַלץ וואָס דער מאַניפעסט קליימז, און קוקט דאָס אין די געחתמעט אַטטעסטאַז פון די ריפּאַזאַטאָרי דורך די GitHub API.

אַז איז וואָס סטאַפּס אַ דיפּלוימאַנט פון וואַוטשינג פֿאַר זיך: סערווינג מאַדאַפייד טעקעס צוזאַמען מיט אַ וואָס ריכטן מאַנאַפעסטיישאַן נאָך פיילז, ווייַל די ריקאָמפּיוטיד האַש האט קיין אַטטעסטיישאַן.

סטאַטוסמיטל
&טשעק; וועראַפייד באַאַמטער אַפּ (n/n)יעדער אַסעט שוועבעלעך, די ריקאָמפּיוטיד פּעקל האַש איז אַטטעסטעד דורך די ריפּאַזאַטאָרי, און דער בלאַט איז געדינט פֿון דער באַאַמטער פעלד.
⚠ וועראַפייד בויען · נישט דער באַאַמטער אַפּדער קאָד איז עכט און אַטטעסטעד, אָבער דאָס איז אַ שפּיגל אויף אן אנדער פעלד. א שפּיגל קען נישט באַזייַטיקן דעם ווארענונג אָן פיילינג וועראַפאַקיישאַן.
✗ ניט פּאַסיקאַ אַסעט טוט נישט האַש צו וואָס די מאַנאַפעסטיישאַן זאגט.
✗ אַנאַפישאַל בויעןדי רעקאַמפּיוטיד פּעקל האַש האט קיין אַטעסטאַטיאָן פון די ריפּאַזאַטאָרי - אַ זיך-געמאכט באַשייַמפּערלעך.
⚠ פּראָווענאַנסע אַנריטשאַבאַלדי GitHub API קען נישט זיין ריטשט, אַזוי די אַטעסטיישאַן קען נישט זיין אָפּגעשטעלט אין קיין וועג.

באַשטעטיקן עס זיך

ריבילד די יבערגעבן די וועגן דיאַלאָג נעמען און פאַרגלייַכן:

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

די אַנדרויד און יאָס אַפּפּס

דער טשעק אויבן איז אַ וועב-אַפּ טשעק, און די סיבה איז ווערט סטייטינג קלאָר: אַ געבוירן אַפּ קען נישט טאָן די זעלבע זאַך צו זיך. וואָס לויפט אויף דיין טעלעפאָן איז קאַמפּיילד מאַשין קאָד, נישט די מקור אין די ריפּאַזאַטאָרי, און גאָרנישט די אַפּ קענען רעכענען אויף די מיטל ריליסיז איינער צו די אנדערע.

אַנדרויד קענען טאָן די ווייַטער בעסטער זאַך. די אינסטאַלירן .apk איז אַ טעקע די אַפּ קענען לייענען און האַש, און דער האַש פון יעדער ארויס מעלדונג איז שוין עפנטלעך: ארויסגעבן צו די Zapstore סיגנאַלז אַ נאָסטר געשעעניש מיט די APK SHA-256 און זיין סיינינג באַווייַזן SHA-256. אַזוי די אַנדרויד וועגן דיאַלאָג האַשעס די אַפּק עס איז פליסנדיק פון, ברענגען די געחתמעט events, האלט בלויז די אָנעס געחתמעט דורך די דעוועלאָפּער ס שליסל, און קאַמפּערז. עס ווייזט די צוויי האַשעס אויך, אַזוי איר קענען איבערחזרן די טשעק אַוועק די מיטל: אראפקאפיע די ארויס אַפּק, לויפן sha256sum אויף אים, און קוק אין דער זעלביקער געשעעניש זיך.

אַן אַפּ אינסטאַלירן פֿון Google פּלייַ קענען ניט זיין אָפּגעשטעלט אויף דעם וועגGoogle re-signs every upload with its own key and builds a separate APK for each device, so what lands on your phone is not the file the developer produced and its hash matches nothing that could be published. The app recognizes a Play install and says so rather than reporting a failure.

יאָס קענען ניט זיין אָפּגעשטעלט בייַ אַלע. עפּל ענקריפּץ און שייַעך-צייכן יעדער אראפקאפיע ינדיווידזשואַלי, אַזוי אַ האַש קאַמפּיוטאַד אויף דיין iPhone איז יינציק צו דיין iPhone און איז גאָרנישט פארעפנטלעכט ערגעץ. די וועגן דיאַלאָג זאגט דעם גלייך אלא ווי צו ווייַזן אַ ריאַשורינג סטאַטוס אַז מיטל גאָרנישט. אויב איר ווילט אַ Nymchat איר קענען באַשטעטיקן אויף עפּל ייַזנוואַרג, נוצן די וועב אַפּ, וואָס טשעק יעדער טעקע עס איז פליסנדיק.

וואָס קיין פון דעם באַווייַזן

א טשעק וואָס אַן אַפּ לויפט אויף זיך קען נישט באַווייַזן אַז די אַפּ איז ערלעך - ווער סע מאַדאַפייד עס קען אויך אַראָפּנעמען די טשעק. וואָס עס פּראָוועס איז דער פּראָסט פאַל: אַז די קאָפּיע איר אינסטאַלירן איז די קאָפּיע וואָס איז ארויס. אַז איז ווערט ווייל ווייַל די וואַלועס עס קאַמפּערז זענען עפנטלעך, אַזוי עמעצער אַנדערש ווי איר קענען קאָנטראָלירן זיי און דיסאַגרי.

דער באַרעכטיקן קאַנאַרי

א באַרעכטיקן קאַנאַרי איז אַ דערקלערונג, ארויס אויף אַ פאַרפעסטיקט פּלאַן, וואָס דער דעוועלאָפּער האט נישט באקומען א געהיימע רעגירונג באפעל וואס זיי זענען פארבאטן ארויסצוגעבן — א נאַשאַנאַל סעקוריטי בריוו, אַ פיסאַ סדר. דער דעוועלאָפּער קענען זיין געצווונגען צו בלייבן שטיל וועגן אַזאַ אַ סדר, אָבער קענען ניט זיין געצווונגען צו ליגן, אַזוי די קאַנאַרי געגאנגען אַלט אָדער פאַרשווינדן איז זיך דער סיגנאַל.

עס לעבט אין canary.json אין דער וואָרצל פון די ריפּאַזאַטאָרי און איז פעטשט גלייַך פֿון GitHub, אַזוי זיין געשיכטע איז אַדיטאַבאַל ינדיפּענדאַנטלי פון וועלכער די דיפּלויד פּלאַץ זאגט. די וועגן דיאַלאָג קאָליר קאָודז עס:

קאָלירמיטל
גרין — אלץ קלארגעחתמעט, קראַנט און די כסימע גלייַכן די שליסל פון די דעוועלאָפּער. קיין סוד סדר איז געווען באקומען.
געל — איבעריק, אָדער ניט אַלע קלאָרעס איז נישט דערקוויקט דורך זיין סטייטיד דאַטע, אָדער זיין allClear פאָן איז פאַלש. מען קען נישט אויסשליסן א פארשווייגטע באפעל.
רויט — אומגילטיגע אונטערשריפט, אדער אוועקדי כסימע שטימט נישט מיט דער שליסל פון די דעוועלאָפּער, אָדער די טעקע איז גאָר אַוועקגענומען. באהאנדלען דעם ווי אַ ערנסט ווארענונג.

די פרישקייט אַנקער

די געחתמעט קאַנאַרי עמבעדז די לעצטע ביטקאָין בלאָק הייך און האַש אין דעם מאָמענט פון סיינינג. אַז כאַש קען נישט האָבן געווען באקאנט איידער די בלאָק עקסיסטירט, וואָס באַווייַזן די קאַנאַרי איז געווען געחתמעט נאָך אַ ספּעציפיש פונט אין צייט אלא ווי פאַר-געחתמעט אין פאַרנעם חדשים פריער. די וועגן דיאַלאָג פֿאַרבינדט די אַנקער צו אַ בלאָק Explorer אַזוי איר קענען קאָנטראָלירן עס.