Kanıt ve doğrulama
#Bağımsız doğrulama
Ürünün merkezî iddiası, bir kaydın sonradan değiştirilemeyeceğidir. Bu iddia, tam olarak sizin ve denetçinizin onu bize sormadan kontrol edebildiği kadar değerlidir. Bu sayfa kontrolün nasıl yapıldığını anlatır; isteyen kendi doğrulayıcısını yazıp aynı cevabı alabilir.
#Üç katman
| Katman | Ne yapar | Kim doğrular |
|---|---|---|
| Zincir | Her kayıt bir öncekinin özetini taşır. Aradan bir kayıt çıkarılır ya da değiştirilirse zincir kırılır. | Kayıtları elinde tutan herkes, anahtarsız |
| Günlük checkpoint | Her gün zincirin son kaydı Ed25519 ile imzalanır. | Açık anahtarı olan herkes |
| Aylık çapa | Ay kapanırken bölümün tamamı imzalı bir çapayla mühürlenir; bir sonraki ay bu çapaya bağlanır. | Açık anahtarı olan herkes |
Veritabanı tarafında ayrıca: uygulamanın veritabanı kullanıcısı denetim koleksiyonunda yalnız ekleme ve okuma yapabilir; güncelleme ve silme yetkisi yoktur.
#Özet nasıl hesaplanır
Kayıttan hash ve _id alanları çıkarılır, kalan nesne RFC 8785 (JCS) ile kanonik biçime çevrilir ve SHA-256(prev_hash ‖ kanonik_form) alınır. Sonuç küçük harfli onaltılıktır. Bölümün ilk kaydında prev_hash sabit bir başlangıç değeridir.
Checkpoint imzası, belgenin signature alanı çıkarılmış hâlinin aynı kanonik biçimi üzerinden Ed25519 ile atılır. Checkpoint'in last_seq kaydının hash'i, belgenin last_hash değeriyle aynı olmalıdır; bu adım zinciri imzaya bağlar.
#Doğrulayıcı aracı
Tanık ile birlikte gelen nev-verify, ağ geçidine bağımlı değildir ve çevrimdışı çalışır: kayıtlar bir USB bellekte, denetçi kendi bilgisayarında.
nev-verify --records kayitlar.jsonl \
--checkpoint checkpoint.json \
--public-key checkpoint.pem.pub
| Çıkış kodu | Anlamı |
|---|---|
0 | Doğrulandı |
1 | Bulgu var; rapor hangisi olduğunu yazar |
2 | Çalıştırılamadı: eksik argüman, okunamayan dosya |
--json makine okunur çıktı verir. --checkpoint verilmezse yalnız zincir doğrulanır ve rapor bunun neyi kanıtlamadığını açıkça yazar.
#Girdiyi nereden alırsınız
Kayıtlar: konsol oturumuyla dönemi sayfa sayfa okuyun; sıra önemli değildir, araç kendisi sıralar.
curl -s --cookie "$COOKIE" \
"http://localhost:8080/admin/v1/audit/records?part=2026-09&limit=500" \
| jq -c '.records[]' >> kayitlar.jsonl
# yanıttaki page.next_before_seq null olana kadar &before_seq=<değer> ile tekrarlayın
Checkpoint: veritabanındaki audit_checkpoints koleksiyonunda.
Açık anahtar: imza anahtarı üretilirken yanına yazılan .pub dosyası. Denetçiye verilecek dosya odur; özel anahtar değil.
#Konsoldan doğrulama
Yönetim API'sindeki GET /admin/v1/audit/verify?part=2026-09 ucu aynı zincir doğrulamasını sunucu tarafında yapar ve sonucu döner. Bu, günlük kontrol için uygundur; bağımsız doğrulama için değildir, çünkü ürüne sormaktadır.
#Yedekten dönüşte
Geri yüklenen bir kurulumun "servisler ayağa kalktı" ile bitmediğini unutmayın: defterin bozulmadan döndüğünü nev-verify ile gösterin. Ayrıntı: Yedekleme.