Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHPとブロックチェーンを使ったwebアプリ開発

157 views

Published on

PHPカンファレンス2018 Track2で発表した資料です。

Using PHP Conference Track 2 Slide

Published in: Technology
  • Be the first to comment

  • Be the first to like this

PHPとブロックチェーンを使ったwebアプリ開発

  1. 1. PHPとブロックチェーンを使った アプリ開発 株式会社ナンバーワンソリューションズ 高橋 直太
  2. 2. 会社概要 1 ■ 社名:株式会社ナンバーワンソリューションズ ■ 設立:2002年7月9日 ■ 資本金:5,000万円 ■ 代表者:代表取締役 面来哲雄 ■ 社員数:82名(2018年4月現在) ■ 所在地:東京都目黒区東山3-15-1 出光池尻ビル7階 ■ 連絡先:[TEL] 03-6412-8470 / [HP] https://no1s.biz ■ 事業内容:[ソリューション事業]      ・ブロックチェーンソリューション      ・エンジニアリングサービス      [教育事業]      ・プログラミングキッズ      ・プログラミングアカデミー ■ 加盟団体:一般社団法人ブロックチェーン推進協会
  3. 3. 2 1. ブロックチェーンの概要 2. PHPによる実装 3. ブロックチェーンを使ったアプリの紹介 4. まとめ コンテンツ
  4. 4. ブロックチェーンの概要 3
  5. 5. ブロックチェーンの定義 4 取引履歴などのデータとハッシュ値を組みを順次につなげて記録した分散型台帳を、ネット ワーク上の多数のコンピュータで同期して保有して、管理することによって、一部の台帳で 取引データが改ざんされても、取引データの完全性と可用性が確保される技術 平成30年度秋期 応用情報技術者試験 問44 から抜粋
  6. 6. ブロックチェーンのメリット 5 データの改ざんが困難 RDB:マスタDBが狙われたら改ざんされる ブロックチェーン:過半数を乗っ取らないと改ざんできない P2Pによる高可用性 全サーバがマスター扱いによる同期がなされる RDBのマスタ・スレーブ構成で差分発生時のサービス停止が無い サーバの追加・削除が容易 高い匿名性 アカウントアドレスの履歴は確認できるが、個人情報が結びつけないので誰が やったのかを特定する事ができない ※運用の仕方による
  7. 7. ブロックチェーンのデメリット 6 不可逆なコントラクト 一度、デプロイしたらアップデートができない Delete-Insertな対応しかできない 半永久的にバグが入ったコントラクトが公開され続ける 51%攻撃 悪意のあるノードが過半数を超えた場合は、悪意のある行為(CRUD)が都合良 くできる ハードフォーク The DAO事件のように運営側のハードフォークでそれまの取引が無かった事に される可能性が内包している
  8. 8. ブロックチェーンの代表的な基盤 7 ビットコイン ブロック生成間隔:10分(完全な確定をするまで1時間かかる) 最小構成台数:ノード2台 トランザクション性能:10tps未満 イーサリアム ブロック生成間隔:12秒(完全な確定をするまで数分かかる) 最小構成台数:ノード2台 トランザクション性能:20tps未満 Hyperledger Fabric ブロック生成間隔:1秒 最小構成台数:ノード4台 トランザクション性能:1,000tps クレジットカード(VISA)のトランザクション性能:4,000~6,000tps
  9. 9. PHPによる実装 8
  10. 10. web3.php 9 https://github.com/sc0Vu/web3.php ■ イーサリアムのノードと通信することのできる JavaScript API「web3.js」をPHPに移植したラ イブラリ ■ MIT License ■ Composerを使ってインストール ■ 実運用を考えた場合は改修が必要 composer require sc0vu/web3.php dev-master
  11. 11. 桁数の問題 10 ■ 最小単位:1 wei ■ 1 ether = 1,000,000,000,000,000,000 (1*10^18) wei ■ 最大単位:1 tether = 1,000,000,000,000 (1*10^12) ether →送金処理で桁落ちが発生しやすい
  12. 12. 浮動小数点数の精度 11 浮動小数点数の精度は有限です。システムに依存しますが、PHP は通常 IEEE 754 倍精 度フォーマットを使います。 この形式は、1.11e-16 のオーダーでの丸め処理で誤差が発生 します。 (中略) その結果、不思議な結果を引き起こすことがあります。 たとえば、floor((0.1+0.7)*10) の結果はたいてい 7 となるでしょう。 おそらくは 8 を想定していらっしゃるでしょうが、そのようにはなりません。 これは、(この計算結果の) 内部的な値が 7.9999999999999991118... のようになっている からです。 http://php.net/manual/ja/language.types.float.php
  13. 13. Remix (旧browser-solidity) 12 https://remix.ethereum.org ■ スマートコントラクトを実装してコードを環境にデ プロイするツール
  14. 14. ブロックチェーンを使ったアプリの紹介 13
  15. 15. 問題提起 14 ■ Webアプリではこれまで本人確認のために、メール アドレス・電話番号・本人確認用の証明書を添付し てDBに個人情報の保管をしてきた ■ 最近は管理者側の個人情報の規約外な不正行為 や流出事故が増えている ■ SNSやブログでは、個人情報を登録することがリス クであると言われている ブロックチェーンの情報によってその人が行ったア クションの記録を保存する その情報が個人情報と紐づかないなら、個人を特 定されずにかつ作成したブロックチェーンの情報か ら本人であることを証明できる!
  16. 16. ブロックチェーン認証機能(BC Auth) 15 DBにこれまで保存されていたログインID・パス ワードをブロックチェーンに保管してログイン機能 を提供する ■ 管理者による改ざんが困難 ■ 権限付きワンタイムパスワードによる認証 ■ P2Pによる可用性の高さ ■ 個人情報レス 権限付きブロックチェーン Webサービス サーバー ユーザー ①保存 ②送信 ④リクエスト ⑤レスポンス ハッシュ値 元データ コントラクトアド レス ハッシュ値 ③元データを  ハッシュ化
  17. 17. 権限付きワンタイムパスワード 16 ■ 1MBに収まる値まで設定可能 ■ 半角英数字記号を使った乱数を自動生成 ■ 権限をデータに付与可能
  18. 18. サービス提供側のユーザテーブル例 17 ■ イーサリアムのアカウントアドレス ■ コントラクトアドレス ■ パスワードのハッシュ値 BC Auth ■ ログインID ■ パスワードのハッシュ値 ■ 個人情報もろもろ DB
  19. 19. 自動ログイン機能 18 ■ 権限付ワンタイムパスワードを使ってログイン ブロックチェーン型 ■ 個体識別番号・UUID・UDIDのような固有のID ■ ログインID・パスワードをスマホに保存する ガラケー・スマホの自動ログイン機能
  20. 20. QRコードによるログイン認証(QR Auth) 19 権限付きワンタイムパスワードによるQRコー ド認証でPC・スマホ・タブレットの双方向の認 証が簡単にできる ■ 時間制限の追加 ■ QRコードの手動切り替え ■ QRコードの読み取り機能はHTMLとJSで 実装可能
  21. 21. シングルサインオン 20 ■ 設備投資が高価 プロキシサーバ型 ■ 同一ドメインが前提 クッキー型 ■ 別ドメインに対しても機能可能 ■ 安価に実現できる ブロックチェーン型
  22. 22. BC Reserve 21 個人情報レスな予約アプリQR Authを使って予約確認
  23. 23. まとめ 22 ■ 仮想通貨をPHPで扱う場合、仕様・仕組みを考えないと難しい ■ 個人情報レスなアプリの作成ができる ■ PHPとブロックチェーンを使うことで、今までできなかったWebアプリが作れる可能性があ る

×