[Dfinity] Internet Identityの使い方と仕組み
概要
Internet Identityは、Internet Computerのブロックチェーン上に実装されたcanisterスマートコントラクトです。Internet Computer上のdAppsにアクセスする際に、安全かつ匿名での認証をWebAuthn認証方式で可能にします。認証するためには、Identity Anchorを指定する必要があります。 yubi key等のセキュリティキーや指紋、顔などの複数の生体認証方法を 1 つのIdentity Anchorに追加することができ、いくつでも作成することが出来ます。
使い方
NNSやdistriktやOpenChatなどのInternet ComputerのdAppsにアクセスするとサインアップを促されて、以下のようなページにリダイレクトされます。直接ならこちら
Create am Internet Identity Anchor
をクリック(赤枠1)Create a new Internet Identity Anchor
のdevice name に登録したいデバイス方式名を記入してCreateidentity.ic0.appで本人確認
のポップアップにデバイスを指定&登録- Comfirm new device で comfirm
- 続いて
Recovery Mechanism
で seed phraseかsecurity keyどちらかを選択 - seed phraseの場合は必ずオフラインで安全な場所に保管して確認
以上で、Identity Anchorは作成されます。既存のAnchorに新規のデバイスを追加する場合は上記の画像の赤枠2から入れば出来ます。
Windowsの場合
account>>sign-in optionsにある Windows Hello方式のデバイスが利用できます。
仕組み
既存のWebアプリでは二段階認証で利用されることの多いWebAuthnですが、Internet IndentityではWebAuthnのみの認証することが出来るようになりました。通常、ユーザー名やメールアドレス等のデータベースの登録情報にchallengeと呼ばれるランダムな文字列を生成、セキュリティーキーなどの認証器にレスポンスを返す必要性から二段階認証に向いているとされていましたが、Internet Identityはそれぞれ認証を受けるdAppsへユーザーIDを自動生成することで解決させました。
challengeとは生体認証の署名の正当性を検証するためにサーバに生成される類推を許さないランダムな文字列で、生体認証のデジタル署名を公開鍵で検証するときに必要になります。詳しくはこちらのサイトWebAuthnことはじめ
また個々のdAppsのフロントエンドに異なるID付与し、他のフロントと関連性を持たないことで他のサービスを追跡することが困難で、ユーザー側からIDを付与することでユーザーのプライベートなwebでの行動露出が大幅に低減されます。
慣れない技術でわかっていないことも多く、間違えている可能性が大いにあります。もしありましたらお教え下さい。
参考
https://medium.com/dfinity/web-authentication-and-identity-on-the-internet-computer-a9bd5754c547
https://engineering.mercari.com/blog/entry/2019-06-04-120000/
https://sdk.dfinity.org/docs/ic-identity-guide/what-is-ic-identity.html