Account Abstraction(アカウント抽象化)とは?
翻訳:Takeshi@Think Globally, Act Locally
Part 1: AAが暗号の普及に向けたゲームチェンジャーとなる理由
TwitterでVitalikをフォローしている人なら、「Account Abstraction(以下AA)」について聞いたことがあるかもしれません。Vitalikは、AAの実装はEthereum開発者の長年の夢であったと述べており、同時にいくつかの提案を行っています。
また、代表的なL2ソリューションであるStarkNetとzkSyncが、ネイティブなAAのローンチを発表したことも聞いたことがあるかもしれません。
しかし、AAとは一体何なのでしょうか?
また、なぜそれが暗号の普及にとってのゲームチェンジャーとなり得るのでしょうか。
このブログ記事はシリーズ化する形で、これらの疑問にお答えしていきたいと思います。最初の投稿では、イーサリアムアカウントの制限について解説します。そして、AAがどのようにこの問題を解決するのかを説明します。
要約すると、AAは暗号を、小さなミスで全てを失う可能性のある現在の「ワンアカウント・フィット・オール」のアプローチから、アカウントをユーザーニーズに合わせてカスタマイズできる仕組みに移行させるものです。つまり、セルフカストディのためのセーフティネットを構築することができるものであり、より洗練されたUXの提供を可能にします。
これは、シードフレーズや中央集権取引所に頼る怖い世界に代わるものとして、セルフカストディを人々にとっての選択肢とするための画期的な取り組みです。
では、さっそく中身を見てみましょう:
イーサリアムアカウントはどのように機能するのか?
AAを理解するためには、まず現在のイーサリアムでアカウントがどのように動作しているかを理解する必要があります。
イーサリアムには2種類のアカウントが存在します:
- 外部所有アカウント(EOA)
- Contract Accounts (CA)
この記事では、ユーザーにとって現状より重要なEOAに焦点を当てます。コントラクトアカウントについてより詳細を知りたい場合はこちらをご覧ください。
EOAはブロックチェーンの外部にあるもの、つまりユーザーが所有するアカウントであり、3つのプロパティが存在します:
- アカウントで利用可能なETHの量を表す残高
- 全てのトランザクションが一意であることを保証するためのナンス
- ネットワーク上でアカウントを一意に識別するためのアドレス
ブロックチェーンの状態=アカウントの状態は、トランザクション(以下tx)の発生によってのみ変更できます。このトリガーは「ブロックチェーンの外部からもたらされる何か」であり、イーサリアムでは、全てのtxはEOAから開始される必要があります。つまり、イーサリアム仮想マシン(EVM)によってtxが実行されるとき、最初に触れられるアカウントはEOAでなければならず、対応するアカウントはtx全体の実行のためにマイナーに手数料を支払わなければなりません。
アカウントの所有権の証明方法は?
誰かがあなたのアカウントのETHを使うのを防ぐためには、何らかの認可が必要となります。
イーサリアムの全てのアカウントは、シグナーと呼ばれる暗号オブジェクトと関連付けられています。シグナーは秘密鍵と公開鍵の2つの鍵(キーペア)で構成されています。
秘密鍵はデジタルメッセージに署名するために使用され、公開鍵はある署名が対応する秘密鍵によって署名されたことを誰でも確認できるようにするものです。暗号技術の背後にある全ての数学は、私があなたに私の公開鍵を与えた場合にも、私の秘密鍵を導き出す方法がないことを保証し、私が秘密鍵で署名したメッセージを提供する場合は、私が署名することができた唯一の人であることを確認することを可能にします。
キーペアに基づく暗号署名を生成する方法は複数存在しており、イーサリアムでは、Secp256k1という特定の楕円曲線上でECDSAという特定の署名方式を使用しています。
では、アカウントはどのように署名者と関連付けられるのでしょうか?
EOAアドレスは署名者の公開鍵から導かれます。具体的には、公開鍵のKeccak-256ハッシュの最後の20バイトがアドレスとなるのです。
したがって、アカウントの所有者は、対応する秘密鍵でtxのパラメータに署名することで、そのアカウントからのtxを承認することができます。txと署名を受け取ると、EVMは署名が対象アカウントで有効であることを検証し、txナンスがアカウントナンスと一致することを検証し、txを実行し、アカウント残高からtx手数料を差し引く仕組みです。
ここまでに学んだことを振り返ってみましょう。
イーサリアム上のアカウントは3つの要素で構成されている:
- 残高とnonce を含むステート
- アカウントからのtxを検証・実行するためにEVMにハードコードされたロジック
- アドレス
また、署名者の公開鍵から得られるアドレスと、署名者からの有効な署名を正確に指定するハードコードされたロジックを介して、アカウントは署名者(キーペア)と緊密に結合していることがわかります。
アカウントの概念(あなたのトークンを保持するオブジェクト)と署名者の概念(トークンの移動権限を持つオブジェクト)は基本的に同じものです。秘密鍵を持っていれば、自動的に関連アドレスにアカウントを持っていることになり、あるアドレスにアカウントの保有には、対応する秘密鍵を持っている必要があります。このロジックは、EVMのコア部分にハードコーディングされています。
この方法は、理解しやすく、実装が簡単という利点があります。また、コンピュータ上でキーペアを生成するだけで、簡単に始められます。
さらに重要なのは、「あなたの鍵ではなく、あなたのコインでもない」という最近よく耳にするキャッチーなフレーズを体現する仕組みであるということです
しかし、このアカウントと署名者のカップリングには、多くの問題もあります。
秘密鍵を盗難・紛失してしまった場合は?
秘密鍵はあなたのアカウントそのものなので、鍵を失うことはあなたのアカウントを失うことを意味します。
つまり、もし他の誰かがあなたの秘密鍵を手に入れたら、あなたのアカウントの主権が共有されることになり、そこに含まれる全てのトークンも奪われることになります。あなたもウォレットの開発者もそれに対しては何もすることができません。
実際に、秘密鍵の盗難や紛失が原因で、何億ドル、何十億ドルというお金がすでに失われたり、盗まれたりしています。
もちろん、ハードウェアウォレットを使って、秘密鍵を金属片に書き込み、金庫に保管することはできます。この技術のアーリーアダプターたちは、ある意味オタク気質があるのでこの仕組みを許容していたのですが、この仕組みのままで何十億人ものユーザーに対してスケールアップできるとは誰も思っていないでしょう。
ECDSAとは異なる署名方式を使いたい、または異なる楕円曲線を使いたい場合はどうすればいいのでしょうか。機能する量子コンピュータが登場したらECDSAが破られることができることは分かっています。
私たちはより良いものを作ることができるのでしょうか?
予想外かもしれませんが、それは比較的簡単な仕組みで可能になります。
トークンを保持するオブジェクト(アカウント)とトークンを移動する権限を持つオブジェクト(署名者)を切り離すのです。
具体的には、アカウントを、有効なtxを定義する独自のロジックを持つスマートコントラクトに変えるのです。唯一の要件は、txを検証して実行するためのメソッドを持つ特定のインターフェースに準拠することです。
AAの応用によって、各ユーザーは自分のニーズに合ったアカウントを持つことができます:
- DECDSAとは異なる署名方式を使いたい場合には、そのためのアカウントを作成することができます。
- トランザクションの認証に複数の鍵を使用したい場合には、そのためのアカウントを作成することができます。
- 毎週、署名者を変更したい場合にも、そのためのアカウントを作成することができます。
可能性は無限大であり、StarkNetやzkSync 2.0のようなAAをサポートするチェーンで、どのような新しいユースケースが現れるのかが今から楽しみでなりません。
本シリーズの第2回では、AAが独自に実現する機能の具体例をいくつか紹介し、ブロックチェーン技術の導入に向けたゲームチェンジャーになると考える理由を紹介していきます。