A privát kulcs ismerete nélkül írjon alá az ECDSA-ban

Ezt a bejegyzést először tették közzé közepes.

Bemutatjuk, hogyan lehet érvényes aláírást generálni nélkül a privát kulcs ismerete az elliptikus görbe digitális aláírási algoritmus (ECDSA) segítségével.

ECDSA aláírás

Így Alice-nek van egy privát kulcsa (d) és egy nyilvános kulcsot (Q = dG). Aláír egy üzenetet (m) a következő lépésekkel:

  1. Kivonatolja az üzenetet: h = HASH(m).
  2. Hozzon létre egy véletlen számot k és kiszámítani R = kG. megtalálja Rx-koordinátája r.
  3. Számít s = (h + rd)/k.

Az aláírás a pár (r, s). Mindkét r és a s csak skalárszámok.

Privát kulcs

Írja alá a privát kulcs ismerete nélkül

Hagyományosan Alice-nek ismernie kell a privát kulcsot, hogy érvényes aláírást generáljon a nyilvános kulcsához. Figyelemre méltó, hogy érvényes aláírás generálható a privát kulcs ismerete nélkül a következőképpen:

  1. Véletlen szám generálása r. Ha nincs értelme R a görbén r x-koordinátájaként egyszerűen próbáljon ki egy másik értékét r.
  2. Véletlen szám generálása s.
  3. Oldja meg a nyilvános kulcsot mint Q = (sR – hG)/r.

(r, s) a Q nyilvános kulcs és az m üzenet érvényes aláírása. Hogy megértsük, miért, levezethetjük Q az alábbiak szerint:

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

Hívjuk Q a nem kulccsal felhúzható nyilvános kulcs, mivel nem ismert privát kulcsból származik. Szerződésben hívjunk nyilvános kulcsot ékelt ha egy ismert privát kulcsból származik, mint általában.

Vegye figyelembe, hogy először egy aláírás jön létre előtt nyilvános kulcsot származtatnak, ami a szokásos ECDSA aláírás ellentéte.

Következmények

Ha egy nyilvános kulcsot kulcs nélkül állítanak elő, akkor csak az azt létrehozó személy tud érvényes aláírást létrehozni ellene, az aláírással és az üzenet h-vel. Az aláírás és az üzenet együtt működik itt privát kulcsként, amely létezik, de van ismeretlen. Megjegyzés üzenet hash h felhasználásra kerül, és így kötelezettséget vállal a számítás során Q, vagyis az aláírás az csak m-re érvényes, de más üzenethez nem. Mind az aláírásra, mind az üzenetre szükség van ahhoz, hogy az aláírás ellenőrizhető legyen a nyilvános kulccsal.

Kulcs nélküli vs. kulcsos kulcs

A kulcsos nyilvános kulcs privát kulcsa ismert, míg a kulcs nélküli kulcsé ismeretlen. Kulcsos forgatókönyvben a nyilvános kulcs az aláírás előtt ismert, míg a kulcs nélküli kulcsnál az ellenkezője.

Nyilvános kulcsra nézve kizárólag, nem állapítható meg, hogy kulcs nélküli vagy kulcsos.

Még akkor is, ha egy aláírást felfedeznek egy üzenetben nem lehet eldönteni, hogy a nyilvános kulcs kulcs nélküli-e vagy sem, mivel az aláírás származhat privát kulcsból vagy előre generált.

Ha azonban Alice aláírhat egy Bob által választott üzenetet, akkor túlnyomóan valószínű, hogy ismeri a privát kulcsot, mivel nem ismeri előre a nyilvános kulcsban rögzített üzenetet, és nem tud érvényes aláírást generálni.

Ha két különböző üzenethez van aláírás, akár mindkettőt Alice választotta, biztosak lehetünk benne, hogy a nyilvános kulcs kulcsolva van.

Használd a Bitcoinban

Állítólag a nyilvános kulcs (jelölje meg, mint Q₀) a Bitcoin Genesis Coinbase tranzakciójában kulcs nélküli. Ha igen, az aláírás birtokában egy üzenetet írhat alá, a számításnál használtat Q₀. Más üzenetet nem írhat alá.

Az aláírás azonban csak a láncon kívül érvényes, a láncon belül azonban nem. Az erre a Q₀-ra küldött érmék nem költhetők el ilyen aláírással, beleértve a Genesis blokk¹ után küldötteket is. Hogy miért, azt is meg kell néznünk, hogy milyen üzenetet m tranzakció létrehozásakor aláírásra kerül. Ez alapvetően magában foglalja az aktuális kiadási tranzakciót, valamint az elköltött outputot. A kimenet tartalmaz Q₀ script részében, jelentése m attól függ Q₀. Azonban, Q₀ önmagától függ hm's hash. Ez a körkörös függőség (hoz kapni Q₀, szükséged van m első; hanem megszerezni m, szükséged van Q₀ Először is), hasonlóan egy aláíráshoz, amely nem tudja aláírni magát Bitcoinban, megakadályozza a generálást Q₀.

Vegye figyelembe, hogy ez nem csak a bitcoin nyilvános kulcsára vonatkozik Q₀.

Implementáció

Az alábbiakban egy teljes működő példa látható, ahol az aláírás a privát kulcs ismerete nélkül jön létre.

Bárki futtathatja és függetlenül ellenőrizheti. Az alábbiakban egy próbaüzem látható.

Kód a háttérbenKód a háttérben

Referenciák

  1. Blake, IF, Seroussi, G. és Smart, NP (szerk.) (2005) Az elliptikus görbe kriptográfia fejlődése. Cambridge: Cambridge University Press (London Mathematical Society Lecture Note Series).
  2. Grafikon hitele: Buchanan, William J (2024). Elliptikus görbe digitális aláírási algoritmus (ECDSA). Asecuritysite.com. https://asecuritysite.com/ecdsa/ecdsa2

***

[1] A Genesis blokkban lévő Coinbase kimenet még akkor sem költhető el, ha a benne lévő nyilvános kulcs kulcsolt, mivel az nem szerepel az UTXO készletben. https://gist.github.com/msinkec/5eaf5aa97ed0f5e8d66e7e32fd8b1a0a

Nézd: Digitális identitás, digitális eszközök lehetővé teszik a Web3-at

YouTube videoYouTube video

Új a blokkláncban? Tekintse meg a CoinGeek Blockchain for Beginners szakaszát, amely a végső erőforrás-útmutató, hogy többet megtudjon a blokklánc technológiáról.

Forrás: https://coingeek.com/sign-without-knowing-the-private-key-in-ecdsa/