Dokumentasi / 08
Lihat bagaimana bukti berfungsi
Satu mesej boleh berubah. Rekod apa yang anda perhatikan harus kekal boleh disemak.
Terokai dua eksperimen kecil di bawah. Mereka menggunakan mesej rekaan, kekal di pelayar anda dan tidak pernah menyambung ke Telegram.
Satu mesej, tiga pemerhatian
Apabila Telegram menghantar mesej baru, suntingan dan pemberitahuan pemadaman, pengumpul menambah tiga pemerhatian berasingan. Suntingan tidak menggantikan rekod pertama. Pemberitahuan pemadaman tidak memadamkannya.
Mesej itu telah hilang daripada paparan sembang.
- 01✓
message.newBertemu pada pukul 10:00
- 02✓
message.editedBertemu pada pukul 11:00
- 03✓
message.deletedNotis pemadaman untuk #42
Ketiga-tiga pemerhatian yang diterima kekal dalam jurnal.
Notis pemadaman tidak memberikan masa pemadaman yang boleh dipercayai mahupun individu yang memadam mesej. Menjaga nilai-nilai tersebut tidak diketahui mengekalkan perbezaan antara pemerhatian dan andaian.
Ubah rekod. Ikuti hash.
Setiap rekod mengandungi hash rekod sebelumnya. Hashnya sendiri merangkumi medan peristiwa, termasuk pautan tersebut. Titik pemeriksaan yang disimpan secara luaran menetapkan panjang jurnal tertentu dan hash kepala.
h₁ = SHA-256(e₁)Pautan ke 64 sifarh₂ = SHA-256(e₂)Termasuk h₁h₃ = SHA-256(e₃)Termasuk h₂h₃Bandingkan sempadan tetap ini dengan jurnal yang disediakan.Mengubah suatu peristiwa akan mengubah hashnya. Membina semula rantaian akan mengubah kepalanya. Menghilangkan ekor menjadikannya lebih pendek daripada checkpoint yang disimpan.
Periksa rekod 2 dan semua hash sepenuhnya
Ini adalah JSON UTF-8 tepat yang di-hash dalam contoh ini. Nilai adalah rekaan; sembilan medan dan serialisasi sepadan dengan format jurnal.
- Rekod simpanan hash 2
- Hash rekod 2 dikira semula
Peraturan sebenar, dalam beberapa baris
hi = hex(SHA-256(C(ei)))
σi = Ed25519.Sign(sk, unhex(hi))
C menyirialisasikan sembilan medan peristiwa sebagai JSON UTF-8: kunci disusun, tiada ruang tambahan, tiada pelarian ASCII dan tiada NaN/infinity. previous_hash bagi peristiwa ialah hi−1. h0 yang dipaparkan bermaksud 64 aksara sifar; tandatangan merangkumi 32 bait digest mentah.
Kesembilan medan ialah seq, observed_at, source_at, kind, chat_id, message_id, actor_id, payload dan previous_hash. Ini ialah pengekodan JSON yang didokumenkan oleh TgWitness; hash dan tandatangan itu sendiri bukan medan input hash.
hexport[Ncheckpoint] = Hcheckpoint
Sahkan tandatangan checkpoint di bawah kunci pengumpul yang dipin, kemudian bandingkan sempadannya dengan jurnal yang disahkan. Eksport kemudian mungkin mengandungi lebih banyak rekod; ia masih mesti sepadan dengan checkpoint terdahulu.
Tiga soalan, tiga pemeriksaan berbeza
Sahkan hash dan tandatangan terhadap kunci yang dipercayai secara berasingan.
02 / KELANJUTANApa yang telah disimpan sebelum ini?Bandingkan eksport yang disahkan dengan titik pemeriksaan yang disimpan oleh saksi berasingan.
03 / PENYAMPAIANAdakah acara ujian ini tiba?Padankan tindakan hantar terkawal, sunting dan padam dengan jurnal setiap akaun.
Rantaian hash yang sepadan menjawab soalan integriti. Ia tidak menetapkan penghantaran Telegram yang lengkap, kebenaran mesej atau masa pemerhatian yang dipercayai secara bebas.
Ikuti siasatan keseluruhan akaun dari pemerolehan hingga pakej kes.