🗝️

NEAR のアクセスキー

2024/04/08に公開

柔軟性と安全性を兼ね備えた革新的な機能

ブロックチェーンの世界では、ユーザーは秘密鍵を使ってアカウントを管理し、トランザクションに署名します。しかし、秘密鍵の管理は煩雑で、時にはセキュリティ上のリスクにもつながります。
NEAR Protocol は、この問題に対する革新的[1]な解決策として、アクセスキーという機能を提供しています。

2種類のアクセスキー

NEAR のアカウントには、以下の2種類のアクセスキーを設定することができます。

  1. Full-Access Keys(フルアクセスキー): アカウントに対する全ての権限を持つキーです。アカウント作成時に1つ付与されますが、必要に応じて追加することも可能です。フルアクセスキーは、NEAR の転送、アカウントの削除、サブアカウントの作成、アクセスキーの追加・削除、スマートコントラクトのデプロイなど、あらゆるアクションを実行できます。このキーは絶対に他人と共有してはいけません。

  2. Function-Call Keys(ファンクションコールキー): 特定のコントラクトのみを呼び出すことができるキーです。Function-Call Keys は、第三者と共有することを目的としており、セキュリティリスクを最小限に抑えながら、柔軟なアクセス制御を実現します。

    • 呼び出し可能なコントラクトは receiver_id で指定し、
    • さらにオプションでメソッド (method_names) や
    • 使用可能なネイティブトークンの量 (allowance) を指定することができます。

アクセスキーのメリット

アクセスキーという概念があることで次のような利点があります。

  1. キーのローテーション: 複数のキーを設定できるため、危険にさらされたキーをすぐに削除したり、新しいキーに交換したりすることが容易になります。

  2. 復旧: 信頼できる第三者にリカバリーキーを生成してもらい、復旧プロセスを確立することができます。

  3. ロックされたアカウント: 全てのキーを削除すると、アカウントがロックされ、外部アクターがそのアカウントの名前でトランザクションを実行できなくなります。これは、コントラクトをデプロイし、コントラクトのみがアカウントを制御していることをコミュニティに保証したい場合に非常に有用です。

もしアクセスキーが変更できなければ、言ってみればパスワードが変更できないネットサービスのようなものであり、変更できて当然とも言えます。

Function-Call Keys のユースケース

さらに Function-Call Keys は、NEAR Protocol ならではの機能であり、重要な利点をもたらします。
例えば以下のようなユースケースが考えられます。

  1. 自動実行: アプリケーションがユーザーに代わってトランザクションに署名できるようになるため、ゲームなどにおいてシームレスなユーザー体験を提供できます。例えば、スコアを記録するゲームの場合、Function-Call Key を使えば、ユーザーがトランザクションの署名を求められることなく、スコアを更新できます。

  2. シンプルなオンボーディング: create_account メソッドを持つコントラクトを用意し、そのメソッドのみを呼び出せる Function-Call Key を生成・配布することで、ユーザーがワンクリックでアカウントを作成し、トークンを受け取れるようになります。これは NEAR Drops の基本原理でもあります。

ただし、Function-Call Keys が使えるガス代は allowance 以内です。allowance を使い果たしそうな時に一旦削除して追加し直すという手もありますが、自動でポンポン動いている場合にはタイミングが難しいかもしれないので、長期運用が前提なら allowance に none を指定しておいた方が運用が楽かもしれません。

まとめ

NEAR Protocol のアクセスキーは、セキュリティと利便性を両立させる画期的な機能です。これにより、ユーザーはより安全で柔軟なアクセス制御を享受でき、開発者はよりユーザーフレンドリーなアプリケーションを構築できるようになります。ブロックチェーンの大衆化を目指す NEAR にとって、アクセスキーは重要な要素です。

個人的には Function-Call Keys の設定(特に allowance)の変更ができるようになるといいなと思っています。今後に期待です。

脚注
  1. XRP の 鍵管理 と似ていますが、権限を細かく制御できたり完全に入れ替えることができるなどの違いがあります。 ↩︎

Discussion