TL;DR
ნულოვანი ინფორმაციით დამტკიცება საშუალებას აძლევს ერთ მხარეს (შემმოწმებელს), შეამოწმოს მეორე მხარის (მტკიცებლის) მოწოდებული განცხადების ვალიდურობა მისი შინაარსის ცოდნის გარეშე. მაგალითად, Binance-ს შესაძლოა სურდეს იმის დამტკიცება, რომ მომხმარებლის თანხის ანაზღაურება რეზერვით შეუძლია, ცალკეული მომხმარებლების ბალანსის გამჟღავნების გარეშე.
შესაძლებელია „რეზერვების მტკიცებულება“ შეიქმნას მერკლის ხით, რაც შიდა მონაცემებს, ამ შემთხვევაში მომხმარებლების ბალანსს, როგორც ბირჟის მომხმარებლებისადმი პასუხისმგებლობას, გაყალბებისგან იცავს. ხშირად ის გამოიყენება zk-SNARK-თან (ნულოვანი ინფორმაციით დამტკიცების პროტოკოლი) რაც შესაძლებელს ხდის მომხმარებლებმა ბალანსი მომხმარებლების ჯამური აქტივების ბალანსიდან ისე შეამოწმონ, რომ ინდივიდუალური ბალანსები არ იცოდნენ.
შესავალი
ბაზარზე მიმდინარე მოვლენებიდან გამომდინარე, კრიპტო აქტივების უსაფრთხოება კრიტიკულად მნიშვნელოვანია. ბლოკჩეინ მომხმარებლების გამჭვირვალობასა და ღიაობას აფასებენ, თუმცა ამავდროულად მნიშვნელოვანია კონფიდენციალურობაც. ეს წარმოქმნის დილემას განმკარგავების მფლობელობაში მყოფი რეზერვების დამტკიცებისას. ხშირად იქმნება ერთგვარი კომპრომისი გამჭვირვალობას, ნდობასა და ინფორმაციის დაცულობას შორის.
თუმცა სხვა გზაც არსებობს. თუ გავაერთიანებთ ნულოვანი ინფორმაციით დამტკიცების პროტოკოლებს, როგორიცაა zk-SNARK-ები და მერკლის ხეებს, ყველა მხარისთვის დამაკმაყოფილებელ შედეგს მივიღებთ.
რას ნიშნავს ნულოვანი ინფორმაციით დამტკიცება?
ნულოვანი ინფორმაციით დამტკიცება საშუალებას აძლევს ერთ მხარეს (დამმოწმებელს), შეამოწმოს მეორე მხარის (მტკიცებლის) მოწოდებული განცხადების ვალიდურობა მისი შინაარსის ცოდნის გარეშე. განვიხილოთ მარტივი მაგალითი.
გაქვთ ჩაკეტილი სეიფი, რომლის გაღებაც მხოლოდ თქვენ შეგიძლიათ. მაგალითის პირობიდან გამომდინარე, სეიფის გაღება მხოლოდ კომბინაციით არის შესაძლებელი. ეს ფაქტი დამოწმებულია და იცის თქვენმა მეგობარმა, რომელიც ამ ექსპერიმენტში მონაწილეობს.
მეგობარს ეუბნებით, რომ კომბინაცია იცით, მაგრამ მისი გამჟღავნება ან მათი თანდასწრებით სეიფის გახსნა არ გინდათ. სეიფს სახურავზე აქვს ჭუჭრუტანა, რომელშიც თქვენი მეგობარი ქაღალდს ჩააცურებს. ნულოვანი ინფორმაციით დამტკიცების შესაქმნელად თქვენს მეგობარს არ უნდა ჰქონდეს ინფორმაცია გარდა თქვენ მიერ მიწოდებულისა.
შეგიძლიათ მეგობარს დაუმტკიცოთ რომ კომბინაცია იცით, რისთვისაც გახსნით სეიფს, წაიკითხავთ რა წერია ქაღალდზე და ისევ დახურავთ. თუმცა ამისთვის კომბინაციის გამჟღავნება არ დაგჭირვებიათ.
უფრო რთული მაგალითის გასაცნობად იხილეთ სტატია რა არის ნულოვანი ინფორმაციით დამტკიცება და რა გავლენას ახდენს ის ბლოკჩეინზე?
რატომ ვიყენებთ ნულოვანი ინფორმაციით დამტკიცებას?
ნულოვანი ინფორმაციით დამტკიცება მოსახერხებელია რაიმეს დასამტკიცებლად სენსიტიური ინფორმაციის ან დეტალების გამჟღავნების გარეშე. ასე შეიძლება მოხდეს თუ არ გინდათ თქვენი ფინანსური ან პერსონალური ინფორმაცია ვინმემ შეუსაბამოდ გამოიყენოს.
კრიპტოში შეგიძლიათ პირადი გასაღების ფლობის დადასტურება მისი გამჟღავნების ან ციფრული ხელმოწერის გარეშე. შესაძლოა კრიპტოვალუტის ბირჟას რეზერვების სტატუსის დამტკიცება მომხმარებელთა კონფიდენციალური ინფორმაციის, მაგალითად ინდივიდუალური ანგარიშების ბალანსების გამჟღავნების გარეშე უნდოდეს.
ასეთ შემთხვევებში (და არა მხოლოდ) ნულოვანი ინფორმაციით დამტკიცება გამოიყენებდა ალგორითმებს, რომლებიც ინფორმაციას მიიღებენ და პასუხად „ჭეშმარიტს“ და „მცდარს“ დააბრუნებენ.
ნულოვანი ინფორმაციით დამტკიცების განმარტება ტექნიკური ტერმინოლოგიით
ნულოვანი ინფორმაციით დამტკიცება, ტექნიკური ტერმინოლოგიით, განსაზღვრულ კრიტერიუმებს უნდა აკმაყოფილებდეს. მტკიცებლისა და დამმოწმებლის როლებზე უკვე ვისაუბრეთ, მაგრამ ნულოვანი ინფორმაციით დამტკიცების ფარგლებში კიდევ სამი კრიტერიუმი არსებობს:
დასრულება. თუ განცხადება ჭეშმარიტია, დამმოწმებელი მოწოდებული მტკიცებულებით დარწმუნდება დამატებითი ინფორმაციის ან ვერიფიკაციის საჭიროების გარეშე.
გონივრულობა. თუ განცხადება მცდარია, დამმოწმებელი ვერ დარწმუნდება განცხადების ჭეშმარიტებაში მოწოდებული მტკიცებულების საფუძველზე.
ნულოვანი-ინფორმაცია. თუ განცხადება ჭეშმარიტია, დამმოწმებელს არ სჭირდება დამატებითი ინფორმაცია განცხადების ჭეშმარიტობის გარდა.
რა არის zk-SNARK?
zk-SNARK (ნულოვანი ინფორმაციის შეკუმშული არა-ინტერაქციული არგუმენტი) არის დამტკიცების პროტოკოლი, რომელიც ზემოთ აღნიშნულ ნულოვანი ინფორმაციის პრინციპებს მიჰყვება. zk-SNARK-ებით შეგიძლიათ დაამტკიცოთ თავდაპირველი ჰეშირებული ღირებულება (რომელზეც ქვემოთ ვისაუბრებთ) მათი გამჟღავნების გარეშე. ასევე შეგიძლიათ დაამტკიცოთ ტრანზაქციის ვალიდურობა რაოდენობის, ღირებულების და მისამართების გამჟღავნების გარეშე.
zk-SNARK-ები განხილვის ხშირი თემაა ბლოკჩეინის და კრიპტოვალუტის სამყაროში. შესაძლოა გაგიკვირდეთ რატომ იტკიებენ თავს zk-SNARK-ებით, როცა ინფორმაციის დასაცავად საჯარო და პირადი გასაღებების წყვილის გამოყენებაა შესაძლებელი. თუმცა ჩვენ არ შეგვიძლია დავნერგოთ მათემატიკური მტკიცება იმაში დასარწმუნებლად, რომ არ იგულისხმება უარყოფითი ბალანსების და მერკლის ხის ჯამი.
ბირჟების რეზერვების შემთხვევაში ჩვენ გვინდა დავამტკიცოთ მომხმარებლის ბალანსების 1:1 თანაფარდობით უზრუნველყოფა მათი იდენტიფიკატორებისა და ბალანსების საჯაროდ გამოვლენის გარეშე. ამას გარდა zk-SNARK ტექნოლოგია კიდევ უფრო ართულებს ინფორმაციის გაყალბებას.
რა არის მერკლის ხე?
Binance-ის მომხმარებლების ანგარიშებზე არსებული ჯამური თანხის ჩვენებას მონაცემთა დიდი ნაკრები სჭირდება. დიდი ოდენობით მონაცემების კრიპტოგრაფიულად წარმოდგენის ერთ-ერთი საშუალებაა მერკლის ხე. ასე შესაძლებელია დიდი მოცულობით ინფორმაციის ეფექტურად შენახვა, კრიპტოგრაფიული ბუნება კი მის ერთიანობას უფრო მარტივად დამტკიცებადს ხდის.
ჰეშირების ფუნქციები
შეყვანილი მონაცემების შეკუმშულად კოდირებისთვის მერკლის ხე ჰეშირების ფუნქციებს იყენებს. მოკლედ რომ ვთქვათ, ჰეშირება არის სხვადასხვა ზომის შეყვანილი მონაცემებისგან ფიქსირებული ზომის გამომავალი მონაცემების მიღება. სხვა სიტყვებით როცა ნებისმიერი სიგრძის შეყვანილი მონაცემები ალგორითმის მეშვეობით ჰეშირებას გაივლის, შედეგად ფიქსირებული სიგრძის დაშიფრულ გამომავალ მონაცემებს მივიღებთ.
შესაბამისად, თუ შემავალი მონაცემები არ შეიცვლება, გამომავალი მონაცემებიც იგივე დარჩება. ეს ნიშნავს, რომ შეგვიძლია დიდი მოცულობის ტრანზაქციული მონაცემებს ჰეშირებით უფრო მარტივად აღსაქმელი ფორმა მივცეთ. შემავალი მონაცემების შეცვლის შემთხვევაში რადიკალურად განსხვავებულ გამომავლ მონაცემებს მივიღებთ.
მაგალითად, შეგვიძლია 100 წიგნის კონტენტი SHA-256 ჰეშირების ფუნქციაში შევიყვანოთ. შედეგად მივიღებთ დაახლოებით ასეთ მონაცემს:
801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea
შეყვანილ მონაცემებში (იმ 100 წიგნში) ერთი სიმბოლოც რომ შევცვალოთ, ჰეშიც სრულად შეიცვლება:
abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410
ეს ჰეშ ფუნქციების მნიშვნელოვანი მახასიათებელია, რადგან მისი დახმარებით მონაცემთა სიზუსტის მარტივად გადამოწმებაა შესაძლებელი. თუ ვინმე ამ 100 წიგნის SHA-256 ალგორითმით ჰეშირების პროცესს გაიმეორებს, შედეგად ისიც ზუსტად იმავე ჰეშს მიიღებს. განსხვავებული შედეგის მიღების შემთხვევაში ზუსტად გვეცოდინება, რომ შეყვანილი მონაცემები შეიცვალა. ეს ნიშნავს, რომ შეყვანილი მონაცემების ინდივიდუალურად, ხელით გადამოწმების შრომატევადი პროცესი საჭირო აღარ არის.
მერკლის ხეები კრიპტოვალუტის სამყაროში
ბლოკჩეინზე ტრანზაქციის მონაცემების შენახვისას თითოეული ახალი ტრანზაქცია ჰეშირების ფუნქციით ემატება, რაც ჰეშის უნიკალურ მნიშვნელობას ქმნის. წარმოიდგინეთ, რომ გვაქვს რვა ტრანზაქცია (A-დან H-ს ჩათვლით) რომელთა ინდივიდუალური ჰეშირების შედეგად თითოეული ჰეშის მნიშვნელობას მიიღებს. მათ მერკლის ფოთლოვან ნოდებს ვუწოდებთ. ქვემოთ მოცემულ ფოტოზე ნახავთ ჰეშის უნიკალურ მნიშვნელობებს თითოეული ასოსთვის: hA A-სთვის, hB B-სთვის, hC ნიშნავს C-სთვის და ა.შ.
ჰეშირებულ შედეგებში დაფიქსირებული წყვილების კომბინაციით ახალ ჰეშირებულ შედეგებს მივიღებთ. მაგალითად, hA და hB ჰეშების ერთად ჰეშირებით მივიღებთ ახალ შედეგს „hAB“, რასაც მერკლის ტოტი ეწოდება. გაითვალისწინეთ, რომ თითოეული შედეგის გენერირებისას ის იღებს ფიქსირებულ სიგრძესა და ზომას ჰეშირების ფუნქციის შესაბამისად.
ახლა უკვე გვაქვს ორი ტრანზაქციის მონაცემების (A და B) გაერთიანება ერთ ჰეშთან (hAB). გაითვალისწინეთ, რომ თუ A-ში ან B-ში რაიმე ინფორმაციას შევცვლით და პროცესს გავამეორებთ, ახალი ჰეშირებული შედეგი hAB-სგან განსხვავებული იქნება.
ახალი ჰეშების მისაღებად არსებული ჰეშების ახალი წყვილების თავიდან გაერთიანებით პროცესი გაგრძელდება (იხილეთ ფოტო ქვემოთ). hAB-სა და hCD-ს ჰეშირებით მივიღებთ უნიკალურ ჰეშს hABCD, hEF და hGH ჰეშების გაერთიანებით კი hEFGH-ს. საბოლოოდ მივიღებთ ერთ ჰეშს, რომელიც ყველა წინა ჰეშის ჰეშირებულ მონაცემს წარმოადგენს. სხვა სიტყვებით, ჰეშირებული მონაცემი hABCDEFGH იქამდე არსებულ მთელ ინფორმაციას წარმოადგენს.
ზემოთ მოცემულ დიაგრამას ეწოდება მერკლის ხე, შედეგი ხოლო ჰეშირების შედეგი hABCDEFGH კი არის მერკლის ფესვი. მერკლის ფესვებს ბლოკის სათაურებში ვიყენებთ, რადგან ისინი კრიპტოგრაფიულად შეკუმშული სახით აჯამებენ ბლოკში არსებულ ტრანზაქციების სრულ ისტორიას. ასევე, შესაძლებელია სწრაფად გადავამოწმოთ შეიცვალა თუ არა ინფორმაცია ბლოკში.
მერკლის ხის შეზღუდვები
დავუბრუნდეთ CEX რეზერვების მაგალითს. CEX-ს უნდა დაამტკიცოს მომხმარებელთა აქტივების 1:1 უზრუნველყოფის ქონა და ქმნის მერკლის ხეს, რომელიც კლიენტების UID-ებით მათი ჯამური აქტივების (აქტივებისა და ვალდებულებების შედარება) ერთად ჰეშირებას ახდენს. გაშვების (და მერკლის ფესვზე მფლობელის დამადასტურებლად ხელმოწერის) შემდეგ ინდივიდუალური მომხმარებელი ვერ მოახერხებს მერკლის ხის ვალიდურობის შემოწმებას მასში შემავალ მონაცემებზე წვდომის გარეშე.
შესაძლოა ბირჟას რომელიმე მონაცემების შეყვანა გამორჩეს. მას ასევე შეუძლია უარყოფითი ბალანსის მქონე ყალბი ანგარიშების შექმნა ჯამური ვალდებულებების შეცვლის მიზნით. მაგალითად, შესაძლოა მომხმარებლების აქტივების ჯამი იყოს $1,000,000, ხოლო ყალბი ანგარიშის ბალანსი -$500,000. ამგვარად შეიქმნება რეზერვების სამიზნე მაჩვენებელი $500,000-ის მოცულობით.
რეზერვის მტკიცებულების შემთხვევა განსხვავდება ბლოკის მერკლის ფესვისგან, რადგან მომხმარებლებს ბლოკჩეინ ექსპლორერების მეშვეობით ბლოკში შესული ყველა ტრანზაქციის ნახვა შეუძლიათ. CEX-ს კი უსაფრთხოებისა და მონაცემთა კონფიდენციალურობის მიზნით თითოეულ ანგარიშზე არსებული ბალანსების გამჟღავნება არ უნდა. ანგარიშის ბალანსების გასაჯაროება არც მომხმარებლებს გაუხარდებათ. ასეთ შემთხვევაში, მომხმარებელთა ბალანსების ჩვენების გარეშე, CEX ვერ მოახერხებს დაამტკიცოს, რომ მომხმარებელთა ბალანსები სწორ მონაცემს ემთხვევა.
ასეთ დროს ბირჟამ შესაძლოა გამოიყენოს მესამე მხარის სანდო აუდიტორი. აუდიტორი ინდივიდუალურ ანგარიშებსა და რეზერვებს შეამოწმებს, რის შედეგადაც მერკლის ფესვის ვალიდურობას დაადასტურებს. თუმცა მომხმარებლების მხრიდან ეს მეთოდი აუდიტორისა და მათ მიერ შემოწმებული მონაცემების ნდობას მოითხოვს. მაშინ, როცა მონაცემების ნდობა შეგიძლიათ, მესამე მხარეზე დამოკიდებული არ ხართ.
zk-SNARK-ებისა და მერკლის ხეების გაერთიანება
ზემოხსენებული პრობლემა zk-SNARK-ების გამოყენების საჭიროებას ბრწყინვალედ აჩვენებს. გვინდა დავამტკიცოთ, რომ რეზერვები მომხმარებელთა ვალდებულებებს სრულად ფარავს და თან არც გაყალბებულია. თუმცა კონფიდენციალურობისა და უსაფრთხოების საკითხებიდან გამომდინარე, არ გვინდა დამმოწმებელს მომხმარებელთა ბალანსებისა და რეზერვების ზუსტი მონაცემები ვაჩვენოთ.
zk-SNARK-ის გამოყენებით კრიპტო ბირჟას შეუძლია დაამტკიცოს, რომ მერკლის ხის ყველა ფოთლოვანი ნოდის ბალანსი (იგივეა რაც მომხმარებლების ანგარიშების ბალანსი) ადასტურებს ბირჟის განცხადებას მომხმარებელთა ჯამური აქტივების ბალანსის შესახებ. ყველა მომხმარებელს აქვს წვდომა საკუთარ ფოთლოვან ნოდებთან და შეუძლია პროცესში ჩართვა. zk-SNARK-ები ასევე განაპირობებს რომ მერკლის ხეები არ მოიცავდეს მომხმარებლებს უარყოფითი ჯამური აქტივების ბალანსით (რაც მონაცემთა გაყალბების ნიშანი იქნება, რადგან ყველა სესხი ზედმეტად უზრუნველყოფილია). გამოთვლაში ასევე გამოიყენება Binance-ის გლობალური მდგომარეობა, რაც წარმოადგენს Binance-ის თითოეული მომხმარებლის ჯამურ ბალანსს.
ვნახოთ, რა მიდგომა აქვს Binance-ს ამ სიტუაციის მიმართ. დასაწყისისთვის, Binance განსაზღვრავს გამოთვლის შეზღუდვებს რომელთა დამტკიცებაც სურს და განსაზღვრავს მათ როგორც დაპროგრამებულ მიკროსქემას. ქვემოთ გთავაზობთ Binance-ის მიერ მოდელში გამოყენებულ სამ შეზღუდვას.
თითოეული მომხმარებლის ბალანსისთვის (მერკლის ხის ფოთლოვანი ნოდი) ჩვენი მიკროსქემა განაპირობებს რომ:
თითოეული მომხმარებლების აქტივების ბალანსი შედის ყველა მომხმარებლის ბალანსის ჯამში.
მომხმარებლის ჯამური ბალანსი არის ნულის ტოლი ან მეტი.
მერკლის ხის ფესვის ცვლილება ვალიდურია (ანუ არ იყენებს გაყალბებულ ინფორმაციას) ფოთლოვანი ნოდის ჰეშში მომხმარებლის ინფორმაციის განახლების შემდეგ.
ამის შემდეგ Binance-ს შეუძლია დააგენერიროს zk-SNARK მტკიცებულება მერკლის ხისთვის მიკროსქემის შესაბამისად. ეს გულისხმობს ბირჟის მიერ მომხმარებლების ID-ებისა და ბალანსების ჰეშირების გამოთვლას, რის პარალელურადაც დადასტურდება, რომ მტკიცებულება შეზღუდვებს გაივლის.
დამმოწმებელი შეისწავლის მტკიცებულებას (და მის საჯარო ღია კოდს) რათა დარწმუნდეს, რომ გამოთვლა ყველა შეზღუდვის დაცვით შესრულდა. ვერიფიკაციის გამოთვლას დამტკიცების გამოთვლასთან შედარებით გაცილებით ნაკლები დრო სჭირდება.
რეზერვის მტკიცებულების გამოშვებასთან ერთად, ბირჟა ასევე გაასაჯაროებს:
1. თითოეული მომხმარებლის მერკლის მტკიცებულებას.
2. zk-SNARK მტკიცებულებასა და საჯარო მონაცემებს (მერკლის ფესვისა და თითოეული აქტივის ჯამური ბალანსის სიის ჰეშს) ყველა მომხმარებლის მიკროსქემისთვის.
დაინტერესებულ მხარეებს შეუძლიათ მერკლის მტკიცებულების დადასტურება, რითაც დარწმუნდებიან, რომ მათი ინდივიდუალური ბალანსები შედის მერკლის ხის ფესვში. მათ ასევე შეუძლიათ დაადასტურონ zk-SNARK მტკიცებულება რათა მერკლის ხის აგების პროცესში დაკმაყოფილდეს მიკროსქემით განსაზღვრული შეზღუდვები. zk-SNARK-ების ფუნქციონირების შესახებ უფრო დეტალური განმარტებისთვის გაეცანით ჩვენს ბლოგს როგორ აუმჯობესებს Zk-Snark-ები Binance-ის რეზერვების მტკიცებულების სისტემას.
შეჯამება
zk-SNARK-ები ქმნიან ტექნოლოგიას, რომელიც საჭიროა მონაცემთა სისწორისა და კონფიდენციალურობის ერთდროულად დასამტკიცებლად. რეზერვების დამტკიცებისა და CEX-ის გამჭვირვალობისთვის მისი გამოყენება ბლოკჩეინ ინდუსტრიისადმი სანდოობის დამტკიცებას ემსახურება. CEX-ებისთვის უმნიშვნელოვანეს დროს მოვლენების მსგავს განვითარებას დიდი ხანია ელოდნენ.
ეს ჩვენი zk-SNARK-ების პირველი ვერსიაა და მოუთმენლად ველით საზოგადოების უკუკავშირს რაც სისტემის გაუმჯობესების საშუალებას მოგვცემს.