全員が見られるように平文メッセージを永続的に記録するのは賢明ではない。事故が起きるのを待っているようなものだ。
どんな悪影響を想定しているのだ?
これは ECDSA のブロードバンドサブチャネルのおかげで、現行のシステムでもある程度可能だ。
俺はブロックチェーン全体を覚えておく必要のないフルクライアントの実装をサポートするため、blockchain 上に任意の情報を分散させる方法を探していた。
http://bitcointalk.org/index.php?topic=505.0 を見てくれ ― “Balance Sheets” についてのスレッドだ。
データをエンコードする素朴なやり方は、いくつものアドレスへ送金して、たとえば受信アドレスの最初の数バイトを調べることでデータをデコードする方法だが、これは比較的少ないデータを送るのに多数のトランザクションが必要となり、帯域の無駄が大きい。
DSA の興味深い性質として、32 バイトのメッセージに署名しようとすると、各署名は 64 バイトの長さになる。つまり署名には、何もないところから生み出された 32 バイトの情報が含まれているということだ。アルゴリズムを調べてみるといい http://en.wikipedia.org/wiki/Digital_Signature_Algorithm 。この情報はランダムパラメーター k から来ている。署名は g^k という数と、k と g^k の両方を含む別の式とのペアで構成される。もし g^k が自分のデータを含むように k を選べるなら、blockchain に巨大な塊で平文データを含めることができる。(不)幸にも、これを行うのは困難でなければならない。さもなければ ECDSA は安全ではないということになる。
しかし、もし実質的に秘密鍵を公開すれば、誰でも簡単な代数を使って、その鍵で署名されたすべての署名に使われた k 値を復元できる。これに気づいたのは俺が最初ではない。http://en.wikipedia.org/wiki/Subliminal_channels を見てくれ。
その鍵に関連付けられた金をすべて使い切っていれば、もうその鍵はどうでもよくなる。(もちろん誰かがその鍵にさらに金を送れば、みんなが先を争ってそれを使おうとするだろう!)だから、何日でも何か月でも普通のトランザクションに大量のデータをエンコードしておき、その後で実質的に秘密鍵を公開すれば(そのためのエレガントな方法がある)、すべてのデータが丸見えになる。
もちろん俺の “balance sheet” スキームは、この問題(もし問題だとすれば)にそれほど悩まされない 😉
ByteCoin