---
title: "RIP-7212とは?secp256r1曲線サポートのためのプリコンパイル"
description: "RIP-7212は、プリコンパイル済みコントラクトによって安価かつ安全で高速なP256曲線検証を可能にするEthereumプロトコルのコア変更です。"
---

# RIP-7212とは?secp256r1曲線サポートのためのプリコンパイル

<ImageBlock
  src="https://media.alchemy.com/1709769768-what-is-rip-7212.jpg"
  alt="RIP-7212 secp256r1 プリコンパイル解説バナー"
  width={3200}
  height={1800}
  priority
/>

[Account Abstraction](https://www.alchemy.com/overviews/what-is-account-abstraction)は、Ethereumアカウントにアカウントプログラマビリティという重要な機能をもたらした。これにより開発者は、1日あたりの支出上限の設定、異なる署名者の使用、任意のトークンでの手数料支払いなど、何千もの新機能を作成できるようになる。本稿では、rollup上への[RIP-7212](https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md)（旧EIP-7212）の統合により、生体認証署名者の利用が可能になることで、開発者がどのようにユーザー体験を改善できるかに焦点を当てる。

## 現在のEthereum署名
**デフォルトアカウントの多くがexternally owned account（EOA）であるEVMネットワークでは、**所有権は楕円曲線暗号（ECC）によって証明される。これは、鍵を明かすことなく、鍵を保有していること、およびそのメッセージがその鍵で署名されたことをトラストレスに証明する方式である。

現在、ユーザーが資金を管理する方法は、self-custodialウォレット（シードフレーズとして鍵を保管する方式）か、custodialソリューション（鍵管理を第三者に委ねる方式）のいずれかである。

一方で、web2セキュリティ研究の数十年の蓄積により、実戦で鍛えられたハードウェア・ソフトウェア・ソーシャルの秘密鍵管理スタックが確立されている。その結果、現代のデバイスにはユーザーの鍵を保護するために設計されたセキュアなハードウェア要素が搭載されている。しかし、これらはEthereumが現在採用しているsecp256k1楕円曲線をサポートしていない。そのため、こうしたセキュリティのベストプラクティスをEOAに組み込む手段は存在しない。

スマートコントラクトアカウントは、secp256k1（Ethereumが唯一ネイティブサポートする曲線）以外の楕円曲線を含む、さまざまな認証方式を可能にする。生体認証署名者のような異なる認証方式を用いることで、ユーザー体験の向上とセキュリティの強化が同時に実現できる。本節では、これらのセキュアエンクレーブがどのように機能するか、そしてスマートアカウントと組み合わせた場合にどうなるかを説明する。

## 身近なデバイス上のセキュアエンクレーブ：ポケットの中のハードウェアウォレット
現代のほぼすべてのデバイスは、チップ設計に[Trusted Execution Environment](https://en.wikipedia.org/wiki/Trusted_execution_environment)（TEE）と呼ばれるものを組み込んでいる。これは、ユーザーの最も機密性の高いデータを保護するシールドとして機能するよう特化して設計された高度なハードウェア要素である。

例えば、Apple製品には2013年以降、Secure Enclaveと呼ばれるTEEが搭載されている。アプリのプロセスや通知など、あらゆる処理を担うデバイスの他の部分とは異なり、TEEはデバイスの他のコンポーネントから隔離された独立したマイクロチップである。この隔離により、生体情報や暗号鍵などの機密データは、デバイスの他の部分を侵害する可能性のある脅威から切り離される。TEEの活用は、現代のデバイスで鍵を保管する最も安全な方法であり、事実上、日常使いのデバイスを生体認証でのみアクセス可能なハードウェアウォレットへと変える。

### TEEをスマートアカウントとどう組み合わせるか

セキュアエンクレーブを使うと、ユーザーはTEE内部で鍵を生成し、その鍵で任意のメッセージに署名できる。これはまさに、オンチェーンでの検証に必要なものである。TEE内部に存在する秘密鍵から導出されたオーナーを持つスマートアカウントを作成できる。これらの鍵はデバイスから外に出ることがなく、（生体認証によって）デバイスの所有者のみがアクセスできる。

<ImageBlock
  src="https://media.alchemy.com/1709767953-2.jpg"
  alt="trusted execution environment の仕組みを示す図"
  width={3200}
  height={1800}
/>

### パスキー：パスワードレスなwebへの道
ハッキングに関連する侵害の約81%は、盗まれた、あるいは脆弱なパスワードの使用が関与している。この問題に対処するため、研究者たちはFIDO AllianceとW3Cによって開発されたWebAuthnプロトコルに注目してきた。これは公開鍵暗号を用いたより安全な鍵管理システムを提供し、セキュリティとユーザー体験の両方を向上させるものである。WebAuthnはこれまでに、Google、Amazon、Microsoft、[Coinbase](https://www.alchemy.com/dapps/coinbase)などの大企業に認証方式として採用されており、その普及は急速に進んでいる。

WebAuthnは、ドメイン固有の公開鍵暗号をユーザー認証に用いることで、従来のパスワード方式が抱える弱点や不便さの克服を目指している。このアプローチにより、パスワード、パスワードの失念、アカウントロックアウトが不要になり、一般的なセキュリティリスクも軽減される。

### パスキーの仕組み
パスキーはWebauthn標準の実装であり、現代のほぼすべてのデバイスで動作する。ユーザーがアカウントに登録すると、OSはそのアプリやウェブサイトに固有の、アカウントに紐づく一意の鍵ペアを生成する。これらの鍵は多くの場合生体認証を伴うSecure Enclaveによって暗号化され、iCloud Keychainなどのパスワードマネージャーを通じてデバイス間で同期される。

パスキーには、ブロックチェーンにおけるアカウント管理のユースケースが数多く存在する。ブロックチェーンで利用するには、開発者はパスキーの公開鍵をスマートコントラクトに格納し、それを認証手段として使用すればよい。

<ImageBlock
  src="https://media.alchemy.com/1709767898-1.jpg"
  alt="passkey の仕組みを示す図"
  width={3200}
  height={1800}
/>

残念なことに、ほぼすべてのセキュアエンクレーブとパスキーは、NISTが開発したsecp256r1曲線（[P256](https://neuromancer.sk/std/nist/P-256)）をサポートしているのに対し、Ethereumがネイティブにサポートするのはsecp256k1曲線のみである。そのため、所有権をピアに証明するにはオンチェーンでの検証が必要になるが、どうすればそれが可能なのか。

その答えがRIP-7212である。

## RIP-7212とは何か：secp256r1曲線サポートのためのプリコンパイル済みコントラクト
RIP-7212は、プリコンパイル済みコントラクトによって安価かつ安全、高速なP256曲線検証を可能にする、Ethereumプロトコルにおける中核的な変更である。これは、Layer 2ブロックチェーンによって提案され、承認された最初のRollup Improvement Proposalである。

### プリコンパイル済みコントラクトとは何か
プリコンパイル済みコントラクトは、伝統的な意味での「コントラクト」ではなく、Ethereumプロトコルにネイティブに組み込まれているために「プリコンパイル」と呼ばれる、あらかじめ定義されたネイティブ関数である。

プリコンパイル済みコントラクトは、暗号計算（secp256k1やsecp256r1の署名検証など）やハッシュ関数といった特定の演算に対して、パフォーマンスとガスコストの低さに最適化されている。プリコンパイル済みコントラクトがなければ、これらの演算を[Ethereum Virtual Machine](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm)上で実行するにはより多くのコードと計算能力が必要になり、ガス代が高くなる。evm.codesのウェブサイトで[Ethereumのプリコンパイル一覧](https://www.evm.codes/precompiled?fork=shanghai)を確認できる。

### RIP-7212は他のソリューションとどう比較されるか
RIP-7212を用いると、P256の検証はわずか3450ガスで済み、プロトコル変更を伴わない最良の選択肢と比べて100分の1に削減される。RIP-7212は、EVMチェーン上でP256を検証する最もガス効率がよく、安全で、高速な方法である。

前述の通り、生体認証署名者（Passkeysやセキュアエンクレースに基づくものなど）の利用は、オンチェーンでP256曲線を検証する手段があって初めて可能になる。オンチェーンでP256曲線を検証する方法はいくつか存在するが、いずれも安価ではない。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Verifier", dataType: "object" },
      {
        key: "2",
        width: 200,
        title: "Gas Consumption (Account Creation)",
        dataType: "object",
      },
      {
        key: "3",
        width: 200,
        title: "Gas Consumption (Single Transaction)",
        dataType: "object",
      },
      {
        key: "1709671329969",
        width: 180,
        title: "Proving Time",
        dataType: "object",
      },
      { key: "1709671346011", width: 180, title: "Type", dataType: "object" },
    ],
    data: [
      {
        "1": {
          title: "<p>Obvious' Solidity Verifier</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>330k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>330k</p>", tooltip: "", icon: "" },
        id: 0,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>Alembic's Solidity Verifier</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>2M</p>", tooltip: "", icon: "" },
        "3": { title: "<p>375k</p>", tooltip: "", icon: "" },
        id: 1,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>FCL's Solidity Verifier w/o precomputation</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>205k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>205k</p>", tooltip: "", icon: "" },
        id: 2,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>FCL's Solidity Verifier with precomputation</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>3.2M</p>", tooltip: "", icon: "" },
        "3": { title: "<p>69k</p>", tooltip: "", icon: "" },
        id: 3,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": { title: "<p>Risc0 Verifier</p>", tooltip: "", icon: "" },
        "2": { title: "<p>250k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>250k</p>", tooltip: "", icon: "" },
        id: 4,
        "1709671329969": {
          title: "<p>Nearly instant</p>",
          tooltip: "",
          icon: "",
        },
        "1709671346011": {
          title: "<p>Zero Knowledge Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>KnowNothingLab's Verifier</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>520k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>520k</p>", tooltip: "", icon: "" },
        id: 5,
        "1709671329969": { title: "<p>~4 seconds</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Zero Knowledge Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": { title: "<p>Circom</p>", tooltip: "", icon: "" },
        "2": { title: "<p>230k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>300k</p>", tooltip: "", icon: "" },
        id: 6,
        "1709671329969": {
          title: "<p>Nearly instant</p>",
          tooltip: "",
          icon: "",
        },
        "1709671346011": {
          title: "<p>Zero Knowledge Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": { title: "<p>A Verifier with EVMMAX</p>", tooltip: "", icon: "" },
        "2": { title: "<p>73k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>73k</p>", tooltip: "", icon: "" },
        id: 7,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Core Protocol Change</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>EIP-7212 Precomiler Contract for P256</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>3450</p>", tooltip: "", icon: "" },
        "3": { title: "<p>3450</p>", tooltip: "", icon: "" },
        id: 8,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Core Protocol Change</p>",
          tooltip: "",
          icon: "",
        },
      },
    ],
  }}
/>

<CalloutBlock>

出典：[Current State of Verifying P256 Curve](https://hackmd.io/@1ofB8klpQky-YoR5pmPXFQ/SJ0nuzD1T)

</CalloutBlock>

## RIP-7212の現状とユースケース
RIP-7212の仕様は確定しており、いくつかのチーム（Kakarot、Polygon、Optimism、[zkSync](https://www.alchemy.com/overviews/what-is-zksync-era)、Arbitrum）が既にこのプリコンパイルを自社のrollupエコシステムに実装することを表明している。Polygonは[最近RIP-7212をテストネットに導入し](https://twitter.com/ulerdogan/status/1755358331420418134)、開発者による検証が始まっている。

RIP-7212のユースケースはスマートアカウントに限らない。RIP-7212は、分散型ブロックビルディング（SUAVE）やrollup向けの2FA（TaikoやScroll）など、Trusted Execution Environmentのリモートアテステーション検証にも利用でき、その用途はさらに広がっている。

## RIP-7212を利用したERC-6900互換のP256バリデータコントラクトの構築
RIP-7212が稼働した後の次のステップは、開発者がエンドユーザー体験を改善するためにこれを最大限利用しやすくすることである。スマートアカウントに新しいコードを組み込むことは摩擦とリスクの大きい作業であり、RIP-7212が提供するような大幅に簡素化されたフローであっても、慎重な設計、テスト、監査が必要である。

ここでERC-6900の出番となる。

[ERC-6900: Modular Smart Contract Accounts and Plugins](https://eips.ethereum.org/EIPS/eip-6900)は、開発者がロジックの単位をプラグインとして切り出し、他のアカウント開発者がそれを利用できるようにするためのEVM標準である。これにより開発者は、自前でプラグインを構築する代わりに、実戦で検証済みのプラグインに頼ることでエンドユーザー体験を向上させられる。

RIP-7212と[ERC-6900](https://github.com/erc6900/resources)を組み合わせることで、効率的なP256検証のためのシンプルなアカウントプラグインが実現し、開発者側の負担を最小限に抑えつつ、ユーザーに安価で安全な生体認証を提供できるようになる。mainnetでのRIP-7212の採用が加速するにつれ、対応するrollup上でこのプラグインをリリースできることを楽しみにしている。
