Block zinciri, kripto paranın temel taşı olarak bilinmektedir. Blok zincirini güvenli tutmak için önceki bloklardan gelen veriler şifreleme veya bir dizi sayı ve harf üzerinde "hash" yapılmaktadır. Bu işlem, blok girdisini sabit uzunlukta bir çıktı şeklinde üreten bir fonksiyon aracılığıyla işleyerek yapılmaktadır.
Hash oluşturmak için kullanılan fonksiyon deterministik bir fonksiyondur, bir başka deyişle aynı girdi her kullanıldığında aynı sonucu üretecektir. Aynı zamanda işlevin verimli bir şekilde karma girdi oluşturabileceği, (blok zincirinin güvenliğini sağlayacak şekilde) girdiyi belirlemeyi zorlaştırdığı ve girdide küçük değişiklikler yaparak çok farklı bir hash oluşturabileceği anlamına da gelmektedir. Bu karmaşık sistem, blok zincirinin gizlilik ağını oluşturmaktadır.
Nonce, yalnızca bir kez kullanılabilen bir sayı veya değeri ifade etmektedir. Noncelar genellikle kimlik doğrulama protokollerinde ve kriptografik hash işlevlerinde kullanılmaktadırlar. Blok zinciri teknolojisi bağlamında nonce, madencilik sürecinde sayaç olarak kullanılan rastgele olduğu varsayılan bir sayı anlamına gelmektedir.
Nonce Nasıl Bulunur?
Hangi dizenin nonce olarak kullanılacağını belirlemek önemli miktarda deneme yanılma gerektirmektedir. Bir madenci nonce tahmin etmeli, onu mevcut başlığın hash değerine eklemeli, değeri yeniden hashlemeli ve bunu hedef hash ile karşılaştırmalıdır. Ortaya çıkan hash değeri gereksinimleri karşılıyorsa, madenci bir çözüm üretmiş bulunmakta ve böylelikle blok ile ödüllendirilmektedir.
Bir madencinin ilk denemede nonceyi başarılı bir şekilde tahmin etmesi yüksek ihtimal değildir, bu durum da madencinin doğruyu bulmadan önce potansiyel olarak çok sayıda nonce seçeneğini deneyebileceği anlamına gelmektedir. Hedeften daha az bir hash yaratmanın ne kadar zor olduğunun bir ölçüsü olarak, zorluk ne kadar büyükse çözüm üretmenin daha uzun sürmesi doğru orantılı olarak artmaktadır.
Blok zorluğu tüm ağın içinde aynı tutulmaktadır, bu durum da tüm madencilerin doğru hash'i bulma şansının aynı olduğu anlamına gelmektedir. Kripto para ağları tipik olarak belirli bir zaman diliminde işlenmesini istedikleri hedef blok sayısını belirlemekte ve bu hedefe ulaşılmasını sağlamak için zorluğu periyodik olarak ayarlamaktadır. İşlenen blok sayısı bu hedefi karşılamıyorsa zorluk düşürülmekte, bu da işlem süresinin sınırını aşan süre miktarına ayarlanarak gerçekleştirilmektedir.
Örnek olarak Bitcoin madencilerinin, belirli gereksinimleri karşılayan (yani belirli sayıda sıfır ile başlayan) bir blok hashini hesaplamak için birden fazla girişimde bulunurken geçerli bir nonce denemesi ve tahmin etmesi gerekmektedir. Yeni bir blok madenciliği yapmak için rekabet ederken, geçerli bir blok hashiyle sonuçlanan bir nonce bulan ilk madenciye, bir sonraki bloğu blok zincirine ekleme hakkı verilmekte ve bunu yaptığı için ödüllendirilmektedir. Başka bir deyişle, madencilik süreci, geçerli bir çıktı üretilinceye kadar birçok farklı nonce değeriyle sayısız hash işlevi gerçekleştiren madencilerden oluşmaktadır. Bir madencinin karma çıktısı önceden belirlenmiş eşiğin altına düşerse, blok geçerli kabul edilir ve blok zincirine eklenmektedir. Çıktı geçerli değilse, madenci farklı nonce değerleri ile denemeye devam etmektedir. Yeni bir blok başarıyla çıkarılıp doğrulandığında, süreç baştan başlamaktadır.
Bitcoin'de ve çoğu iş kanıtı (Proof of Work) sisteminde nonce, madencilerin hash hesaplamalarının çıktısını yinelemek için kullandıkları rastgele bir sayı olarak tanımlanmaktadır. Madenciler, her hesaplamanın yeni bir nonce değeri aldığı bir deneme yanılma yöntemi kullanmaktadır. Bu deneme yanılma yöntemi kullanılmasının sebebi geçerli bir nonceyi doğru bir şekilde tahmin etme olasılığının sıfıra yakın olmasıdır.
Her yeni bloğun ortalama olarak her on dakikada bir üretilmesini sağlamak için, ortalama hash girişim sayısı protokol tarafından otomatik olarak ayarlanmaktadır. Bu süreç, zorluk ayarı olarak bilinmektedir. Madencilik eşiğini belirleyen şey bu zorluk ayarıdır (yani, blok karmasının geçerli sayılması için kaç sıfırla başlaması gerekir bunu belirleyen şeydir). Yeni bir blok madenciliği yapmanın zorluğu, bir blok zinciri sistemine adanmış hash gücü (hash rate) miktarı ile ilgili olmaktadır. Ağa adanmış hash gücü ne kadar fazlaysa, eşik o kadar yüksek olmakta, bu da rekabetçi ve başarılı bir madenci olmak için daha fazla hesaplama gücünün gerekli olacağı anlamına gelmektedir. Madenciler madencilik yapmaktan vazgeçerler ise, zorluk ayarlanacak ve eşik düşecektir, bu nedenle madencilik için daha az hash gücü gerekecek, ancak protokol gereği hash gücü ne olursa olsun on dakikalık bir programın takip edilmesi sağlanacaktır.
Nonce Nerelerde Kullanılır?
Nonce’lar, satın almalar için kimlik doğrulama, iki faktörlü kimlik doğrulama veya diğer hesap kurtarma ve kimlik uygulamaları, elektronik imzalar, veri şifreleme ve daha fazlası olmak üzere bir dizi bilgisayar ağı uygulaması için kullanılmaktadır.
Özel Hususlar
Blok zincirine işlem eklemek, önemli düzeyde bir bilgisayar işlem gücü gerektirmektedir. Blokları işleyen kişi ve şirketler madenciler olarak tanımlanmaktadır. Madenciler, yalnızca hedef hashi adı verilen belirli bir dizi gereksinimi karşılayan bir hash oluşturan ilk kişi olduklarında zararlar da karşılanmaktadır.
Hashi tahmin etme işlemi blok başlığında başlamaktadır. Blok sürüm numarasını, bir zaman damgasını, önceki blokta kullanılan hashi, Merkle Root'un hashini, nonceyi ve hedef hashini içermektedir.
Blok yukarıda da belirtildiği gibi, hash hedefte belirtilen gereksinimleri karşıladığı zaman blok zincirine eklenmektedir. Nonce'yi tahmin etmek için çözümler arasında geçiş yapmak iş kanıtı (Proof of Work, PoW) olarak adlandırılmaktadır, ayrıca değeri bulabilen madenciye blok verilerek kripto para ile ödeme yapılmaktadır.