Universal Login（ユニバーサルログイン）についてのまとめ

この投稿では、ユニバーサルログイン（ERC1078）についてご紹介いたします。
仕組みとしてはまだ不完全ですが、DAPPのUXを変える考え方として参考になるのではと思います。

# Universal Login（ユニバーサルログイン）ってなに？
ユニバーサルログインは、ERC1078（ERC1077）をさし、Alex Van de Sandeによって提唱されたアカウントの登録・ログインパターンのことです。
これによって、ユーザーに負荷なく簡単にアカウントをコントロールできるようにしようとしています。

### できるようになること
1. サービスのアカウントを作る度に、秘密鍵をバックアップしたり、シードフレーズを入力する必要がなくなる
2. 一度作ったIDを使い回して、気軽にサービスを利用できる
3. 複数のデバイス間で自由に行ったりきたりできる

# ユニバーサルログインの詳細
このユニバーサルログインを理解するにはまず、ERC725を理解する必要があります。

## ERC725とは？
Fabian Vogelsteller氏によって提唱された規格です（ERC20を作った人として有名）
ID管理の標準プロトコルを目指しており、第三者によってKYCが確認されれば、サービス側はその発行されたClaimをチェックするだけでIDの確認が完了するというものです。

https://github.com/ethereum/EIPs/issues/725

簡単なフローとしては、
<img width="688" alt="Screenshot 2018-12-11 23.17.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/60143/894c96ef-ecac-bf20-2268-0aebbd2cbb58.png">

1. ユーザーはIDコントラクトをデプロイする。
2. Claim発行者のサイトにアクセスし、IDを証明する署名をもらう
3. ユーザーはこの署名を自分のIDコントラクトに追加する
4. Claim Checkerは公開鍵をもとにClaim発行者の署名を検証する

このERC725は、Origin ProtocolによってDEMOが公開されているので試してみるといいと思います。
https://erc725.originprotocol.com/

## ERC1078とは？
このER725を踏まえて、ERC1078についてみていきます。

<img width="751" alt="Screenshot 2018-12-11 23.24.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/60143/258725a9-7fbb-45fc-bce2-ba8a4a33c30c.png">

ERC1078は、ERC725でデプロイしたIDコントラクトを使っていきます。
通常、ETHなどの資産はwalletのアドレスに格納しておきますが、ERC1078ではこのIDコントラクトに格納します。

また、このIDコントラクトをENSと紐付けて管理をします。

少し理解しにくいので、例をみていきます。

### ERC1078の利用例（ユーザー登録）
<img width="822" alt="Screenshot 2018-12-11 23.27.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/60143/b6ea02b4-5dd4-fc92-68a8-91aebaeca6c7.png">

ユーザーが特定のサービスを初めて利用する場合、以下のようなステップでユーザー登録が行われます。
1.「alis」というユーザー名を登録します。
2. ENSに「alis」という名前がサブドメインとして割り当てられます（ex. alis.sample.eth）
3. ローカルに秘密鍵が生成されます。
4. コントラクトがデプロイされます。（ENSと公開鍵から生成したマネジメントキーが記録されます）

### ERC1078の利用例（その他サービスへの登録）
<img width="822" alt="Screenshot 2018-12-11 23.34.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/60143/c8b2fede-ebb8-835c-cd2d-4d12ea510f74.png">

すでにERC1078に準拠しているサービスでユーザー登録している場合、違うERC1078対応しているアプリでユーザー登録する際には、以下のステップを行います。

1. 「alis.sample.eth」などの自分のENSを入力する
2. ERC681対応のURL（QR）が生成される
3. サンプルアプリで読み込む（ここでマネジメントキーが追加される）

結果的にユーザーは生成されたQRを読み込むだけで、ユーザー登録が完了し、資産管理も継続できるようになる。

## ERC1077とは？
<img width="822" alt="Screenshot 2018-12-11 23.42.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/60143/0399fddf-7e22-6611-c109-0dfcb346705a.png">

このERC1078で問題になってくるのが、トランザクションコストを誰が負担するかということです。

ここで、ERC1077の登場です。
これは、デプロイしたものに対する払い戻しを実行できる署名付きのコントラクトです。

これによって、ユーザーが資産をIDコントラクトに追加し、サービスを利用したタイミング等でコストの払い戻しを要求することができます。
（したくない場合はもちろん請求しなくてもいい）

# まとめ
個人情報を個人が適切に管理し自由に使い分けることができるのはブロックチェーンの特徴でもあります。

UninversalLoginによって、ユーザーがブロックチェーンや秘密鍵などへのリテラシーがなくてもサービスを利用可能になればUXは大幅に改善されてくるのではと感じます。

また、AMLの対策になると共に、単一IDに信用情報を蓄積できるようになり不正を防止しやすくなるなどの利点もみえてきます。

IDはブロックチェーンにとって大きなテーマでなので、今後も注視していきたいです。

# 参考メディア
- https://ethereum-magicians.org/t/erc-1077-and-erc-1078-the-magic-of-executable-signed-messages-to-login-and-do-actions/351
- https://eips.ethereum.org/EIPS/eip-1078
- https://www.slideshare.net/FabianVogelsteller/erc-725-identity
- https://medium.com/uport/erc1056-erc780-an-open-identity-and-claims-protocol-for-ethereum-aef7207bc744
- https://hackernoon.com/first-impressions-with-erc-725-and-erc-735-identity-and-claims-4a87ff2509c9
- https://iden3.io/digital-identity-and-iden3-technology
- https://medium.com/originprotocol/managing-identity-with-a-ui-for-erc-725-5c7422b38c09

# 補足
これは、2018年に行われたHi-Con（EthereumエンジニアコミュニティHi-Etherのカンファレンス）のLT枠で登壇した内容をテキストにしたものです。
その際の登壇資料はこちらです。
https://docs.google.com/presentation/d/1JJxBcbMRelIstnzGKfWkb_lekWMRCqgRDYt6aHW-9HA/edit?usp=sharing


以上、ありがとうございました。