上級 レッスン2 読了4分

セク256k1曲線:点、和、無限遠点

y² = x³ + 7 の有限体上。この授業では、定規とコンパスを使って2点を加算し、その後公式を使います。

みんなが見たことのある画像 — あの滑らかで対称的な曲線が右上に向かって緩やかに上昇しているもの — は、Bitcoinの曲線ではありません。それは実数上の同じ方程式の描画であり、説明のために使われます。前回のレッスンで扱った有限体上では、存在するのは散らばった点の雲で、曲線はありませんが、それでもすべてのルールは有効です。

方程式は y² = x³ + 7 です。これらの曲線が書かれる一般的な形式では、係数 a はゼロで、b は7です — このゼロは単なる詳細ではありません。これにより、次に来る式が短くなり、secp256k1 が速い理由の一つです。

数のペアが曲線の点であるためには、p での計算を行ったときに、方程式の両側が同じ余りを持つ必要があります。機能する各 x は偶数と奇数の2つの y のルートを生成するため、雲は対称的です。各点にはその鏡像が存在し、それがその点の負と呼ばれます。

2つの点の和は、実数から来た幾何学的な定義を持ち、地形の変更を経ても生き残りました。2つの点を通る直線を引き、その直線が曲線と交わる3番目の点を見つけ、その交点を反射します。結果が和です。有限体では直線を描くことはできませんが、直線が生成する式があり、それは同じように機能します。

2つの点の和は定規を使った構築であり、決して曲線から外れません。

式を書く価値があります。なぜなら、それは短いからです。異なる2つの点に対して、傾き s を y の差を x の差で割ったものとして計算します — ここでの割り算は、前回のレッスンで示したように逆数を掛けることと同じです。結果の x は、s の二乗から元の2つの x を引いたものであり、結果の y は、s に古い x と新しい x の差を掛けたものから元の y を引いたものです。3行で、どれも体から外れません。

自身に点を加えることは特別なケースです。なぜなら、1つの点だけを通る直線は存在しないからです。接線を使用し、傾きは3倍の x の二乗を2倍の y で割ったものになります。ここで a がゼロであることが現れます: 一般的な式ではもう一つの項が存在しますが、secp256k1 ではそれが単に存在しません。

もう一つのケースがあり、それは何かを発明することを強います。点をその鏡像に加えます。2つの点を通る直線は垂直であり、垂直な直線は曲線を3度目に交わりません。雲の中に答えはありません。解決策は、垂直が指す場所に点が存在することを宣言することでした: 無限遠点です。

直線が他に何も見つけない場所に、標準が点を置き、それが計算を完了させます。

これは修正ではありません。この要素を加えることで、集合はグループを定義する4つの特性を満たすようになります: 2つの点を加えると常に集合の点が得られ、括弧の順序は関係なく、任意の点に加えてもその点をそのまま返す中立要素が存在し、すべての点にはそれを無効にする反対の点が存在します。無限遠点はこの中立要素であり、この算術のゼロです。これが存在することにより、点を数で掛けることを話す意味が生まれます。

secp256k1 の正確なパラメータは2000年から公開されており、変わりません: 素数 p、ゼロ、7、生成元 G の2つの座標はそれぞれ64文字で書かれ、そして数 n は、G が無限遠点に戻るまでに到達する点の数です。

標準は作業台に固定され、誰でもそれに対して測定できます。

n については、実用的な影響を持つ観察があります。それは素数であり、曲線の点の総数は正確に n です — 数学者はこれをコファクターが1であると言います。このようなことが起こらない曲線には、小さなサブグループが隠れており、それらを利用して、実装をだまして空間のごく小さな部分で動作させる攻撃の一群があります。secp256k1 では、この種の攻撃が始まる場所がありません。

あなたはすでに点を加え、点を倍にする方法を知っています。256ビットの数で点を掛けることは、これらの2つの操作を繰り返すことであり、次のレッスンではこれを300ステップ未満で行う方法と、逆にするのに2^128のコストがかかる理由を示します。