中級 レッスン4 読了4分

デジタル署名:明らかにせずに証明する

署名は、鍵を見せずに鍵を持っていることを示します。そして、もしそれが二度同じであれば、それが落ちる鍵です。

紙に書かれた署名は常に同じです。あなたはそれを何度も同じように書けるように練習し、その繰り返しが権威を与えます。デジタル署名はその逆です。同じ署名が二度出てきたら、何かが深刻に間違っています。このレッスンの終わりには、まさにそのようにしてどれだけのお金が失われたかを知ることができます。

Bitcoinで署名するということは、3つの要素から2つの数字を生成することです。それはあなたの秘密鍵、あなたが承認している取引、そしてその場で選ばれるランダムな数字です。生成される2つの数字はrとsと呼ばれ、取引と一緒に送られます。それを生成する計算は上級コースの内容ですが、その保証についてはここで説明します。

取引を受け取る人は、取引、公開鍵、そしてペアのr, sを手にします。この3つの要素だけで、誰でも短い計算を行い、その2つの数字が対応する秘密鍵を持つ人からしか出てこないことを確認できます。この検証はマイクロ秒で行われ、費用はかからず、許可も必要ありません。そのため、何万人もの人々が互いに話すことなく同じ取引を確認しています。

錠前が皆の前で開き、鍵は一度も現れませんでした。

検証者が受け取らないものに注目してください。彼は秘密鍵を受け取らず、その一部も受け取らず、あなたの代わりに何かを署名することもできません。署名には鍵が含まれていません。それは鍵の結果であり、足跡が足の結果であるのと同じで、足を作ることはできません。

次に重要なのは、正確に何が署名されているのかという点で、ここに最も一般的な誤解があります。ビットコインの署名は「この人を承認する」とは言いません。それは取引全体の内容に基づいて計算されます:入力されるコイン、金額、送信先のアドレス。署名後に1サトシでも場所を変えると、異なる取引が生成され、その署名は単に使えません。誰も昨日のあなたの署名を使って、今日あなたのお金を別の場所に送ることはできません。

封印は最後のページだけでなく、すべてのページを固定します。ページを交換すると縫い目が切れます。

ここから、ウォレットが常に利用する実用的な結果が生まれます。署名すること自体では何も動かさないため、アドレスの鍵で任意のメッセージに署名し、その結果を誰かに見せることができます。検証者は、あなたがそのアドレスを管理していることを知ることができ、1つのコインも動かさずに済みます。これは所有を証明する正直な方法であり、何かを転送するように指示する人を疑う価値があります。

ランダムに選ばれる数字が欠けていますが、これが全体のアレンジの脆弱な部分です。この数字はnonceと呼ばれ、各署名で異なり予測不可能である必要があります。同じ鍵で異なる文書に同じnonceを使用して署名すると、2つの署名が2つの方程式のシステムになり、秘密鍵が高校の代数で導き出されます。

これは仮説ではありません。2010年12月、ベルリンで開催されたChaos Computer Clubの会議で、fail0verflowというグループが、SonyがPlayStation 3のプログラムに一定のnonceを使用していたことを示しました。コンソールのすべてのソフトウェアを認証する鍵が公然と導き出されました。2013年8月、Androidの乱数生成器の欠陥により、ビットコインウォレットが誰にも気づかれずにnonceを繰り返しました。影響を受けたアドレスは、まさにそれを探してブロックチェーンを調べていた人々によって一掃されました。

異なる文書に同じ署名が2つ:こうして秘密鍵が漏れます。

数学は決して失敗しませんでした。失敗したのは実装であり、これら2つの違いが上級コースで詳細に追求されます。2021年以降、BitcoinはSchnorr署名という第2のタイプの署名も受け入れています。これは短く、古いものにはない特性を持っています。複数の署名を1つにまとめることができます。これは別のモジュールの内容です。

あなたはすでに秘密鍵が数字であること、公開鍵がそこから来ること、アドレスが公開鍵から来ること、そして署名が何も見せずに所有を証明することを知っています。残るのは、なぜ誰も単にすべての数字を試してあなたのものを見つけないのかという質問です。次のレッスンでは、2^256の大きさについて学びます。