Blockchain'de dijital imzaya dayalı rastgele oracle

Fikirden uygulamaya: Mevcut eliptik eğri dijital imza şemasını deterministik olacak şekilde değiştiriyoruz ve buna dayanarak, blok zinciri içinde doğrulanabilir sahte rastgele sayılar elde etmek için işlevler sağlıyoruz.

Blockchain'de dijital imzaya dayalı rastgele oracle

Fikir

2018 sonbaharında Waves blockchain'i dahil edildi İlk akıllı sözleşmeler etkinleştirildi, elde etme olasılığıyla ilgili soru hemen ortaya çıktı sözde rastgele sayılargüvenebilirsin.

Bu soru üzerinde kafa yorarak sonunda şu sonuca vardım: Herhangi bir blockchain bir hücredir; kapalı bir sistemde güvenilir bir entropi kaynağı elde etmek imkansızdır.

Ama yine de bir fikir hoşuma gitti: eğer rastgele kehanet kullanıcı verilerini deterministik bir algoritma ile imzalayacak, daha sonra kullanıcı böyle bir imzayı genel anahtarı kullanarak her zaman doğrulayabilecek ve ortaya çıkan değerin benzersiz olduğundan emin olacaktır. Kahin ne kadar istese de hiçbir şeyi değiştiremez; algoritma kesin bir sonuç üretir. Temel olarak kullanıcı sonucu kaydeder ancak Oracle bunu yayınlayana kadar bunu bilmez. Görünüşe göre kehanete hiç güvenemezsiniz, ancak çalışmasının sonucunu kontrol edin. Daha sonra, başarılı bir doğrulama durumunda, böyle bir imza, sözde rastgele sayı için bir entropi kaynağı olarak düşünülebilir.

Waves blockchain platformu bir imza şeması kullanıyor EdDSA seçenek Ed25519. Bu şemada imza, R'nin rastgele bir değere bağlı olduğu R ve S değerlerinden oluşur ve S, imzalanan mesaja, özel anahtara ve R ile aynı rastgele sayıya göre hesaplanır. aynısı için benzersiz bir bağımlılık yoktur. Bir kullanıcı mesajı için birçok geçerli imza vardır.

Açıkçası, saf haliyle böyle bir imza, deterministik olmadığından ve bu nedenle kehanet tarafından kolaylıkla manipüle edilebildiğinden, sözde rastgele sayıların kaynağı olarak kullanılamaz.

Ancak ortaya çıktığı gibi, bunu deterministik hale getirmek aslında mümkün.

için büyük umutlarım vardı doğrulanabilir rastgele fonksiyon (VRF), ancak donanımı inceledikten sonra bu seçenekten vazgeçmek zorunda kaldım. Her ne kadar VRF, imzanın ve ispatının deterministik bir versiyonunu sunsa da, algoritmada kehanetin manipülasyonu için bir kara delik açan garip bir yer var. Yani k'nin değerini hesaplarken (bölüm 5.1) kullanıcı tarafından bilinmeyen özel bir anahtar kullanıldığında, bu, kullanıcının k hesaplamasının doğruluğunu doğrulayamadığı anlamına gelir; bu, oracle'ın ihtiyaç duyduğu herhangi bir k değerini kullanabileceği ve aynı zamanda bir yazışma veritabanını koruyabileceği anlamına gelir. VRF açısından doğru sonucu her zaman yeniden hesaplayabilmek için k ve imzalı veriler. Özel anahtarı açıklamadan VRF'ye dayalı bir çizim görürseniz akıllı olabilirsiniz: anahtarın açıklanması gerektiğini belirtin veya k hesaplamasının dışında bırakın, o zaman özel anahtar ilk imza göründüğünde otomatik olarak kendini gösterecektir. . Genel olarak, daha önce de belirtildiği gibi, rastgele bir kehanet için garip bir şema.

Biraz düşündükten ve yerel analistlerin desteğini aldıktan sonra VECRO çalışma planı doğdu.

VECRO, Rusça'da eliptik eğriler üzerinde doğrulanabilir rastgele kehanet anlamına gelen Doğrulanabilir Eliptik Eğri Rastgele Oracle'ın kısaltmasıdır.

Her şeyin oldukça basit olduğu ortaya çıktı; determinizme ulaşmak için imzalanacak mesaj görünmeden önce R'nin değerini sabitlemeniz gerekiyor. Eğer R taahhüt edilmişse ve imzalanmakta olan mesajın bir parçası ise, bu ayrıca R'nin imzalanmakta olan mesajda taahhüt edilmesini sağlar, S'nin değeri kullanıcının mesajı tarafından benzersiz bir şekilde belirlenir ve bu nedenle sahte rastgele sayılar için bir kaynak olarak kullanılabilir.

Böyle bir şemada R'nin nasıl sabitlendiği önemli değildir; bu, kahinin sorumluluğunda kalır. S'nin kullanıcı tarafından benzersiz bir şekilde belirlenmesi önemlidir, ancak değeri Oracle onu yayınlayana kadar bilinmemektedir. İstediğimiz her şey!

Sabit R'den bahsederken şunu unutmayın: yeniden kullanılan R çeşitli mesajları imzalarken EdDSA şemasındaki özel anahtarı benzersiz bir şekilde ortaya çıkarır. Oracle'ın sahibinin farklı kullanıcı mesajlarını imzalamak için R'yi yeniden kullanma olasılığını ortadan kaldırması son derece önemli hale geliyor. Yani herhangi bir manipülasyon veya gizli anlaşma durumunda kahin her zaman özel anahtarını kaybetme riskiyle karşı karşıya kalacaktır.

Toplamda Oracle, kullanıcılara iki işlev sağlamalıdır: R değerini sabitleyen başlatma ve S değerini döndüren imza. Bu durumda, R, S çifti, sabit bir değer içeren bir kullanıcı mesajının olağan doğrulanabilir imzasıdır. R değeri ve isteğe bağlı kullanıcı verileri.

Blockchain için bu planın sıradan bir şeyden başka bir şey olmadığı iddia edilebilir. taahhüt genişletme şeması. Aslında evet, o. Ancak birkaç nüans var. Öncelikle oracle tüm işlemlerde hep aynı anahtarla çalışır, örneğin sözleşmelerde kullanılması uygundur. İkinci olarak, Oracle'ın yanlış davranması durumunda özel anahtarı kaybetme riski vardır; örneğin, Oracle sonucun örneklerini almanıza izin verir, o zaman özel anahtarı bulmak ve tam kazanım elde etmek için yalnızca iki test yapmanız yeterlidir. cüzdana erişim. Üçüncüsü, blockchain üzerinde yerel olarak doğrulanabilen ve rastgelelik kaynağı olan bir imza güzeldir.

Altı ay boyunca uygulama fikri kafamda kaynadı, ta ki sonunda motivasyon ortaya çıkana kadar Waves Labs'tan hibe. Büyük bir hibe büyük bir sorumluluk getirir, dolayısıyla proje orada olacak!

uygulama

Yani bu projede VECRO hayata geçirildi Kullanıcı ve Oracle arasındaki transfer işlemlerini kullanarak Waves blok zincirinde istek-yanıt modunda. Aynı zamanda oracle hesabına, işi yukarıda anlatılan mantığa göre sıkı bir şekilde kontrol eden bir script yüklenir. Oracle işlemleri doğrulanır ve tüm kullanıcı etkileşimi zinciri geri yüklenir. Dört işlemin tamamı nihai değerin doğrulanmasıyla ilgilidir; akıllı sözleşme bunları katı bir doğrulama dizisiyle bir araya getirir, tüm değerleri adım adım kontrol eder ve herhangi bir manipülasyona yer bırakmaz.

Bir kez daha bunu bir kenara bırakıp konuyu daha açık hale getirelim. Oracle yalnızca önerilen şemaya göre çalışmıyor. Çalışmaları tamamen blockchain düzeyinde yerleşik kuruluşlar tarafından kontrol edilmektedir. akıllı bir sözleşmeyle sıkı bir şekilde. Sola adım atarsanız işlem gerçekleşmeyecektir. Yani, eğer bir işlem blockchain'e dahilse, kullanıcının hiçbir şeyi kontrol etmesine bile gerek kalmıyor; yüzlerce ağ düğümü zaten onun için her şeyi kontrol etmiş durumda.

Şu anda Waves ana ağında çalışan bir VECRO var (kendi başınıza çalıştırabilirsiniz, zor değil, sadece yapılandırma örneğine bir göz atın). Geçerli kod PHP'de çalışır (açık Dalgalar Kiti, hangisi hakkında Sana daha önce söyledim).

Oracle hizmetini kullanabilmek için şunları yapmanız gerekir:

  • R'yi düzeltin;
    • Oracle takma adı init@vecr'ye en az 0.005 Wave gönderin;
    • 1 R-vecr jetonunun oracle'dan kullanıcıya aktarılmasında ek alanındaki R-kodunu alın;
  • İmza alın;
    • Oracle takma adı random@vecr'ye en az 0.005 Wave gönderin ve ayrıca önceden alınan R kodunu ve ek kullanıcı verilerini ek alanında BELİRTMELİDİR;
    • Oracle'dan kullanıcıya 1 S-vecr token aktarımında ek alanındaki S kodunu alın;
  • Sahte rastgele sayının kaynağı olarak S kodunu kullanın.

Mevcut uygulamanın nüansları:

  • Oracle'a gönderilen Wave'ler, maksimum 1 Wave'e kadar kullanıcıya iade işleminde komisyon olarak kullanılır;
  • R kodu, 'R' karakterinin bir baytı ile 32 baytlık base58 kodlu bir R değerinin birleşimidir;
  • Ekteki R kodu ilk sırada olmalıdır, kullanıcı verileri R kodundan sonra gelir;
  • S kodu, 'S' karakterinin bir baytı ile S'nin 32 baytlık base58 kodlu değerinin birleşimidir;
  • S, modülo bölmenin sonucudur, dolayısıyla S'yi tam 256 bitlik sözde rastgele sayı olarak kullanamazsınız (bu sayı, maksimum 252 bitlik sözde rastgele sayı olarak kabul edilebilir);
  • En basit seçenek, S kodu karmasını sözde rastgele bir sayı olarak kullanmaktır.

S kodunu alma örneği:

Teknik açıdan Oracle tamamen çalışmaya hazırdır, güvenle kullanabilirsiniz. Ortalama bir kullanıcının kullanımı açısından bakıldığında kullanışlı bir grafik arayüzün eksikliği söz konusu; bunun için beklemek gerekecek.

Soruları yanıtlamaktan ve yorumları kabul etmekten memnuniyet duyarım, teşekkür ederim.

Kaynak: habr.com

Yorum ekle