Önsöz
Bilgisayar programlarında "rastgele sayılar" nadir değildir ve geliştiriciler sayısal simülasyon ve tahmin için genellikle rasgele sayılar kullanır. C ++ programlarında, rastgele sayılar oluşturmak için genellikle belirli bir çekirdek kullanırız. Bilgisayar programlarında rasgele sayılar, gerçek rasgele sayılara ve sözde rasgele sayılara bölünebilir. Elek, çark vb. Kullanmak gibi gerçek rastgele sayıyı elde etmek çok zordur. Sözde rastgele sayılar için ikiye ayrılırız:
Rasgele sayıların aşağıdaki gibi 3 özelliği vardır:
Rastgele sayıların özelliklerinin rastgele sayıların sınıflandırılmasıyla belirli bir ilişkisi vardır.Örneğin, zayıf sözde rastgele sayıların yalnızca rastgeleliği karşılaması gerekirken, güçlü rasgele sayıların rasgeleliği ve öngörülemezliği karşılaması gerekir ve gerçek rasgele sayıların aynı anda 3'ü karşılaması gerekir. Özellikleri.
Yukarıdakiler makroskopik rastgele sayı durumudur, ancak blok zinciri senaryosunda rastgele sayı farklıdır. Dağıtılmış uygulamalar için, blok zinciri doğal olarak rastgele sayıların üretilmesinde dezavantajlara sahiptir. Tüm kullanıcıların aynı rasgele sayı değerini alabilmesi ve gecikmeyi çok yüksek yapmaması gerçekten zor bir sorundur.
Blok zincirinde rastgele sayılar, çekilişler, doğrulama kodları, belirteçler ve şifre uygulama senaryoları (anahtar oluşturma, tuz oluşturma) gibi birçok uygulama senaryosuna sahiptir.
Rastgele sayıların güvenliği de uzun süredir devam eden bir sorundur. Geniş bir ilke şudur: rastgeleliğin oluşumu en iyi şekilde herhangi bir birey tarafından kontrol edilmez. Örneğin gelecekte belirli bir Bitcoin bloğunun verilerinden rastgelelik elde etmenin yolu inandırıcı değildir, çünkü rastlantısallık aslında sonunda bir kişi tarafından belirlenir ve ilgili kişinin kötülük yapmadığı kanıtlanamaz.
Aşağıda, blok zincirindeki rastgele sayı üretimini ayrıntılı olarak analiz edecek ve mevcut rastgele sayı güvenlik kodunu uygulayacağız.
Blok zincirindeki rastgele sayılar
PoW şemasının, tüm ağın birlikte karma hesaplamalar yapmasına izin vermek ve soru sorulduğunda bir karma hesaplama bulmacası kurmak olduğunu biliyoruz, ilk kim hesaplarsa kazanır. Yani bu, yüksek hesaplama gücüyle kazanma olasılığının yüksek olduğu ve düşük bilgi işlem gücüyle kazanma olasılığının düşük olduğu anlamına gelir.Bu şekilde, kazananın rastgele olması garanti edilir. Rastgele sayıların ayarı, hesaplama problemlerinin ayarında da mevcuttur.Bu rastgele sayının tüm düğümler tarafından görülmesi gerekir ve tahmin edilemez olabilir.
Pos için, Pow'taki güç israfını çözmek için, bloğu üretmek üzere rastgele bir düğüm seçmeyi seçti ve seçilme olasılığı sahip olduğu payla ilişkilidir. Sistem rastgele sürecin tahmin edilemez ve doğru olduğunu garanti ederse, kötü niyetli düğüm yalnızca payını artırarak seçilme olasılığını artırabilir, böylece çift harcama saldırısının başarı olasılığını artırabilir. Pow ile karşılaştırıldığında, bir Pos saldırganının önce bir saldırıya ulaşmak için büyük bir para birimi sahibi olması gerekir.Kıranın fiyatı saldırı nedeniyle keskin bir şekilde düşerse, saldırgan da en büyük zararı yaşar.
Analizimize göre, yukarıdaki iki durum rastgele sayıların üretilmesini içerir. Öngörülebilir bir durum gibi burada rastgele sayı ile ilgili bir sorun olduğunu varsayıyoruz. O zaman saldırgan sonsuza kadar kötülük yapabilir. Pow'da, rastgele sayının içeriğini diğer düğümlere göre önceden bilecek ve bunu bir adım önde hesaplayabilecek, bu da defter tutma hakkını elde etme olasılığının daha yüksek olabileceği anlamına geliyor. Pos için saldırgan, muhasebeci olmayı seçme olasılığını artırmak için rasgele sayı üretme mekanizmasına göre belirli koşulları değiştirebilir ve böylelikle defter tutma hakkını artırabilir.
Geleneksel PoS çözümleri, rastgele sayıların kaynağı olarak önceki bloğun hash değeri, önceki bloğun zaman damgası vb. Gibi zincir üzerindeki verilerle başlamaya çalışır, ancak bunlar ek güvenlik riskleri getirecektir. Bloğun kendisinin bilgisi düğüm tarafından yazıldığından ve daha sonra sonraki blok üreticilerinin içerideki bilgilere göre seçilmesi gerektiğinden, dairesel bir argümantasyon şüphesi vardır ve güvenlik çok iyi olmayacaktır. Bu aynı zamanda, PoS çözümlerinin geleneksel olarak PoW'dan daha az güvenilir olduğuna inanılmasının nedenlerinden biridir.
Blockchain, her bir düğümün hesaplama sonuçlarının doğrulanabilir ve fikir birliğine varılabilir olmasını gerektiren dağıtılmış bir sistemdir. Bununla birlikte, geleneksel sözde rasgele sayı üretme algoritması, tek bir makinenin fiziksel durumu veya çalışma durumu ile ilgilidir.Farklı makineler veya düğümler farklı işlem sonuçları gösterecektir, ancak bu tasarım blok zincir üzerinde yapılamaz.
DAPP için referans için üç çözüm vardır:
Birincisi, üçüncü bir tarafı tanıtmak ve güvenilir bir üçüncü tarafın sözleşme için rastgele sayılar sağlamasına izin vermektir; ikincisi, sözde rasgele sayıların üretilmesini gerçekleştirmek ve diğer sözleşmeler için tutarlı rasgele sayılar sağlamak için sözleşmenin ayarlanması yoluyla çok taraflı işbirliği gerçekleştirmek. Üçüncüsü, tüm düğümlerdeki sözleşmelerin aynı tohumu toplamasına izin vermek ve ardından aynı rasgele sayı dizisini sözde rasgele bir algoritma aracılığıyla hesaplamaktır.
Aşağıda ayrıntılı olarak inceleyelim:
1 Güvenilir üçüncü taraflar, blok zinciri sisteminin oluşturulmasına katılır.Tüm düğümlerin rastgele sayılarını aynı yapmak için, blok zincirinin tüm düğümlerini üçüncü taraf platformuna bağlayabiliriz. Basitçe söylemek gerekirse, rastgele sayılar oluşturmamıza yardımcı olacak bir uygulama bulabiliriz ve tüm düğümler bu uygulamaya güvenir.Bu, rastgele sayı oluşturma sorununu çözebilse de, merkezi olmayan uygulamaların yardımcı olması için blok zincirinin, ademi merkeziyetçiliğin bir temsilcisi olarak teoriye biraz aykırı olduğunu biliyoruz. Bununla birlikte, üçüncü tarafın güvenilir olup olmadığı ve yüksek kaliteli rastgele sayılar sağlayıp sağlayamayacağı bir sorudur. Bu, diğer saldırganlara güçlerini birleştirmek veya bilgisayar korsanları tarafından kırılmak için uygulanırsa, getirdiği tehdit de büyüktür.
Ancak, bu tasarım düşüncesini kullanan bazı DAPP'ler hala var. Örneğin: Dış kahinler: Oraclize.
Oraclize, Ethereum ve İnternet arasında bir köprü sağlar. Oraclize ile akıllı sözleşmeler, web API'leri aracılığıyla veri talep edebilir. Güncel döviz kuru, hava durumu tahmini veya hisse senedi fiyatı gibi. En büyük işlevlerden biri, sözde rastgele sayılar sağlamaktır. Bazı sözleşmeler, sözde rastgele sayılar elde etmek için Oraclize'deki URL konektörü aracılığıyla bağlanır. Aşağıda gösterildiği gibi:
Bu uygulamada Oracle, verileri sağlayan taraftır. Blockchain uygulamaları (Bitcoin betikleri ve akıllı sözleşmeler gibi) gerekli verileri doğrudan elde edemediklerinden, bu tür verilere ihtiyaç duyarlar: varlıkların ve finansal uygulamaların fiyat arzı. Bu uygulama çoğunlukla noktadan noktaya sigorta için hava durumu ile ilgili bilgiler için kullanılır. Kumar için rastgele sayı oluşturma. Oraclize, blockchain sisteminden bağımsız bir oracle makinesidir.Akıllı sözleşme, Oraclize'ye bir istek gönderir.Oraclize zincirdeki talebi dinlediğinde rastgele bir sayı üretir ve sonucu blok zincirine döndürür.
Aşağıdaki kod, Ethereum'da erişilen bir işlevdir:
Temel sözleşmelerin oluşturulmasına katılın
İkinci yöntem, blok zincirinde dağıtılmış düşünme için en uygun olanıdır ve sözde rastgele sayılar oluşturmak için blok zincir sistemindeki farklı katılımcıların işbirliğini gerektirir. Spesifik algoritma şu şekilde açıklanmıştır:
Öncelikle rasgele sayı üretiminin güvenlik özelliklerini elde etmek için, kavramımızı zenginleştirmek için kriptografi teorisini kullanmamız gerekiyor. Önce Commitment ve Open (Commitment and Open) 'a bakıyoruz.
Vaat ve açılış uygulama senaryosunda, burada iki kullanıcı A ve B varsa. İkisi karşı karşıya gelmediler, ancak bir taş, kağıt, makas oyunu oynamak ve kazananı belirlemek istediler. Ne yapmalıyız? Zaman senkronize değilse, bir kişi diğerinin durumunu görebilir, bu da adil bir şekilde rekabet edemeyeceği anlamına gelir. Bu nedenle, herkesin sonuçları için bazı önlemler almalıyız:
Bu süreçte, gelecekteki pişmanlıkları önlemek için kanıt olarak kendi genel anahtarınızı da ekleyebilirsiniz.
Bu şekilde, her iki taraf da diğerinin seçimini bilir ve diğerinin seçiminin önceden yapıldığını teyit edebilir. Bu hash değerine vaat denir, çünkü gizli bilgiler içerir, ancak hiçbir gizli bilgi sızdırılmaz ve son olarak ilgili gizli bilgilerin gönderilmesi açık vaat olarak adlandırılır.
Aşağıda kötü niyetli düğümlerin nasıl kaydedileceğini ve rastgele sayılar üretme sürecinde nasıl cezalandırılacağını açıklıyoruz. Aşağıda gizli paylaşım şemasını sunuyoruz:
Gizli paylaşım, bir kişinin gizli tutulması gereken bir bilgiyi n parçaya bölüp n kişiye gönderebileceği anlamına gelir.Kötü amaçlı düğümlerin sayısı belirli bir sayıyı geçmediği sürece herkes kendi bilgi parçalarını birleştirerek orijinal bilgileri nihayet geri yükleyebilir. Ve distribütör hile yapsa bile, herkes kontrol edebilir. Örneğin, şifre paylaşım şeması (3, 9) bir sırrı dokuz parçaya böler ve sonra bunları dokuz kişiye dağıtır. Dokuz parçadan üçü bir araya getirildiği sürece sır kurtarılabilir.
Örneğin, aşağıdaki doğrudan koordinat sisteminde, y = ax + b çizgi koordinatlarının bu doğruyu belirlemek için iki noktaya ihtiyaç duyduğunu hepimiz biliyoruz. Yani bu denklemi (2, n) 'nin paylaşım şemasını yapmak için kullanabiliriz. Resim üzerinde n nokta bulup n kullanıcıya dağıtabiliriz, bundan sonra iki kullanıcı noktaları bir araya getirirse düz bir çizgiye geri dönebilir ve b değeri elde edilebilir. Ve b'nin değeri bizim gizli sırrımızdır.
Bunu bilerek, kötü niyetli düğüm açmak için rastgele bir sayı göndermezse, sırrı açmak için makul sayıda kullanıcı da kullanabiliriz. Sistemin normal çalışmasını sağlayın. Bölünmüş mesajı aldatmak isterse, herkes onu kontrol edebilir ve onu dışarı atabilir.
Son olarak, aslında bir blockchain olduğumuz için, protokol işlemi sırasında yayınlanması gereken bilgiler doğrudan zincire yazılabilir, bu da uygulamayı basitleştirir ve tüm oylama düğümlerinin aynı anda çevrimiçi olmasını gerektirmez ve birisi hile yaparsa, hile yaparsa Kayıt sonsuza kadar zincirde tutulacak. İlgili cezalandırma önlemlerinin alınması, kötü niyetli düğümü de durduracaktır.
Kriptografinin temellerini açıkladıktan sonra, bu süreci göstermek için bir resim aktarıyoruz:
Herkese açık tohum koleksiyonu
Üçüncü yöntemde, sözleşme, rastgele sayının çekirdek değeri için genel blok üzerindeki bilgileri kullanır ve akıllı sözleşme, çekirdeğe bağlı olarak sözde rastgele bir sayı üretir. Bu yöntemin en büyük dezavantajı, bilgisayar korsanlarının rastgele sayı üretme algoritmasını öğrendikten ve doğru tohumu elde ettiklerinde akıllı sözleşmeye kolayca rastgele bir sayı saldırısı başlatabilmeleridir.
Bununla birlikte, geleneksel merkezi sistemlerden farklı olarak, blok zincirindeki bilgiler herkes tarafından görülebilir ve blok zincirindeki tohumlar neredeyse "şeffaftır". Tüm düğümler üzerinde akıllı sözleşmelerle elde edilebilen zincir üzerindeki blok bilgileridir Prensipte hackerların saldırmak için kullandıkları kötü niyetli sözleşmeler de bu değerleri elde edebilir.
Aşağıda birkaç tehlikeli rastgele sayı oluşturma işlevini listeliyoruz ":
Örnekte, block.number fonksiyonunun kullanıldığını görüyoruz. Deneyimizde şunları görebiliriz:
Ek olarak, rastgele sayılar oluşturmak için zorluk da kullanabiliriz, ancak bu da güvensizdir.
Bu da, bu yöntemin daha derin bir tasarım gerektirdiğini göstermektedir. Bilgisayar korsanı rastgele sayı algoritmasını elde ettiğinde, kötülüğü işlemek için algoritmanın içeriğine bağlı olarak% 100 tahmin yapabilir.
Zamanımızda, birçok sözleşmenin rastgele sayılar üretmek için çekirdek olarak block.blockhash (block.number) işlevini kullandığını gördük. Bu çok tehlikelidir. Block.number değişkeni mevcut blok yüksekliğini alabilir. Ancak yürütülmediğinde, bu "mevcut blok" gelecekteki bir bloktur, yani bu gelecekteki blok, yalnızca bir madenci işlemi paketlediğinde ve yayınladığında mevcut blok haline gelir, böylece sözleşme bu alanı güvenilir bir şekilde elde edebilir. Bloğun blok hash değeri.
Yani bu bilgi nasıl çalıştırılırsa çalıştırılsın sadece 0 döndürür.