BitcoinVonInnen

secp256k1

Die elliptische Kurve hinter Bitcoin-Schlüsseln, ECDSA und Schnorr.

Block 958.922Live

Was ist secp256k1?

secp256k1 ist eine standardisierte elliptische Kurve über einem endlichen Primkörper.

Sie definiert eine Menge gültiger Punkte und Rechenregeln für diese Punkte. Bitcoin verwendet diese mathematische Struktur, um aus Private Keys Public Keys abzuleiten und ECDSA- sowie Schnorr-Signaturen zu erzeugen und zu prüfen.

Der Name setzt sich aus mehreren Teilen zusammen:

  • sec: Standards for Efficient Cryptography
  • p: Kurve über einem endlichen Primkörper
  • 256: Feldgröße in Bit
  • k1: Koblitz-Kurvenparameter

secp256k1 ist damit kein Signaturalgorithmus und keine Hash-Funktion. Sie beschreibt die mathematische Struktur, auf der Verfahren wie ECDSA und Schnorr arbeiten.

ECC

Elliptic Curve Cryptography

secp256k1

Kurve

elliptische Kurve

Mathematische Basis für Schlüsselraum und Punkte

Public-Key-Ableitung

d × G

Private Key → Punkt auf der Kurve

Signaturalgorithmen

auf derselben Kurve

ECDSASchnorr

Die Parameter von secp256k1

secp256k1 besteht nicht nur aus einer elliptischen Kurve, sondern aus mehreren mathematischen Parametern. Gemeinsam legen sie fest, auf welchen Zahlen gerechnet wird, welche Punkte gültig sind und welche Punktmenge für kryptographische Berechnungen verwendet wird.

Primkörper Fₚ

p

Welche Zahlen sind erlaubt?

Kurvengleichung

E

Welche Punkte sind gültig?

Gruppenordnung n

n

Wie viele Punkte besitzt die erzeugte Gruppe?


Der Primkörper

Der Primkörper legt den Zahlenraum fest, in dem secp256k1 arbeitet.

Für Bitcoin gilt

p=2256232977p = 2^{256} - 2^{32} - 977

Dadurch können Koordinaten ausschließlich Werte zwischen

00

und

p1p-1

annehmen.

Alle Rechnungen innerhalb von secp256k1 erfolgen modulo pp. Dadurch bleiben sämtliche Ergebnisse stets innerhalb dieses endlichen Zahlenraums.

Die Primzahl

p=2256232977p = 2^{256} - 2^{32} - 977

wurde bewusst gewählt. Sie liegt nur wenig unter 22562^{256} und ermöglicht besonders effiziente Berechnungen auf moderner Computerhardware.

Die vollständige Primzahl lautet

115.792.089.237.316.195.423.570.985.008.687.907.853.269.984.665.640.564.039.457.584.007.908.834.671.663

Die Kurvengleichung

Die Kurvengleichung legt fest, welche Koordinatenpaare gültige Punkte der elliptischen Kurve sind.

Für secp256k1 lautet sie

y2x3+7(modp)y^2 \equiv x^3 + 7 \pmod p

Das Symbol (modp)\equiv \pmod p bedeutet, dass beide Seiten der Gleichung im Primkörper Fp\mathbb{F}_p berechnet und miteinander verglichen werden.

Ein Koordinatenpaar (x,y)(x,y) gehört genau dann zur Kurve, wenn

(y2modp)=((x3+7)modp)(y^2 \bmod p)=((x^3+7)\bmod p)

gilt.

Alle Koordinatenpaare, die diese Bedingung erfüllen, sind gültige Kurvenpunkte. Alle anderen gehören nicht zur Kurve.


Die Gruppenordnung n

Nicht alle gültigen Kurvenpunkte werden in Bitcoin beliebig verwendet.

Aus dem Generatorpunkt GG entsteht durch wiederholte Punktaddition eine große zyklische Gruppe.

Die Anzahl der Punkte dieser Gruppe wird durch die Gruppenordnung nn beschrieben.

Für secp256k1 gilt

n=115.792.089.237.316.195.423.570.985.008.687.907.852.837.564.279.074.904.382.605.163.141.518.161.494.337n = 115.792.089.237.316.195.423.570.985.008.687.907.852.837.564.279.074.904.382.605.163.141.518.161.494.337

oder näherungsweise

n2256.n \approx 2^{256}.

Diese Zahl spielt eine zentrale Rolle, weil

  • Private Keys zwischen 11 und n1n-1 liegen,
  • Skalarmultiplikationen modulo nn erfolgen,
  • auch ECDSA und Schnorr modulo nn rechnen.

Der Primkörper pp legt den Zahlenraum der Koordinaten fest.

Die Gruppenordnung nn legt den Zahlenraum der Skalare fest, also der Private Keys und vieler kryptographischer Berechnungen.

Punkte auf secp256k1

Ein Punkt auf secp256k1 besteht aus zwei Koordinaten:

P=(x,y)P = (x, y)

Beide Koordinaten sind Elemente des endlichen Primkörpers Fp\mathbb{F}_p. Sämtliche Berechnungen werden daher modulo der Primzahl pp durchgeführt.

Ein Koordinatenpaar ist nur dann ein gültiger Kurvenpunkt, wenn es die Kurvengleichung erfüllt:

y2x3+7(modp)y^2 \equiv x^3 + 7 \pmod p

Nicht jedes beliebige Koordinatenpaar gehört somit zur Kurve.

Neben den Punkten mit konkreten xx- und yy-Koordinaten existiert ein weiterer besonderer Punkt: der Punkt im Unendlichen.

Punktnegation

Punktnegation über F₂₂₃−P = (x, −y mod p)050100150200223-223-150-100-50050100150223xyy = 0P = (89, 127)(x, −y) = (89, -127)−P = (89, 96)mod 223Negation in F₂₂₃Geometrisch:(x, −y)Im Primkörper:−y mod p = p − y−127 ≡ 96 (mod 223)−P = (89, 96)

Zu jedem Kurvenpunkt

P=(x,y)P = (x, y)

existiert ein negierter Punkt:

P=(x,ymodp)-P = (x, -y \bmod p)

Da die Berechnungen im endlichen Körper Fp\mathbb{F}_p stattfinden, wird auch die negative yy-Koordinate modulo pp dargestellt.

Für y0y \neq 0 gilt:

ymodp=py-y \bmod p = p-y

Damit lautet der negierte Punkt:

P=(x,py)-P = (x, p-y)

Der ursprüngliche Punkt und sein negierter Punkt besitzen dieselbe xx-Koordinate. Ihre yy-Koordinaten ergänzen sich modulo pp zu 00:

y+(py)0(modp)y + (p-y) \equiv 0 \pmod p

Beide Punkte erfüllen die Kurvengleichung, da durch das Quadrieren das Vorzeichen verschwindet:

(y)2=y2(-y)^2 = y^2

Für eine gültige xx-Koordinate existieren daher normalerweise zwei mögliche Kurvenpunkte:

P=(x,y)P = (x, y)

und

P=(x,py)-P = (x, p-y)

Werden diese beiden Punkte addiert, heben sie sich gegenseitig auf:

P+(P)=OP + (-P) = \mathcal{O}

Die Punktnegation ist später auch für komprimierte öffentliche Schlüssel relevant.

Da zu einer xx-Koordinate zwei mögliche yy-Koordinaten gehören können, muss zusätzlich angegeben werden, welcher der beiden Punkte gemeint ist.

Punkt im Unendlichen

Der Punkt im Unendlichen wird üblicherweise mit

O\mathcal{O}

bezeichnet.

Der Name „Punkt im Unendlichen“ ist historisch bedingt und kann etwas irreführend sein. Tatsächlich handelt es sich nicht um einen besonders weit entfernten Punkt, sondern um das neutrale Element der Punktaddition.

Er besitzt keine gewöhnlichen xx- und yy-Koordinaten und kann nicht direkt in die Kurvengleichung eingesetzt werden.

Stattdessen wird er als zusätzliches Element definiert, damit die Punkte auf der Kurve zusammen mit der Punktaddition eine mathematische Gruppe bilden.

Der Punkt im Unendlichen ist das neutrale Element dieser Gruppe.

Für jeden Kurvenpunkt PP gilt:

P+O=PP + \mathcal{O} = P

und

O+P=P\mathcal{O} + P = P

Seine Funktion entspricht damit der Rolle der Zahl 00 bei der gewöhnlichen Addition:

a+0=aa + 0 = a

Der Punkt im Unendlichen entsteht außerdem, wenn ein Punkt zu seinem negierten Punkt addiert wird:

P+(P)=OP + (-P) = \mathcal{O}

Geometrisch verläuft die Gerade durch einen Punkt und seinen negierten Punkt vertikal. Sie schneidet die Kurve an keinem weiteren endlichen Punkt.

Punkt im Unendlichen über F₂₂₃P und −P besitzen dieselbe x-Koordinate.005050100100150150200200223223xyP = (89, 127)−P = (89, 96)P + (−P)Punkt im Unendlichen 𝒪Keine Koordinaten in F₂₂₃Zusätzlich definiertesGruppenelementP + (−P) = 𝒪𝒪 liegt nicht im Gitterund besitzt keine x-/y-Koordinate.

Das Ergebnis dieser Punktaddition wird daher als Punkt im Unendlichen definiert.

Punktoperationen

Auf den Punkten einer elliptischen Kurve werden keine gewöhnlichen Zahlenoperationen ausgeführt.

Stattdessen existieren eigene Operationen, mit denen aus einem oder mehreren Kurvenpunkten neue Kurvenpunkte berechnet werden.

Die wichtigsten Operationen sind:

Punktaddition

+

P + Q = R

Zwei verschiedene Kurvenpunkte ergeben einen neuen Punkt.

Punktverdopplung

2P = P + P

Sonderfall der Addition: ein Punkt wird mit sich selbst addiert.

Skalarmultiplikation

kP

Wiederholte Addition, typisch per Double-and-Add. Grundlage für Q = dG.

Alle Berechnungen erfolgen im endlichen Primkörper Fp\mathbb{F}_p und damit modulo pp.

Punktaddition

Bei der Punktaddition werden zwei Kurvenpunkte

P=(x1,y1)P=(x_1,y_1)

und

Q=(x2,y2)Q=(x_2,y_2)

zu einem neuen Kurvenpunkt

R=P+QR=P+Q

addiert.

Für zwei unterschiedliche Punkte mit

x1x2x_1 \neq x_2

wird zunächst die Steigung λ\lambda berechnet:

λ=y2y1x2x1(modp)\lambda = \frac{y_2-y_1}{x_2-x_1} \pmod p

Da Division im endlichen Körper nicht unmittelbar möglich ist, wird durch das multiplikative Inverse des Nenners multipliziert:

λ=(y2y1)(x2x1)1(modp)\lambda = (y_2-y_1)(x_2-x_1)^{-1} \pmod p

Anschließend werden die Koordinaten des Ergebnispunkts berechnet:

x3=λ2x1x2(modp)x_3 = \lambda^2-x_1-x_2 \pmod p y3=λ(x1x3)y1(modp)y_3 = \lambda(x_1-x_3)-y_1 \pmod p

Damit lautet der neue Punkt:

R=(x3,y3)R=(x_3,y_3)
Punktaddition über F₂₂₃R = P + Q005050100100150150200200223223xyP = (1, 30)Q = (61, 190)R = (69, 86)Rechnung in F₂₂₃P = (1, 30)Q = (61, 190)y₂ − y₁ = 190 − 30 = 160x₂ − x₁ = 61 − 1 = 6060⁻¹ ≡ 197 (mod 223)λ = 160 · 197 ≡ 77 (mod 223)x₃ = λ² − x₁ − x₂= 77² − 1 − 61= 5929 − 62 ≡ 69 (mod 223)y₃ = λ(x₁ − x₃) − y₁= 77(1 − 69) − 30= 77 · (−68) − 30 ≡ 86 (mod 223)R = (69, 86)

Das Ergebnis einer gültigen Punktaddition liegt erneut auf der elliptischen Kurve.

Ein Sonderfall tritt ein, wenn Q=PQ=-P gilt (siehe Punktnegation). Dann heben sich beide Punkte gegenseitig auf:

P+(P)=OP+(-P)=\mathcal{O}

Das Ergebnis ist der Punkt im Unendlichen O\mathcal{O}.

Punktverdopplung

Bei der Punktverdopplung wird ein Punkt mit sich selbst addiert:

R=P+PR=P+P

oder verkürzt:

R=2PR=2P

Da beide Ausgangspunkte identisch sind, kann für die Berechnung der Steigung nicht die gewöhnliche Formel der Punktaddition verwendet werden.

Für eine Kurve der Form

y2=x3+ax+by^2=x^3+ax+b

lautet die Steigung bei der Punktverdopplung:

λ=3x12+a2y1(modp)\lambda = \frac{3x_1^2+a}{2y_1} \pmod p

Bei secp256k1 gilt:

a=0a=0

Daher vereinfacht sich die Formel zu:

λ=3x122y1(modp)\lambda = \frac{3x_1^2}{2y_1} \pmod p

Im endlichen Körper wird erneut mit dem modularen Inversen gerechnet:

λ=3x12(2y1)1(modp)\lambda = 3x_1^2(2y_1)^{-1} \pmod p

Die Koordinaten des Ergebnispunkts werden anschließend wie bei der Punktaddition berechnet:

x3=λ22x1(modp)x_3 = \lambda^2-2x_1 \pmod p y3=λ(x1x3)y1(modp)y_3 = \lambda(x_1-x_3)-y_1 \pmod p

Damit gilt:

2P=(x3,y3)2P=(x_3,y_3)
Punktverdopplung über F₂₂₃2P = P + P005050100100150150200200223223xyP = (1, 30)2P = (61, 190)Rechnung in F₂₂₃P = (1, 30)a = 0 (secp256k1)3x₁² = 3 · 1² = 32y₁ = 2 · 30 = 6060⁻¹ ≡ 197 (mod 223)λ = 3 · 197 ≡ 145 (mod 223)x₃ = λ² − 2x₁= 145² − 2 · 1= 21025 − 2 ≡ 61 (mod 223)y₃ = λ(x₁ − x₃) − y₁= 145(1 − 61) − 30= 145 · (−60) − 30 ≡ 190 (mod 223)2P = (61, 190)

Die Punktverdopplung ist somit kein grundsätzlich anderer Vorgang, sondern ein Sonderfall der Punktaddition.

Skalarmultiplikation

Bei der Skalarmultiplikation wird ein Kurvenpunkt wiederholt mit sich selbst addiert.

Für eine ganze Zahl kk und einen Punkt PP gilt:

kP=P+P++Pk-malkP = \underbrace{P+P+\dots+P}_{k\text{-mal}}

Beispielsweise:

3P=P+P+P3P=P+P+P 5P=P+P+P+P+P5P=P+P+P+P+P

Die Skalarmultiplikation ist keine gewöhnliche Multiplikation der Koordinaten.

Es gilt daher nicht:

kP=(kx,ky)kP=(kx,ky)

Stattdessen wird die Punktaddition wiederholt angewendet.

Eine direkte Berechnung durch kk einzelne Additionen wäre bei großen Zahlen jedoch zu langsam. Deshalb wird die Skalarmultiplikation mit einem effizienteren Verfahren ausgeführt, das Punktverdopplungen und Punktadditionen kombiniert.

Ein häufig verwendetes Verfahren ist Double-and-Add.

Dabei wird der Skalar kk binär dargestellt. Für jedes Bit wird der aktuelle Punkt verdoppelt. Ist das jeweilige Bit gesetzt, wird zusätzlich der Ausgangspunkt addiert.

Für

k=13k=13

gilt beispielsweise:

13=8+4+113=8+4+1

und damit:

13P=8P+4P+P13P=8P+4P+P
Skalarmultiplikation über F₂₂₃k = 13 · Double-and-Add005050100100150150200200223223xyP (1, 30)2P (61, 190)4P (183, 30)8P (13, 190)13P (13, 33)Double-and-Addk = 13 = 1101₂ = 8 + 4 + 1Nicht (kx, ky), sondern wiederholte AdditionVerdopplungsketteP = (1, 30)2P = (61, 190)4P = (183, 30)8P = (13, 190)gesetzte Bits addieren13P = 8P + 4P + P8P = (13, 190)4P = (183, 30)P = (1, 30)13P = (13, 33)analog: Q = dG

Die Skalarmultiplikation ist die zentrale Operation der Kryptografie mit secp256k1.

Aus einem privaten Schlüssel dd und dem Generatorpunkt GG wird der öffentliche Schlüssel berechnet:

Q=dGQ=dG

Die Berechnung von QQ aus dd und GG ist effizient.

Die umgekehrte Berechnung des privaten Schlüssels dd aus QQ und GG gilt dagegen bei ausreichend großen Parametern als praktisch nicht durchführbar. Dieses Problem wird als elliptisches Kurven-Diskreter-Logarithmus-Problem bezeichnet.

Generatorpunkt GG

Der Generatorpunkt GG ist ein fest definierter Punkt auf der elliptischen Kurve secp256k1.

Alle Bitcoin-Implementierungen verwenden denselben Generatorpunkt. Er ist Bestandteil der Spezifikation der Kurve und kein geheimer Wert.

Seine Koordinaten lauten:

G=(xG,  yG)G = (x_G,\;y_G)

mit

xG=79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798x_G = 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798

als Dezimalzahl

55.066.263.022.277.343.669.578.718.895.168.534.326.250.603.453.777.594.175.500.187.360.389.116.729.240

und

yG=483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8y_G = 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

als Dezimalzahl

32.670.510.020.758.816.978.083.085.130.507.043.184.471.273.380.659.243.275.938.904.335.757.337.482.424

Da diese Zahlen jeweils 256 Bit lang sind, werden sie üblicherweise in hexadezimaler Schreibweise dargestellt.

Der Generatorpunkt bildet den Ausgangspunkt für die Berechnung jedes öffentlichen Schlüssels.

Aus einem privaten Schlüssel dd wird durch Skalarmultiplikation der öffentliche Schlüssel berechnet:

Q=dGQ=dG

Dabei bedeutet

dGdG

nicht die gewöhnliche Multiplikation zweier Zahlen.

Stattdessen wird der Generatorpunkt GG mithilfe der zuvor erklärten Punktoperationen wiederholt mit sich selbst kombiniert.

Intern besteht die Berechnung ausschließlich aus Punktverdopplungen und Punktadditionen.

Beispielsweise gilt:

5G=G+G+G+G+G5G = G + G + G + G + G

oder effizienter:

5G=4G+G5G = 4G + G

Für große Werte von dd kommt das Double-and-Add-Verfahren zum Einsatz. Dabei werden zunächst durch Punktverdopplungen die Zweierpotenzen des Generatorpunkts erzeugt:

G,  2G,  4G,  8G,  16G,  G,\;2G,\;4G,\;8G,\;16G,\;\dots

Anschließend werden entsprechend der Binärdarstellung des privaten Schlüssels nur die benötigten Punkte addiert.

Generatorpunkt über F₂₂₃Q = dG mit d = 5005050100100150150200200223223xyG = (1, 30)2G = (61, 190)4G = (183, 30)Q = 5G = (39, 193)Rechnung in F₂₂₃G = (1, 30)d = 55 = 101₂ = 4 + 1Q = dGPunktverdopplung2G = G + G = (61, 190)4G = 2G + 2G = (183, 30)Punktaddition5G = 4G + G4G = (183, 30)G = (1, 30)alternativ: 5G = G + G + G + G + GQ = 5G = (39, 193)G öffentlich · d geheim

Die Berechnung des öffentlichen Schlüssels aus dd und GG ist sehr effizient.

Die umgekehrte Aufgabe, den privaten Schlüssel dd allein aus dem öffentlichen Schlüssel QQ und dem bekannten Generatorpunkt GG zu bestimmen, gilt dagegen als praktisch nicht durchführbar.

Dieses mathematische Problem wird als Elliptic Curve Discrete Logarithm Problem (ECDLP) bezeichnet und bildet die Sicherheitsgrundlage von Bitcoin.

Vom Private Key zum Public Key

Ein Bitcoin-Schlüsselpaar besteht aus einem privaten und einem öffentlichen Schlüssel.

Der Private Key muss geheim bleiben und dient zum Erzeugen digitaler Signaturen.

Der Public Key wird aus dem Private Key berechnet und kann ohne Sicherheitsrisiko veröffentlicht werden.

Die Berechnung erfolgt mithilfe der zuvor vorgestellten Skalarmultiplikation auf der elliptischen Kurve secp256k1.

Der Private Key dd

Der Private Key ist eine zufällig gewählte ganze Zahl.

Er muss im Bereich

1d<n1 \le d < n

liegen.

Dabei bezeichnet nn die Gruppenordnung des Generatorpunkts GG:

als Dezimalzahl

115.792.089.237.316.195.423.570.985.008.687.907.852.837.564.279.074.904.382.605.163.141.518.161.494.337

hexadezimal

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

und näherungsweise

n2256.n \approx 2^{256}.

Da nn nahezu 22562^{256} entspricht, existieren ungefähr 22562^{256} mögliche Private Keys.

Ein Private Key wird üblicherweise hexadezimal dargestellt.

Beispielsweise:

1E99423A4ED27608A15A2616F7D3C4D7F6FBA6C9C4A8F2E9B5D89C6E7A3F9A42

Der Private Key ist lediglich eine Zahl. Erst durch die Skalarmultiplikation mit dem Generatorpunkt entsteht daraus ein öffentlicher Schlüssel.

Public Key = d × G

Der öffentliche Schlüssel wird aus dem Private Key dd und dem Generatorpunkt GG berechnet:

Q=dGQ=dG

Dabei bedeutet

dGdG

nicht die gewöhnliche Multiplikation zweier Zahlen.

Stattdessen wird der Generatorpunkt mithilfe der zuvor erklärten Punktoperationen skaliert.

Intern besteht die Berechnung ausschließlich aus:

  • Punktverdopplungen
  • Punktadditionen

Je nach Binärdarstellung des Private Keys werden unterschiedlich viele Punktverdopplungen und Punktadditionen ausgeführt.

Private Key d

256 Bit

hexadezimal

1E99423A4ED27608A15A2616F7D3C4D7F6FBA6C9C4A8F2E9B5D89C6E7A3F9A42

Dezimal

13.840.170.145.645.816.737.842.251.483.233.475.794.309.135.176.820.001.688.593.814.109.035.218.049.602

d als 256 Bits

MSB links · nur Bit = 1 wird addiert
2^255
00011110100110010100001000111010
2^224
2^223
01001110110100100111011000001000
2^192
2^191
10100001010110100010011000010110
2^160
2^159
11110111110100111100010011010111
2^128
2^127
11110110111110111010011011001001
2^96
2^95
11000100101010001111001011101001
2^64
2^63
10110101110110001001110001101110
2^32
2^31
01111010001111111001101001000010
2^0
134× Bit = 1→ addiere 2^i·G122× Bit = 0→ überspringen

Double-and-Add

≈ 255 Verdopplungen · 134 Additionen

Für jede Binärstelle mit Wert 1 entsteht ein eigener Vielfachen-Term. Die Zweierpotenzen von G entstehen durch wiederholte Punktverdopplung.

2^252·G2^251·G2^250·G2^249·G2^6·G2^1·G

Q = Σ 2^i·Güber 134 gesetzte Bits i

Public Key Q = d·G

Kurvenpunkt

x = 5BB211C482237F713A1457710D9FE38E1F15FFDB1E17257897FCE67DAD579F59

y = 4EBF74C48AE39E27D29938B2563CDF4043DE3940CB284FEE4369F20EF6244DF7

Das Ergebnis der Berechnung ist wiederum ein Punkt auf der elliptischen Kurve:

Q=(x,y)Q=(x,y)

Komprimierte Public Keys

Ein Public Key besteht ursprünglich aus den beiden Koordinaten

(x,y)(x,y)

und benötigt daher 65 Byte.

Da zu jeder gültigen xx-Koordinate nur zwei mögliche yy-Koordinaten existieren (siehe Punktnegation), muss nicht der vollständige Wert von yy gespeichert werden.

Stattdessen genügt ein Präfix, das angibt, welche der beiden Möglichkeiten verwendet wird:

  • 02 für eine gerade yy-Koordinate
  • 03 für eine ungerade yy-Koordinate

Ein komprimierter Public Key besitzt daher die Form:

02 || x

oder

03 || x

Er benötigt nur noch 33 Byte.

x = 89 / 222

X-only Public Keys

Mit Taproot (BIP340) wurde eine weitere Darstellung eingeführt.

Dabei wird ausschließlich die xx-Koordinate gespeichert:

x

Die Parität der yy-Koordinate wird dabei nicht mehr übertragen.

Stattdessen wird immer die Variante mit gerader yy-Koordinate verwendet.

Dadurch besteht ein X-only Public Key nur noch aus 32 Byte.

Intern existiert weiterhin ein vollständiger Kurvenpunkt

(x,y),(x,y),

gespeichert wird jedoch ausschließlich die xx-Koordinate.

x = 89 / 222

Diese Darstellung wird ausschließlich für Schnorr-Signaturen und Taproot verwendet.

Was ist das Elliptic Curve Discrete Logarithm Problem?

Aus einem Private Key lässt sich der Public Key effizient berechnen:

Q=dGQ=dG

Die umgekehrte Richtung ist jedoch das eigentliche Sicherheitsprinzip von Bitcoin. Gegeben sind lediglich der Public Key

QQ

und der Generatorpunkt

G.G.

Gesucht ist der Private Key

d.d.

Diese Aufgabe wird als Elliptic Curve Discrete Logarithm Problem (ECDLP) bezeichnet.

Bis heute ist kein effizienter Algorithmus bekannt, der den Private Key aus einem Public Key berechnen kann.

Die einzige bekannte allgemeine Vorgehensweise besteht darin, mögliche Werte für dd auszuprobieren:

1 · G = Q ?
2 · G = Q ?
3 · G = Q ?
4 · G = Q ?
...

Da es ungefähr

22562^{256}

bzw.

115.792.089.237.316.195.423.570.985.008.687.907.853.269.984.665.640.564.039.457.584.007.913.129.639.936

mögliche Private Keys gibt, ist ein vollständiges Durchprobieren aller Möglichkeiten praktisch unmöglich.

Versuch k = 1

Abgrenzung zu ECDSA und Schnorr

Die in diesem Kapitel beschriebene elliptische Kurvenkryptographie ist kein Signaturverfahren.

Sie stellt lediglich die mathematische Grundlage bereit, auf der Bitcoin seine kryptographischen Verfahren aufbaut.

Darauf aufbauend verwendet Bitcoin zwei digitale Signaturverfahren:

  • ECDSA für ältere Ausgabetypen
  • Schnorr-Signaturen seit dem Taproot-Upgrade

Beide Verfahren nutzen dieselben Private und Public Keys sowie dieselbe elliptische Kurve secp256k1. Sie unterscheiden sich jedoch darin, wie digitale Signaturen erzeugt und überprüft werden.

Weiterführende Informationen

Grundlagen und Spezifikationen

Bitcoin

Interaktive Visualisierung