Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı

Monero blockchain ile ilgili serimize devam ediyoruz ve bugünkü makalemiz, gizli işlemleri ve yeni ring imzalarını tanıtan RingCT (Ring Confidential Transactions) protokolüne odaklanacak. Ne yazık ki internette nasıl çalıştığına dair çok az bilgi var ve biz bu boşluğu doldurmaya çalıştık.

Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı

Ağın bu protokolü kullanarak transfer tutarlarını nasıl gizlediğini, klasik kriptonot ring imzalarını neden terk ettiğini ve bu teknolojinin nasıl daha da gelişeceğini konuşacağız.

Bu protokol Monero'daki en karmaşık teknolojilerden biri olduğundan, okuyucunun bu blok zincirinin tasarımı hakkında temel bilgiye ve eliptik eğri kriptografisine ilişkin geçici bilgiye ihtiyacı olacaktır (bu bilgiyi tazelemek için yazımızın ilk bölümlerini okuyabilirsiniz). hakkında önceki makale çoklu imzalar).

RingCT protokolü

Kripto para birimlerine yönelik olası saldırılardan biri de gönderilen işlemin miktarı ve zamanına ilişkin bilgiye dayalı blockchain analizidir. Bu izin verir saldırganın ilgilendiği çıkışlar için arama alanını önemli ölçüde daraltır. Bu tür analizlere karşı koruma sağlamak için Monero, ağdaki transfer miktarlarını tamamen gizleyen anonim bir işlem protokolü uyguladı.

Tutarların saklanması fikrinin yeni olmadığını belirtmekte fayda var. Bitcoin Core geliştiricisi Greg Maxwell bunu ilk açıklayanlardan biriydi. makale Gizli İşlemler. RingCT'nin mevcut uygulaması, ring imzaları (onlar olmadan da olsa) kullanma olasılığı ile yapılan modifikasyondur ve bu şekilde adını almıştır - Ring Gizli İşlemleri.

Protokol, diğer şeylerin yanı sıra, değerinden daha fazla sorun yaratan küçük miktardaki çıktılar (genellikle işlemlerden değişiklik şeklinde alınan) toz çıktılarının karıştırılmasıyla ilgili sorunlardan kurtulmaya yardımcı olur.

Ocak 2017'de Monero ağında gizli işlemlerin isteğe bağlı olarak kullanılmasına izin veren bir hard fork gerçekleşti. Ve zaten aynı yılın Eylül ayında, sürüm 6 hard forku ile bu tür işlemler ağda izin verilen tek işlemler haline geldi.

RingCT aynı anda birkaç mekanizma kullanır: çok katmanlı bağlantılı spontan anonim grup imzaları (Çok Katmanlı Bağlanabilir Spontan Anonim Grup İmzası, bundan sonra MLSAG olarak anılacaktır), bir taahhüt şeması (Pedersen Taahhütleri) ve aralık kanıtları (bu terimin Rusça'ya yerleşik bir çevirisi yoktur) .

RingCT protokolü iki tür anonim işlem sunar: basit ve tam. M-cüzdan, bir işlem birden fazla giriş kullandığında birincisini, tam tersi durumda ise ikincisini üretir. İşlem tutarlarının doğrulanması ve MLSAG imzasıyla imzalanan veriler açısından farklılık gösterirler (bu konu hakkında aşağıda daha fazla konuşacağız). Üstelik full tipi işlemler herhangi bir sayıda girdiyle oluşturulabilir, temel bir fark yoktur. Kitapta "Sıfırdan Monero'ya" Bu bağlamda, tam işlemlerin tek girişle sınırlandırılması kararının aceleyle alındığı ve gelecekte değişebileceği söyleniyor.

MLSAG imzası

İmzalı işlem girişlerinin ne olduğunu hatırlayalım. Her işlem bir miktar fon harcar ve üretir. Fon üretimi, işlem çıktıları oluşturularak gerçekleşir (doğrudan bir benzetme faturalardır) ve işlemin harcadığı çıktı (sonuçta, gerçek hayatta banknot harcıyoruz) girdi haline gelir (dikkatli olun, kafanın karışması çok kolaydır) Burada).

Bir girdi birden fazla çıktıya referans verir, ancak yalnızca birini harcar, böylece çeviri geçmişini analiz etmeyi zorlaştıran bir "sis perdesi" oluşur. Bir işlemin birden fazla girdisi varsa, bu tür bir yapı, satırların girdiler ve sütunların karma çıktılar olduğu bir matris olarak temsil edilebilir. İşlemin çıktılarını tam olarak harcadığını (gizli anahtarlarını bildiğini) ağa kanıtlamak için girdiler bir halka imzayla imzalanır. Böyle bir imza, imzalayanın herhangi bir sütunun tüm öğelerinin gizli anahtarlarını bildiğini garanti eder.

Gizli işlemlerde artık klasik işlemler kullanılmıyor CryptoNote halka imzaları, birden fazla giriş için uyarlanmış benzer tek katmanlı halka imzalarının bir versiyonu olan MLSAG ile değiştirildi, LSAG.

Çok katmanlı olarak adlandırılırlar çünkü aynı anda birkaç girişi imzalarlar, bunların her biri diğerleriyle karıştırılır, yani. bir satır değil, bir matris imzalanır. Daha sonra göreceğimiz gibi bu, imza boyutundan tasarruf etmenize yardımcı olur.

2 gerçek çıktı harcayan ve karıştırma için blok zincirinden m - 1 rastgele çıktı kullanan bir işlem örneğini kullanarak bir halka imzasının nasıl oluşturulduğuna bakalım. Harcadığımız çıktıların ortak anahtarlarını şu şekilde belirtelim:
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağıve bunlara göre anahtar görseller: Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı Böylece bir boyut matrisi elde ederiz 2 x m. İlk olarak, her bir çıktı çifti için sözde zorlukları hesaplamamız gerekiyor:
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı
Hesaplamalara ortak anahtarlarını kullanarak harcadığımız çıktılarla başlıyoruz:Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağıve rastgele sayılarMonero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağıSonuç olarak aşağıdaki değerleri elde ederiz:
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağımeydan okumayı hesaplamak için kullandığımız
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağısonraki çıktı çifti (neyi nereye koyduğumuzu anlamayı kolaylaştırmak için bu değerleri farklı renklerle vurguladık). Aşağıdaki değerlerin tümü, ilk resimde verilen formüller kullanılarak bir daire içinde hesaplanır. Hesaplanacak son şey, bir çift gerçek çıktının zorluğudur.

Gördüğümüz gibi, gerçek çıktıları içeren sütun dışındaki tüm sütunlar rastgele oluşturulmuş sayılar kullanıyorMonero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı. Karşı π- sütun da onlara ihtiyacımız olacak. Haydi dönüşelimMonero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağıs'de:Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı
İmzanın kendisi tüm bu değerlerin bir kümesidir:

Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı

Bu veriler daha sonra bir işleme yazılır.

Gördüğümüz gibi MLSAG yalnızca bir zorluk içeriyor c0imza boyutundan tasarruf etmenizi sağlar (ki bu zaten çok fazla alan gerektirir). Ayrıca herhangi bir müfettiş, verileri kullanarakMonero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı, c1,…, cm değerlerini geri yükler ve kontrol ederMonero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı. Böylece ringimiz kapatılmış ve imza doğrulanmıştır.

Tam tip RingCT işlemleri için karma çıktılı matrise bir satır daha eklenir ancak bundan aşağıda bahsedeceğiz.

Pedersen Taahhütleri

Yükümlülük planları (İngilizce taahhüt terimi daha sık kullanılır), bir tarafın belirli bir sırrı (sayıyı) aslında ifşa etmeden bildiğini kanıtlayabilmesi için kullanılır. Örneğin, zarda belirli bir sayı atarsınız, taahhüdü düşünürsünüz ve bunu doğrulayan tarafa iletirsiniz. Böylece, gizli numaranın açıklandığı anda, doğrulayıcı bağımsız olarak taahhüdü hesaplar ve böylece onu aldatmadığınızdan emin olur.

Monero taahhütleri, transfer tutarlarını gizlemek ve en yaygın seçenek olan Pedersen taahhütlerini kullanmak için kullanılır. Bu arada, ilginç bir gerçek - ilk başta geliştiriciler, miktarları sıradan karıştırma yoluyla gizlemeyi, yani belirsizliği ortaya çıkarmak için keyfi miktarlar için çıktılar eklemeyi önerdiler, ancak daha sonra taahhütlere geçtiler (tasarruf ettikleri bir gerçek değil) aşağıda göreceğimiz gibi işlem boyutu).
Genel olarak bağlılık şuna benzer:
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağıNerede C — bağlılığın anlamı, a - gizli miktar, H eliptik eğri üzerinde sabit bir noktadır (ek üreteç) ve x - bir çeşit keyfi maske, rastgele oluşturulmuş bir gizleme faktörü. Üçüncü bir tarafın bağlılığın değerini basitçe tahmin edememesi için burada maskeye ihtiyaç vardır.

Yeni bir çıktı üretildiğinde cüzdan bunun için taahhüt hesaplıyor ve harcandığında işlemin türüne göre ya üretim sırasında hesaplanan değeri alıyor ya da yeniden hesaplıyor.

RingCT basit

Basit RingCT işlemlerinde, işlemin girdi miktarına eşit miktarda çıktı yaratmasını (havadan para üretmemesini) sağlamak için birinci ve ikinci taahhütlerin toplamının sağlanması gerekmektedir. bunlar aynı olmalı, yani:
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı
Taahhüt komisyonları bunu biraz farklı değerlendiriyor - maskesiz:
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağıNerede a — Komisyon miktarı kamuya açıktır.

Bu yaklaşım, güvenen tarafa aynı miktarları kullandığımızı ifşa etmeden kanıtlamamıza olanak tanır.

Olayı daha açık hale getirmek için bir örneğe bakalım. Bir işlemin 10 ve 5 XMR değerinde iki çıktı harcadığını (yani bunların girdi haline geldiğini) ve 12 XMR değerinde üç çıktı ürettiğini varsayalım: 3, 4 ve 5 XMR. Aynı zamanda 3 XMR komisyon ödüyor. Böylece harcanan para miktarı artı üretilen miktar ve komisyon 15 XMR'ye eşittir. Taahhütleri hesaplamaya çalışalım ve tutarları arasındaki farka bakalım (matematiği unutmayın):

Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı
Burada denklemin yakınsaması için giriş ve çıkış maskelerinin toplamının aynı olması gerektiğini görüyoruz. Bunu yapmak için cüzdan rastgele oluşturur x1, y1, y2 ve y3ve geri kalan x2 şu şekilde hesaplıyor:
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı
Bu maskeleri kullanarak, tutarı açıklamadan herhangi bir doğrulayıcıya harcadığımızdan daha fazla fon üretmediğimizi kanıtlayabiliriz. Orijinal, değil mi?

RingCT dolu

Tam RingCT işlemlerinde transfer tutarlarını kontrol etmek biraz daha karmaşıktır. Bu işlemlerde cüzdan, girdilere ilişkin taahhütleri yeniden hesaplamaz, ancak oluşturulduklarında hesaplananları kullanır. Bu durumda, toplamlardaki farkın artık sıfıra eşit olmayacağını, bunun yerine:
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı
öyle z — giriş ve çıkış maskeleri arasındaki fark. Eğer dikkate alırsak zG bir genel anahtar olarak (ki fiili olarak budur), o zaman z özel anahtardır. Böylece genel ve karşılık gelen özel anahtarları biliyoruz. Elimizde olan bu veriyi, MLSAG halka imzasında, karıştırılan çıkışların ortak anahtarlarıyla birlikte kullanabiliriz:
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı
Böylece geçerli bir ring imzası, sütunlardan birinin tüm özel anahtarlarını bildiğimizi garanti edecek ve son satırdaki özel anahtarı yalnızca işlem harcadığından daha fazla fon üretmiyorsa bilebiliriz. Bu arada, "taahhüt tutarlarındaki fark neden sıfıra ulaşmıyor?" sorusunun cevabı şöyle - eğer zG = 0, ardından sütunu gerçek çıktılarla genişleteceğiz.

Fonu alan kişi kendisine ne kadar para gönderildiğini nasıl biliyor? Burada her şey basittir - işlemin göndereni ve alıcı, Diffie-Hellman protokolünü kullanarak, işlem anahtarını ve alıcının görüntüleme anahtarını kullanarak anahtarları değiştirir ve paylaşılan sırrı hesaplar. Gönderen, bu paylaşılan anahtarla şifrelenen çıkış miktarlarına ilişkin verileri işlemin özel alanlarına yazar.

Aralık kanıtları

Taahhütlerde tutar olarak negatif bir sayı kullanırsanız ne olur? Bu, ek paraların üretilmesine yol açabilir! Bu sonuç kabul edilemez, dolayısıyla kullandığımız miktarların negatif olmadığını garanti etmemiz gerekiyor (tabii ki bu miktarları açıklamadan, aksi takdirde o kadar çok iş olur ve hepsi boşa gider). Başka bir deyişle, toplamın aralıkta olduğunu kanıtlamamız gerekir. [0, 2n - 1].

Bunun için her çıkışın toplamı ikili rakamlara bölünür ve taahhüt her rakam için ayrı ayrı hesaplanır. Bunun nasıl olduğunu bir örnekle görmek daha iyidir.

Miktarlarımızın küçük olduğunu ve 4 bit'e (pratikte bu 64 bit) sığdığını varsayalım ve 5 XMR değerinde bir çıktı oluşturuyoruz. Her kategori için taahhütleri ve tutarın tamamına ilişkin toplam taahhüdü hesaplıyoruz:Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağı
Daha sonra her taahhüt bir vekil ile karıştırılır (Ci-2iH) ve 2015 yılında Greg Maxwell tarafından önerilen Borromeo halka imzasıyla (başka bir halka imzası) çiftler halinde imzalanmıştır (bunun hakkında daha fazlasını okuyabilirsiniz) burada):
Monero'daki gizli işlemler veya bilinmeyen şeylerin bilinmeyen hedeflere nasıl aktarılacağıBirlikte ele alındığında buna aralık kanıtı denir ve taahhütlerin aralıktaki tutarları kullandığından emin olmanızı sağlar. [0, 2n - 1].

Sırada ne var?

Mevcut uygulamada aralık kanıtları çok fazla yer kaplıyor (çıkış başına 6176 bayt). Bu, daha büyük işlemlere ve dolayısıyla daha yüksek ücretlere yol açar. Bir Monero işleminin boyutunu azaltmak için geliştiriciler, Borromeo imzaları yerine kurşun geçirmez imzalar sunuyor; bu, bit bazında taahhütler içermeyen bir aralık kanıtlama mekanizmasıdır. Bazı tahminlere göre, menzil kanıtının boyutunu %94'e kadar azaltabilirler. Bu arada, Temmuz ortasında teknoloji geçti аудит Kudelski Security'den ne teknolojinin kendisinde ne de uygulanmasında önemli bir eksiklik ortaya koymadı. Teknoloji halihazırda test ağında kullanılıyor ve yeni hard fork ile muhtemelen ana ağa da taşınabilir.

Sorularınızı sorun, kripto para birimi alanındaki teknolojiler hakkında yeni makaleler için konu önerin ve ayrıca grubumuza abone olun. FacebookEtkinliklerimizden ve yayınlarımızdan haberdar olmak için.

Kaynak: habr.com

Yorum ekle