Sıfır bilgi kanıtları (zero-knowledge) gerçekte ne işe yarıyor? Yazılımcı gözüyle sade bir anlatım
Sıfır bilgi kanıtı, bir şeyin doğru olduğunu o şeyin kendisini göstermeden ispatlamanın yolu. Klasik örnek yaş doğrulaması: on sekiz yaşından büyük olduğunuzu doğum tarihinizi göstermeden kanıtlamak. Doğrulayan taraf yalnızca 'evet, bu kişi şartı sağlıyor' bilgisini öğreniyor. Bunu bir de hesaplama tarafında düşünmek lazım: bir programın belirli bir girdiyle çalıştırıldığında belirli bir çıktıyı verdiğini, programı tekrar çalıştırmadan kontrol etmek.
Blokzincir dünyasında bu ikinci kullanım çok yaygınlaştı. Bazı ikinci katman ağlar, binlerce işlemi zincir dışında işleyip ana ağa yalnızca bunların doğru işlendiğine dair kısa bir kanıt gönderiyor. Ana ağ her işlemi tekrar hesaplamıyor, kanıtı kontrol ediyor. Bu, maliyeti düşürmenin en somut yolu oldu.
Gizlilik tarafındaki kullanım daha az olgun ama bence daha ilginç. Kimlik doğrulamada kişinin bütün bilgisini değil yalnızca gerekli özelliğini paylaşması, oylamada kimin oy verdiğini gizleyip oyların doğru sayıldığını kanıtlamak gibi örnekler var.
Pratikte karşılaştığım sınırlar şunlar:
1. Kanıt üretmek hesaplama açısından pahalı. Doğrulama hızlı ama kanıtı üreten taraf ciddi kaynak harcıyor.
2. Devre yazmak alışılmış programlamaya benzemiyor; hata ayıklamak zor, uzman sayısı az.
3. Kanıt yalnızca kendisine verilen veriyi doğruluyor. Girdi verisi yanlışsa kanıt kusursuz şekilde yanlış bir şeyi kanıtlıyor.
Bu üçüncü madde bizim toplantılardaki yanlış anlamanın kaynağıydı. Müşteri 'veri doğru mu' sorusunu çözmek istiyordu, sıfır bilgi kanıtı ise 'hesaplama doğru mu' sorusunu çözüyor. İkisi farklı problemler.
Benim vardığım yer şu: bir projede sıfır bilgi kanıtı öneren biri varsa önce kimin neyi kimden gizlemek ya da neyi tekrar hesaplamadan doğrulamak istediğini tek cümleyle yazmasını istiyorum. Yazamıyorsa muhtemelen ihtiyaç yok. Bu alanda üretimde çalışan biri varsa, hangi problemi çözmek için kullandığınızı duymak isterim.



@madda