Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi

Monero blokçeyninə dair silsiləmizi davam etdiririk və bugünkü məqalədə məxfi əməliyyatlar və yeni zəng imzaları təqdim edən RingCT (Ring Confidential Transactions) protokoluna diqqət yetiriləcək. Təəssüf ki, internetdə onun necə işlədiyi barədə məlumat azdır və biz bu boşluğu doldurmağa çalışdıq.

Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi

Şəbəkənin bu protokoldan istifadə edərək köçürmə məbləğlərini necə gizlətdiyi, klassik kriptonote ring imzalarından niyə imtina etdikləri və bu texnologiyanın daha da necə inkişaf edəcəyi barədə danışacağıq.

Bu protokol Monero-da ən mürəkkəb texnologiyalardan biri olduğundan, oxucuya bu blokçeynin dizaynı haqqında əsas biliyə və elliptik əyri kriptoqrafiya haqqında keçici biliyə ehtiyac duyulacaq (bu bilikləri təzələmək üçün bizim məqaləmizin ilk fəsillərini oxuya bilərsiniz. haqqında əvvəlki məqalə multiimzalar).

RingCT protokolu

Kriptonot valyutalarına mümkün hücumlardan biri göndərilən əməliyyatın məbləği və vaxtı haqqında biliyə əsaslanan blokçeyn analizidir. Bu imkan verir təcavüzkarı maraqlandıran çıxışlar üçün axtarış sahəsini əhəmiyyətli dərəcədə daraltmaq. Bu cür təhlillərdən qorunmaq üçün Monero şəbəkədə köçürmələrin məbləğlərini tamamilə gizlədən anonim əməliyyat protokolunu tətbiq etdi.

Qeyd etmək lazımdır ki, məbləğləri gizlətmək ideyası yeni deyil. Bitcoin Core tərtibatçısı Qreq Maksvell bunu ilk təsvir edənlərdən biri idi Məxfi əməliyyatlar. RingCT-nin hazırkı tətbiqi onun üzük imzalarından istifadə etmək imkanı ilə modifikasiyasıdır (onsuz da) və onun adını belə aldı - Ring Confidential Transactions.

Digər şeylər arasında, protokol toz çıxışlarının qarışdırılması ilə bağlı problemlərdən xilas olmağa kömək edir - az miqdarda çıxışlar (adətən əməliyyatlardan dəyişiklik şəklində alınır), bu da dəyərlərindən daha çox problem yaratdı.

2017-ci ilin yanvar ayında məxfi əməliyyatların isteğe bağlı istifadəsinə imkan verən Monero şəbəkəsinin sərt forku baş verdi. Artıq həmin ilin sentyabr ayında hard fork-un 6-cı versiyası ilə bu cür əməliyyatlar şəbəkədə icazə verilən yeganə əməliyyat oldu.

RingCT eyni anda bir neçə mexanizmdən istifadə edir: çoxqatlı əlaqəli kortəbii anonim qrup imzaları (Multilayered Linkable Spontaneous Anonymous Group Signature, bundan sonra MLSAG adlandırılacaq), öhdəlik sxemi (Pedersen Commitments) və diapazonun sübutları (bu terminin rus dilinə müəyyən edilmiş tərcüməsi yoxdur) .

RingCT protokolu iki növ anonim əməliyyat təqdim edir: sadə və tam. Pul kisəsi bir əməliyyat birdən çox giriş istifadə etdikdə birincini, ikincisini isə əks vəziyyətdə yaradır. Onlar əməliyyat məbləğlərinin və MLSAG imzası ilə imzalanmış məlumatların təsdiqində fərqlənirlər (bu barədə aşağıda daha ətraflı danışacağıq). Üstəlik, tam tipli əməliyyatlar istənilən sayda girişlə yaradıla bilər, heç bir əsas fərq yoxdur. Kitabda "Moneroya sıfır" Bu baxımdan, tam əməliyyatların bir girişlə məhdudlaşdırılması qərarının tələsik qəbul edildiyi və gələcəkdə dəyişə biləcəyi bildirilir.

MLSAG imzası

İmzalanmış əməliyyat girişlərinin nə olduğunu xatırlayaq. Hər bir əməliyyat müəyyən vəsait xərcləyir və yaradır. Vəsaitlərin yaradılması əməliyyat nəticələri yaratmaqla baş verir (birbaşa analoji veksellərdir) və əməliyyatın xərclədiyi məhsul (hər şeydən sonra real həyatda biz əskinasları xərcləyirik) girişə çevrilir (ehtiyatlı olun, çaşqın olmaq çox asandır. burada).

Giriş birdən çox çıxışa istinad edir, lakin yalnız birini xərcləyir, beləliklə, tərcümə tarixinin təhlilini çətinləşdirmək üçün “tüstü ekranı” yaradır. Əgər əməliyyatın birdən çox girişi varsa, o zaman belə struktur matris kimi təqdim oluna bilər, burada sətirlər girişlər, sütunlar isə qarışıq çıxışlardır. Şəbəkəyə əməliyyatın öz çıxışlarını dəqiq xərclədiyini sübut etmək üçün (onların məxfi açarlarını bilir) girişlər üzük imzası ilə imzalanır. Belə bir imza imzalayanın hər hansı bir sütunun bütün elementləri üçün məxfi açarları bildiyinə zəmanət verir.

Məxfi əməliyyatlar artıq klassik əməliyyatlardan istifadə etmir kriptonot ring imzaları, onlar MLSAG ilə əvəz edildi - birdən çox giriş üçün uyğunlaşdırılmış oxşar tək qatlı üzük imzalarının bir versiyası, LSAG.

Onlara çox qatlı deyilir, çünki onlar bir anda bir neçə girişə imza atırlar, hər biri bir neçə digəri ilə qarışdırılır, yəni bir sıra deyil, bir matris imzalanır. Daha sonra görəcəyimiz kimi, bu, imza ölçüsünə qənaət etməyə kömək edir.

2 real çıxış sərf edən və qarışdırmaq üçün blokçeyndən m - 1 təsadüfi olanları istifadə edən əməliyyat nümunəsindən istifadə edərək, üzük imzasının necə formalaşdığına baxaq. kimi xərclədiyimiz çıxışların açıq açarlarını işarə edək
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi, və müvafiq olaraq onlar üçün əsas şəkillər: Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi Beləliklə, ölçü matrisini alırıq 2 x m. Əvvəlcə hər bir çıxış cütü üçün sözdə çətinlikləri hesablamalıyıq:
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi
Hesablamalara onların açıq açarlarından istifadə edərək xərclədiyimiz çıxışlarla başlayırıq:Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsivə təsadüfi ədədlərMonero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsiNəticədə aşağıdakı dəyərləri alırıq:
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsiproblemi hesablamaq üçün istifadə etdiyimiz
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsinövbəti cüt çıxış (harada nəyi əvəz etdiyimizi başa düşməyi asanlaşdırmaq üçün bu dəyərləri müxtəlif rənglərlə vurğuladıq). Aşağıdakı bütün dəyərlər birinci təsvirdə verilmiş düsturlardan istifadə edərək bir dairədə hesablanır. Hesablamaq üçün son şey bir cüt real nəticə üçün problemdir.

Gördüyümüz kimi, real nəticələrdən başqa bütün sütunlar təsadüfi yaradılan nömrələrdən istifadə edirMonero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi. Qədər π-sütun bizə də lazım olacaq. Gəlin transformasiya edəkMonero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsis ilə:Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi
İmzanın özü bütün bu dəyərlərdən ibarətdir:

Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi

Bu məlumatlar daha sonra əməliyyata yazılır.

Gördüyümüz kimi, MLSAG yalnız bir çağırışdan ibarətdir c0, bu, imza ölçüsünə qənaət etməyə imkan verir (bu, artıq çox yer tələb edir). Bundan əlavə, məlumatlardan istifadə edən hər hansı bir müfəttişMonero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi, c1,…, sm dəyərlərini bərpa edir və bunu yoxlayırMonero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi. Beləliklə, üzüyümüz bağlandı və imza təsdiqləndi.

Tam tipli RingCT əməliyyatları üçün qarışıq çıxışları olan matrisə daha bir sətir əlavə olunur, lakin bu barədə aşağıda danışacağıq.

Pedersen Öhdəlikləri

Öhdəlik sxemləri (ingilis dilində commitments termini daha çox istifadə olunur) bir tərəfin müəyyən sirri (nömrəni) faktiki olaraq açıqlamadan bildiyini sübut etməsi üçün istifadə olunur. Məsələn, zərdə müəyyən bir nömrə atırsınız, öhdəlik götürürsünüz və onu təsdiq edən tərəfə ötürürsünüz. Beləliklə, gizli nömrənin açıqlanması anında yoxlayıcı müstəqil olaraq öhdəliyi hesablayır və bununla da onu aldatmadığınızdan əmin olur.

Monero öhdəlikləri köçürmələrin məbləğlərini gizlətmək və ən çox yayılmış variantdan - Pedersen öhdəliklərindən istifadə etmək üçün istifadə olunur. Yeri gəlmişkən, maraqlı bir fakt - əvvəlcə tərtibatçılar adi qarışdırma yolu ilə məbləğləri gizlətməyi, yəni qeyri-müəyyənlik yaratmaq üçün ixtiyari məbləğlər üçün çıxışlar əlavə etməyi təklif etdilər, lakin sonra öhdəliklərə keçdilər (qənaət etdikləri fakt deyil. əməliyyatın ölçüsü, aşağıda görəcəyimiz kimi).
Ümumiyyətlə, öhdəlik belə görünür:
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsiHarada? C - öhdəliyin özünün mənası, a - gizli məbləğ, H elliptik əyrinin sabit nöqtəsidir (əlavə generator), və x - bir növ ixtiyari maska, təsadüfi yaradılan gizlətmə faktoru. Maska burada lazımdır ki, üçüncü tərəf sadəcə olaraq öhdəliyin dəyərini təxmin edə bilməsin.

Yeni məhsul yaradıldıqda, pul kisəsi bunun üçün öhdəlik hesablayır və xərcləndikdə, əməliyyatın növündən asılı olaraq ya istehsal zamanı hesablanmış dəyəri götürür, ya da onu yenidən hesablayır.

RingCT sadədir

Sadə RingCT əməliyyatları vəziyyətində, əməliyyatın daxilolmaların miqdarına bərabər miqdarda (havadan pul çıxarmadı) nəticə yaratmasını təmin etmək üçün birinci və ikinci öhdəliklərin cəminin olması lazımdır. olanlar eyni olsun, yəni:
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi
Öhdəlik komissiyaları bunu bir az fərqli hesab edirlər - maskasız:
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsiHara a — komissiyanın məbləği, ictimaiyyətə açıqdır.

Bu yanaşma bizə etibar edən tərəfə eyni məbləğləri açıqlamadan istifadə etdiyimizi sübut etməyə imkan verir.

Hər şeyi daha aydın etmək üçün bir nümunəyə baxaq. Deyək ki, bir əməliyyat 10 və 5 XMR-lik iki çıxışı (daxil olmaq deməkdir) sərf edir və 12 XMR dəyərində üç çıxış yaradır: 3, 4 və 5 XMR. Eyni zamanda, o, 3 XMR komissiya ödəyir. Beləliklə, xərclənən pulun miqdarı üstəgəl yaradılan məbləğ və komissiya 15 XMR-ə bərabərdir. Gəlin öhdəlikləri hesablamağa və onların məbləğlərindəki fərqə baxmağa çalışaq (riyaziyyatı yadda saxla):

Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi
Burada görürük ki, tənliyin yaxınlaşması üçün giriş və çıxış maskalarının cəminin eyni olması lazımdır. Bunu etmək üçün, pul kisəsi təsadüfi yaradır x1, y1, y2 və y3, və qalanları x2 belə hesablayır:
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi
Bu maskalardan istifadə edərək, istənilən yoxlayıcıya sübut edə bilərik ki, biz xərclədiyimizdən çox vəsait yaratmırıq, məbləği açıqlamadan. Orijinal, hə?

RingCT dolu

Tam RingCT əməliyyatlarında köçürmə məbləğlərinin yoxlanılması bir az daha mürəkkəbdir. Bu əməliyyatlarda pul kisəsi daxilolmalar üzrə öhdəlikləri yenidən hesablamır, lakin onlar yaradıldığı zaman hesablanmış öhdəliklərdən istifadə edir. Bu halda, hesab etməliyik ki, biz artıq sıfıra bərabər olan məbləğlərdə fərq almayacağıq, əksinə:
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi
Burada z — giriş və çıxış maskaları arasındakı fərq. nəzərə alsaq zG açıq açar kimi (de-faktodur), sonra z şəxsi açardır. Beləliklə, biz açıq və müvafiq şəxsi açarları bilirik. Əldə olan bu məlumatla, qarışdırılan çıxışların açıq açarları ilə birlikdə MLSAG ring imzasında istifadə edə bilərik:
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi
Beləliklə, etibarlı bir zəng imzası sütunlardan birinin bütün şəxsi açarlarını bildiyimizi təmin edəcək və biz yalnız sonuncu sətirdəki şəxsi açarı bilə bilərik ki, əməliyyat xərclədiyindən daha çox vəsait yaratmır. Yeri gəlmişkən, “nəyə görə öhdəliklərin məbləğindəki fərq sıfıra gətirib çıxarmır” sualının cavabı budur - əgər zG = 0, sonra sütunu real çıxışlarla genişləndirəcəyik.

Vəsait alan şəxs ona nə qədər pul göndərildiyini haradan bilir? Burada hər şey sadədir - əməliyyatın göndəricisi və alıcının mübadiləsi açarları Diffie-Hellman protokolundan istifadə edərək, əməliyyat açarı və alıcının baxış açarından istifadə edərək paylaşılan sirri hesablayır. Göndərən bu paylaşılan açarla şifrələnmiş çıxış məbləğləri haqqında məlumatları əməliyyatın xüsusi sahələrində yazır.

Aralığın sübutları

Öhdəliklərdə məbləğ kimi mənfi rəqəmdən istifadə etsəniz nə olar? Bu, əlavə sikkələrin yaranmasına səbəb ola bilər! Bu nəticə qəbuledilməzdir, ona görə də istifadə etdiyimiz məbləğlərin mənfi olmadığına zəmanət verməliyik (təbii ki, bu məbləğləri açıqlamadan, əks halda bu qədər iş var və hamısı boş yerə). Başqa sözlə, cəminin intervalda olduğunu sübut etməliyik [0, 2n - 1].

Bunun üçün hər bir çıxışın cəmi ikili rəqəmlərə bölünür və öhdəlik hər bir rəqəm üçün ayrıca hesablanır. Bunun necə baş verdiyini bir nümunə ilə görmək daha yaxşıdır.

Tutaq ki, bizim məbləğlərimiz kiçikdir və 4 bitə uyğundur (praktikada bu 64 bitdir) və biz 5 XMR dəyərində çıxış yaradırıq. Biz hər bir kateqoriya üzrə öhdəlikləri və bütün məbləğ üzrə ümumi öhdəliyi hesablayırıq:Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsi
Sonra hər bir öhdəlik surroqatla qarışdırılır (Ci-2iH) və 2015-ci ildə Greg Maxwell tərəfindən təklif olunan Borromeo üzük imzası (başqa bir üzük imzası) ilə cüt-cüt imzalanır (bu barədə ətraflı oxuya bilərsiniz) burada):
Monero-da məxfi əməliyyatlar və ya kimin nəyi bildiyini kimin hara köçürməsiBirlikdə götürdükdə, bu, aralığın sübutu adlanır və sizə öhdəliklərin diapazondakı məbləğlərdən istifadə etməsini təmin etməyə imkan verir [0, 2n - 1].

Növbəti nədir?

Cari tətbiqdə diapazon sübutları çox yer tutur - hər çıxış üçün 6176 bayt. Bu, daha böyük əməliyyatlara və buna görə də daha yüksək ödənişlərə səbəb olur. Monero tranzaksiyasının ölçüsünü azaltmaq üçün tərtibatçılar Borromeo imzaları əvəzinə gülləkeçirməyənləri təqdim edirlər - bitwise öhdəlikləri olmayan bir sıra sübut mexanizmi. Bəzi təxminlərə görə, onlar diapazonun sübutunun ölçüsünü 94%-ə qədər azalda bilirlər. Yeri gəlmişkən, iyulun ortalarında texnologiya keçdi yoxlama nə texnologiyanın özündə, nə də tətbiqində heç bir əhəmiyyətli çatışmazlıq aşkar etməyən Kudelski Security-dən. Texnologiya artıq sınaq şəbəkəsində istifadə olunur və yeni sərt çəngəl ilə o, yəqin ki, əsas şəbəkəyə keçə bilər.

Suallarınızı verin, kriptovalyuta sahəsində texnologiyalar haqqında yeni məqalələr üçün mövzular təklif edin, həmçinin qrupumuza abunə olun Facebooktədbirlərimizdən və nəşrlərimizdən xəbərdar olmaq.

Mənbə: www.habr.com

Добавить комментарий