uPort及びID管理技術 第一回 uPortの仕組み

uPort及びID管理技術 第一回 uPortの仕組み

はじめに


本記事は、過去にコンセンサス・ベイスが主宰していたオンラインサロンの記事です。記事は2017年~2018年にかけて執筆されたため、一部は、既に古くなっている可能性があります。あらかじめご了承ください。

今回の内容


uPort及びID管理技術について二回に渡って解説します。
今回はuPortの概要、利用方法(アプリケーションインストールからアカウント作成まで)、仕組み(資格情報の要求と証明等)について紹介します。

第1章 uPortとは


uPortは個人が自身で個人情報を扱うことを可能にするオープンシステムです。FacebookやAmazonなどが保持している我々の個人情報を個人で管理できるようになります。

uPortの公式サイトによると「イーサリアム上に構築されたuPortのネットワークを利用すれば、ユーザーは第三者の認証機関を使わずとも自由に、選んだ相手と個人情報の共有を行うことが出来るため、プライバシーを自身の手で完全にコントロールすることが可能になります。」とされています。

uPortは、トランザクション内の情報をQRコードで読み込むことで、データの公開・以前に公開した情報の確認・連絡先の共有を行なうことが出来ます。

第2章 uPortの利用方法


uPortは現在ベータ版であり、テストネットを利用しています。そのため、iOS版では「テストネットなので、etherを送るな、IDは変わる」などといった警告が出ることがありますのでご留意ください。

アプリケーションのインストール


スマートフォン経由で以下のURLからuPortアプリをインストールしてください。
uPort iOS
uPort Android

uPort IDの取得

  1. uPort App Managerにアクセスし、uPortアプリから表示されているQRコードを読み込む。
  2. ”Create App”ををクリックし、1.と同様QRコードを読み込む。ここでアプリ名やロゴなどの設定を行なう。
  3. 次の画面でアプリケーションの詳細を設定し、表示されているMNID(アプリケーション識別子)/クライアントIDを保存する。
  4. “Click Here for your App Code”をクリックし、SimpleSingnerで表示される秘密鍵を保存する。

ユーザー登録


uPortアプリケーションを利用して自身のアカウント作成すると、uPortに登録される。

uPortの仕組み(登録されたIDの利用について)


アプリケーションがユーザーの認証をしたいケース
  1. アプリからユーザーへ認証要求を送る
  2. ユーザーは自身の証明書をアプリに送る

利用するアプリケーションからの資格情報の要求


uPortとスマートフォンを接続出来るようにする。

デスクトップからアプリケーションを利用する場合


  1. デスクトップブラウザでURIの含まれているQRコードが表示される
  2. ブラウザからスマートフォンとデスクトップの通信を行なうサーバーのChasqui(チャスキー)に、モバイルからaddressとその他情報を受け取ったか確認させるためにリクエストを送る(sessionIDが発行される)
  3. モバイルからQRコードを読み込む。その際に、addressやその他情報を共有して良いのか確認される。
  4. ユーザが 3.に同意した場合、addressやその他データをURI内に含まれるsessionIDを利用してChasquiへプッシする。
  5. ブラウザがChasquiからユーザのaddressやその他情報を受け取り、QRコードを削除する。

サンプルコード
 npm init
 npm install --save uport-connect
 npm install --save qrcode-terminal

以下のコードを新しい任意のJSファイルに貼り付ける
const uportConnect = require('uport-connect');
const qrcode = require('qrcode-terminal');

const mnidAddress = 'CLIENT_ID';
const signingKey = 'SIGNING_KEY';
const appName = 'NAME_OF_DAPP';

const uriHandler = (uri) => {
  qrcode.generate(uri, {small: true})
  console.log(uri)
}

const uport = new uportConnect.Connect(appName, {
    uriHandler,
    clientId: mnidAddress,
    network: 'rinkeby',
    signer: uportConnect.SimpleSigner(signingKey)
});
 
// Request credentials
uport.requestCredentials({
  requested: ['name'],
}).then((credentials) => {
  console.log(credentials);
})

uPort IDの取得で保存したクライアントIDと秘密鍵に、’CLIENT_ID’,’SIGNING_KEY’を変更する。その後、ファイルを実行し出力されたデータを保存する。

スマートフォンからアプリケーションを利用する場合


  1. スマートフォンブラウザに表示されているQRコードからURLを開く。
  2. uPortアプリを開くかどうか、確認される。
  3. ユーザが 2.に同意した場合、uPortアプリが起動される。そのアプリ上で、addressやその他情報(push token, attestation(ユーザー証明書)など)を共有して良いか確認される。
  4. ユーザが 3.に同意した場合、uPortアプリは上記の情報を含んだJWT(JSON Web Tokenの略称で、JSONデータ構造で属性情報を表現したもの)を作成し、デバイスキーで署名する。JSON Web Tokenの略称で、JSONデータ構造で属性情報を表現したものです。)
  5. モバイルブラウザが開く。また、JWTに含まれているaccses_token内にURLが追加される。
  6. モバイルブラウザは、URLからaccess_tokenを取得し、ユーザのaddressやその他データを読み取る。

資格情報による証明


  1. uPort用の、デスクトップの場合QRコード、スマホの場合URIを読み込む
  2. 1.を実行すると、uPortアプリ上でユーザのaddressやその他情報(push tokenなど)の共有を求められる。
  3. 2.に同意した際、デスクトップの場合はChasqui、モバイル場合はJWTにaddressやその他情報がpostされる。
  4. ブラウザはこれらの情報を受け取り、ブラウザからQRコードまたはURIを削除する。
  5. uPortアプリがattestationを送信する準備ができたら、JWT関連のデータをエンコードし、署名する。

    ⦅push通知が有効な場合⦆
  6. (a) attestation_tokenは、push_tokenと共にPututu(PututuはdAppsとサーバーがどのuPortモバイルアプリにもpush通知メッセージを送信出来るようにするサーバー)に送信される。
  7. (a) Pututuは、push_tokenの署名とユーザのIPFSにある公開鍵を照合してから、attestation_tokenをuPortアプリへ転送する。

    ⦅pushが無効な場合⦆
  8. (b) attestation_tokenは、QRコードorURIにエンコードされる。ユーザはuPortアプリでこれを読み込む。
  9. uPortアプリ上で、attestationに同意するか尋ねられる。

    一度に一つの資格情報しかpush出来ない欠点がある。

ユーザーがトランザクションの署名を行なう


  1. ブラウザはランダムに生成されたsessionIDをQRコード or URIで表示する。
  2. ブラウザが、sessionIDをChasqui or JWTに送信する。また、スマホからトランザクションハッシュが送信されているかどうかを確認する。
  3. QRコード or URIをスマホで読み込む。
  4. ユーザはスマホのURLに含まれるトランザクションデータを取得し、(以降、txと表記)署名する。
  5. デバイスは、署名されたtxをSensui(トランザクションに必要なgasを支払わずにトランザクションを実行してくれるサーバー)に送信する。Sensuiは、署名されたtxをSensui独自のトランザクションでラップし、これをrinkeby.infura.ioを介してRelay contractに送信する。(INFURAはEthereumのインフラを提供するサービスで、rinkebyはテストネットの名称です。)
  6. InfuraはtxハッシュをSensuiに送り、SensuiはスマホのuPortアプリに送信する。また、uPortアプリはsessionIDを利用してtxハッシュをChanqui or JWTにpostする。
  7. ブラウザはtxハッシュを受け取り、QRコードorURIを削除する。
  8. Relay contractは元の署名されたtxが改ざんされていないことを確認し、ラップされたtx全体をContfoller contractを通してProxy contractに転送する。
  9. Proxy contractはこのtxを第三者のコントラクトへ送る。その際、Sensuiによってgasが支払われる。

まとめ


今回はuPortの概要、利用方法、仕組みについて紹介しました。uPortの仕組みの章では、焦らず画像と説明を照らし合わせながら読み進めてください。
次回では、uPortの採用プロジェクト、類似技術をご紹介します。

参考資料

     

免責事項

本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。

技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。

     

コンセンサス・ベイス(株)とブロックチェーン事業を行なってみませんか?

当サイトを運営するコンセンサス・ベイス株式会社は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。

ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。

     
     

ブロックチェーン学習に最適の書籍の紹介

図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書

ブロックチェーン イーサリアムへの入り口 第二版 (ブロックチェーン技術書籍)

本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)

Othersカテゴリの最新記事