მოაწერეთ ხელი ECDSA-ში პირადი გასაღების ცოდნის გარეშე

ეს პოსტი პირველად გამოქვეყნდა საშუალო.

ჩვენ ვაჩვენებთ, თუ როგორ უნდა გენერირება სწორი ხელმოწერა გარეშე პირადი გასაღების ცოდნა ელიფსური მრუდის ციფრული ხელმოწერის ალგორითმის (ECDSA) გამოყენებით.

ECDSA ხელმოწერა

ამრიგად, ალისს აქვს პირადი გასაღები (d) და საჯარო გასაღები (Q = dG). ის ხელს აწერს შეტყობინებას (m) შემდეგი ნაბიჯებით:

  1. გახეხეთ შეტყობინება: h = HASH(მ).
  2. შექმენით შემთხვევითი ნომერი k და გამოთვალეთ R = კგ. მოძებნა Rის x-კოორდინატი r.
  3. გამოთვალეთ s = (h + rd)/k.

ხელმოწერა არის წყვილი (რ, ს) ორივე r მდე s უბრალოდ სკალარული რიცხვებია.

პირადი გასაღები

მოაწერეთ ხელი პირადი გასაღების ცოდნის გარეშე

პირობითად, ალისამ უნდა იცოდეს პირადი გასაღები, რომ შექმნას მოქმედი ხელმოწერა მისი საჯარო გასაღების წინააღმდეგ. აღსანიშნავია, რომ სწორი ხელმოწერა შეიძლება შეიქმნას პირადი გასაღების ცოდნის გარეშე შემდეგნაირად:

  1. შექმენით შემთხვევითი რიცხვი r. თუ აზრი არ აქვს R მრუდეზე ერთად r როგორც მისი x-კოორდინატი, უბრალოდ სცადეთ სხვა მნიშვნელობა r.
  2. შექმენით შემთხვევითი რიცხვი s.
  3. გადაჭრით საჯარო გასაღებისთვის როგორც Q = (sR – hG)/r.

(რ, ს) არის მოქმედი ხელმოწერა საჯარო გასაღებისთვის Q და შეტყობინების m. იმის გასაგებად, თუ რატომ, შეგვიძლია გამოვიტანოთ Q შემდეგი რედაქციით:

s = (h + rd)/k
sk = h + rd
skG = hG + rdG
sR = hG + rQ
Q = (sR – hG)/r

Ჩვენ ვურეკავთ Q a უმნიშვნელოა საჯარო გასაღები, რადგან ის არ არის მიღებული ცნობილი პირადი გასაღებიდან. კონტრაქტში გამოვიძახოთ საჯარო გასაღები გასაღებით თუ ის მიღებულია ცნობილი პირადი გასაღებიდან, როგორც ჩვეულებრივ კეთდება.

გაითვალისწინეთ, რომ ჯერ ხელმოწერა იქმნება ადრე მიღებულია საჯარო გასაღები, რომელიც ეწინააღმდეგება ჩვეულებრივი ECDSA ხელმოწერის.

შედეგები

თუ საჯარო გასაღები გენერირებულია გასაღების გარეშე, მხოლოდ მას, ვინც მას აწარმოებს, შეუძლია მის წინააღმდეგ მოქმედი ხელმოწერა, ხელმოწერით და მესიჯი ჰაშით. ხელმოწერა და შეტყობინება ერთობლივად მოქმედებს როგორც პირადი გასაღები აქ, რომელიც არსებობს, მაგრამ არის უცნობი. შენიშვნა შეტყობინების ჰეში h გამოიყენება და ამდენად ჩადენილია გამოთვლაში Q, ანუ ხელმოწერა არის მოქმედებს მხოლოდ მ, მაგრამ არა სხვა შეტყობინებისთვის. როგორც ხელმოწერა, ასევე შეტყობინება საჭიროა ხელმოწერის გადამოწმებისთვის საჯარო გასაღების წინააღმდეგ.

გასაღების გარეშე გასაღები

გასაღებებიანი საჯარო გასაღების პირადი გასაღები ცნობილია, ხოლო უკვანძო გასაღები უცნობია. გასაღების სცენარში საჯარო გასაღები ცნობილია ხელმოწერამდე, ხოლო უკვანძოში კი პირიქით.

საჯარო გასაღების დათვალიერებით მარტო, შეუძლებელია იმის დადგენა, არის თუ არა გასაღები.

თუნდაც ერთი ხელმოწერა გამჟღავნდეს ამისთვის ერთი შეტყობინებაში, შეუძლებელია გადაწყვიტოს საჯარო გასაღები არის თუ არა გასაღები, რადგან ხელმოწერა შეიძლება იყოს პირადი გასაღებიდან ან წინასწარ გენერირებული.

თუმცა, თუ ალისს შეუძლია ხელი მოაწეროს ბობის მიერ არჩეულ შეტყობინებას, დიდი ალბათობით, მან იცის პირადი გასაღები, რადგან მან წინასწარ არ იცის საჯარო გასაღებით ჩადენილი შეტყობინება და არ შეუძლია მოქმედი ხელმოწერის გენერირება.

თუ არსებობს ხელმოწერები ორ სხვადასხვა შეტყობინებაზე, თუნდაც ორივე ალისის მიერ არჩეული, შეგვიძლია დარწმუნებული ვიყოთ, რომ საჯარო გასაღები არის ჩასმული.

გამოიყენეთ ბიტკოინში

სავარაუდოა, რომ საჯარო გასაღები (აღნიშნეთ როგორც Q₀) ბიტკოინის Genesis Coinbase ტრანზაქციაში არის გასაღების გარეშე. თუ ასეა, ვისაც ხელმოწერა აქვს, შეუძლია ხელი მოაწეროს ერთ შეტყობინებას, რომელიც გამოიყენება გაანგარიშებისას Q₀. მას არ შეუძლია ხელი მოაწეროს სხვა შეტყობინებას.

თუმცა, ხელმოწერა მოქმედებს მხოლოდ ჯაჭვის გარეშე, მაგრამ არა ჯაჭვზე. ამ Q₀-ზე გაგზავნილი მონეტები არ შეიძლება დაიხარჯოს ასეთი ხელმოწერით, მათ შორის Genesis ბლოკის შემდეგ გაგზავნილი მონეტების ჩათვლით. ასევე ვნახოთ რატომ, ჩვენ უნდა შევხედოთ რა გზავნილს m გაფორმებულია გარიგების შექმნისას. ის ძირითადად მოიცავს მიმდინარე ხარჯვის ტრანზაქციას პლუს დახარჯულ გამომავალს. გამომავალი შეიცავს Q₀ მის სკრიპტის ნაწილში, მნიშვნელობა m დამოკიდებულია Q₀. თუმცა, Q₀ თავად დამოკიდებულია hmის ჰაში. ეს წრიული დამოკიდებულება (მიიღეთ Q₀, შენ გჭირდება m პირველი; მაგრამ მისაღებად m, შენ გჭირდება Q₀ პირველი), ხელმოწერის მსგავსი, რომელსაც არ შეუძლია ხელი მოაწეროს საკუთარ თავს ბიტკოინში, ხელს უშლის გენერირებას Q₀.

გაითვალისწინეთ, რომ ეს ეხება ბიტკოინის ნებისმიერ საჯარო გასაღებს და არა მხოლოდ Q₀.

განხორციელება

ქვემოთ მოცემულია სრული სამუშაო მაგალითი, სადაც ხელმოწერა იქმნება პირადი გასაღების ცოდნის გარეშე.

ნებისმიერს შეუძლია გაუშვას და დამოუკიდებლად გადაამოწმოს. ტესტირება ნაჩვენებია ქვემოთ.

კოდი უკანა მხარესკოდი უკანა მხარეს

ლიტერატურა

  1. Blake, IF, Seroussi, G. and Smart, NP (eds.) (2005) მიღწევები ელიფსური მრუდის კრიპტოგრაფიაში. კემბრიჯი: კემბრიჯის უნივერსიტეტის გამოცემა (ლონდონის მათემატიკური საზოგადოების ლექციების ჩანაწერების სერია).
  2. გრაფიკის კრედიტი: Buchanan, William J (2024). ელიფსური მრუდის ციფრული ხელმოწერის ალგორითმი (ECDSA). Asecuritysite.com. https://asecuritysite.com/ecdsa/ecdsa2

***

[1] Coinbase-ის გამომავალი Genesis ბლოკში არ შეიძლება დაიხარჯოს მაშინაც კი, თუ მასში არსებული საჯარო გასაღები დაჭერილია, რადგან ის არ შედის UTXO ნაკრებში. https://gist.github.com/msinkec/5eaf5aa97ed0f5e8d66e7e32fd8b1a0a

უყურეთ: ციფრული იდენტურობა, ციფრული აქტივები ჩართავს Web3-ს

YouTube videoYouTube video

ახალი ხართ ბლოკჩეინში? შეამოწმეთ CoinGeek-ის Blockchain დამწყებთათვის განყოფილება, რესურსების საბოლოო სახელმძღვანელო, რომ შეიტყოთ მეტი ბლოკჩეინის ტექნოლოგიის შესახებ.

წყარო: https://coingeek.com/sign-without-knowing-the-private-key-in-ecdsa/