Ethereumコントラクトと識別不可能難読化
2022/1/19の記事では「暗号化と難読化」というタイトルで難読化とは何かという基本的な解説をしました。これに関連して、「Ethereumコントラクトを難読化」という話題があります。識別不可能難読化(Indistinguishable Obfuscation; IO)という特殊な難読化によって、Ethereumコントラクトにビットコインネットワークのアドレスを含めることができると言われています。今回は、このテーマで解説したいと思います。
このような話は、おおよそ2014年ごろにあったようです。BITCOIN MAGAZINEの2014年2月8日の記事のリンクがあります。
https://bitcoinmagazine.com/.../cryptographic-code...
記事中に、「Consider the simplest case: an obfuscated Ethereum contract can contain a private key to an address inside the Bitcoin network, and use that private key to sign Bitcoin transactions when the contract’s conditions are met.」とあります。以前の記事で説明した通り、難読化されたプログラムも元と同様に実行ができ、単にソースの内容がわからないようになっているというだけです。したがって、秘密鍵のような本来秘匿すべきデータもEthereumコントラクトに含めることができるというわけです。
記事では、「Thus, as long as the Ethereum blockchain exists, one can effectively use Ethereum as a sort of controller for money that exists inside of Bitcoin. 」とあります。つまり、ある条件が満たされたとき、Ethereumコントラクト内にある秘密鍵を使って(ただし難読化されたまま)、Bitcoinブロックチェーンに何らかの操作を与えることができると言っています。記事中では「a decentralized organization to have control of a bank account.」とあります。この機能によりどのような事が我々にもたらされるのか。例えば、分散型や自律型で意思決定される中央銀行的存在ができるのかといった疑問がわいてきます。しかし、今回は本コラムとは別の考察としましょう。いずれにしても、何か可能性がありそうに感じます。
しかしながら、もしこの難読化Ethereumコントラクトを実装してみようとした試みがあるとするならば、2014年以降にもう少し色々記事・論文があっても良いものではないかと思います。私がネット考古学的方法で調べてもあまり見つかりませんでした。おそらく、「識別不可能難読化(indistinguishable obfuscation; IO)」の手法そのものに理由があるように思います。
IOはどういうものかというと、ザックリといえば、我々人類が現時点で想定できる究極の難読化のようなものです。
難読化というのは、本来、プログラムのソースコードを隠すなどの理由から始まった技術にすぎなかったのですが、理論的にもここ10年は大きく進歩がありました。始まりはゼロ知識証明の理論をベースに、「ブラックボックスの難読化」ということが可能かどうかについて議論が行われていました。ブラックボックスというのは、数学定義するのはなかなか難しいのですが、日常的に使われている言葉の意味とおおよそ同じです。中身の動作がわからないが、なんかを入力したら、なんかが出てくる。なんかボタン押したら、なんかが作動する。というものですね。これを難読化して、なおかつリバースエンジニアリングができないように内容を秘密にすることができるか?という問題です。実は理論的にはかなり調べられていて、ブラックボックス難読化は「できない」ということです。一般的な解釈として、やはり完全なブラックボックスで動作するプログラムを難読化させるなどというのは、厳しすぎるということになるわけです。それで、もう少し条件を緩めて、実現性のあるものはないのかということになったわけです。それが「IO識別不可能難読化」という手法です。IOはブラックボックス難読化より、条件が緩く、弱い難読化などと言われます。しかし、実行可能な手続きの中では最良である、とされています。
このIOは素晴らしいものとされており、理論的には様々な応用があるとされています。そのため、IOは、”Crown Jewels of Cryptography”とも言われるそうです。先程のEthereumコントラクト難読化の話も応用例の一つです。
しかし、実行には相当な時間がかかるようです。これまでIOを行うアルゴリズムがいくつか提案されていますが、いずれも理論的なIOを実現できているのかという実験的検証が行われています。
https://www.esat.kuleuven.be/cosic/blog/program-obfuscation/
上のリンク先にありますが、難読化ツールの検証では、実行時間がかかり全く実用的ではないと報告されています。おそらくこのことがあり、2014年以降もコントラクトを難読化しようとはされていなかったのでしょう。EthereumコントラクトとIOについては現時点では難しいとは思いますが、研究が進んでいる領域でもあり、今後アルゴリズムの大幅な改善があれば注目されるかもしれません。
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション