SlideShare a Scribd company logo
1 of 29
Copyright Drecom Co., Ltd. All Rights Reserved. 1
DApps のユーザー認証に
web3.eth.personal.sign
を使おう!
Hi-Con LT
2018/11/10
Copyright Drecom Co., Ltd. All Rights Reserved. 2
自己紹介
株式会社ドリコム
DRIP部
エンジニア
小川光典
@ogwmtnr
Copyright Drecom Co., Ltd. All Rights Reserved. 3
Drecom
Copyright Drecom Co., Ltd. All Rights Reserved. 4
DRIP
https://drip.drecom.co.jp/
Copyright Drecom Co., Ltd. All Rights Reserved. 5
LoveChain
2018年7月5日リリース
https://lovechain.ooo
Copyright Drecom Co., Ltd. All Rights Reserved. 6
2018年9月26日リリース
https://6-pillars.ooo
Copyright Drecom Co., Ltd. All Rights Reserved. 7
ところで
Copyright Drecom Co., Ltd. All Rights Reserved. 8
DApps で
ユーザー登録すると
「署名」を
要求されがち
Copyright Drecom Co., Ltd. All Rights Reserved. 9
大先輩
CryptoKitties
のフロー
Copyright Drecom Co., Ltd. All Rights Reserved. 10
CryptoKitties でのユーザー登録
Copyright Drecom Co., Ltd. All Rights Reserved. 11
CryptoKitties でのユーザー登録
Copyright Drecom Co., Ltd. All Rights Reserved. 12
CryptoKitties でのユーザー登録
Copyright Drecom Co., Ltd. All Rights Reserved. 13
CryptoKitties でのユーザー登録
Copyright Drecom Co., Ltd. All Rights Reserved. 14
CryptoKitties でのユーザー登録
Copyright Drecom Co., Ltd. All Rights Reserved. 15
CryptoKitties でのユーザー登録
Copyright Drecom Co., Ltd. All Rights Reserved. 16
CryptoKitties でのユーザー登録
Copyright Drecom Co., Ltd. All Rights Reserved. 17
ユーザーにとっては
ID / Password
よりも楽なので
体感良さそう
Copyright Drecom Co., Ltd. All Rights Reserved. 18
実装を
考える
Copyright Drecom Co., Ltd. All Rights Reserved. 19
署名
https://web3js.readthedocs.io/en/1.0/web3-eth-personal.html#sign
Copyright Drecom Co., Ltd. All Rights Reserved. 20
署名
Ex.
web3.eth.personal.sign(
"Hello world",
"0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe",
“test password!” // unlock されてるアカウントへの署名ならnull でも動作します
)
.then(console.log);
>"0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400"
Copyright Drecom Co., Ltd. All Rights Reserved. 21
署名
署名するメッセージはユーザーに表示されるので、このように UX の一
部として含めることができそう。
Copyright Drecom Co., Ltd. All Rights Reserved. 22
検証
今回は一例として SmartContract 側に検証処理を持たせて JSON-RPC で問い合
わせる設計とする。
https://solidity.readthedocs.io/en/v0.4.25/units-and-global-variables.html
sig =
"0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5
cfd04be400"
r = “0x” + sig.slice(2, 66)
s = “0x” + sig.slice(66, 130)
v = “0x” + sig.slice(130, 132)
if (v < 27) v += 27
Copyright Drecom Co., Ltd. All Rights Reserved. 23
検証
ecrecover に投げる hash は EIP-191 に即した SignedData にする必要あり。
https://eips.ethereum.org/EIPS/eip-191
len(message) は文字数ではなくUTF-8 byte size です。
message = “小川”
len(message) = 6
Copyright Drecom Co., Ltd. All Rights Reserved. 24
検証
sig =
"0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5
cfd04be400"
r = “0x” + sig.slice(2, 66)
s = “0x” + sig.slice(66, 130)
v = “0x” + sig.slice(130, 132)
ただし、v は 27 または 28 でなければいけない。
もし 27 未満だったらv += 27 した上で hex にする。上記の例で言うとv = 0x1b となる。
Copyright Drecom Co., Ltd. All Rights Reserved. 25
設計
Copyright Drecom Co., Ltd. All Rights Reserved. 26
懸念
https://motemen.hatenablog.com/entry/2018/03/ethereum-dapp-protect-content
Copyright Drecom Co., Ltd. All Rights Reserved. 27
現実的な設計
Copyright Drecom Co., Ltd. All Rights Reserved. 28
まとめ
• バックエンドを持つ DApps ではウォレットの署名によるユーザー
(アドレス)の認証が可能。
• 署名に使うメッセージはユーザーに提示されるので、UI / UX の1つと
して使うと良さそう。
• メッセージが常に単一なものである場合、メッセージと署名が漏れ
てしまうとユーザーなりすましに使われてしまう危険がある。
• メッセージに「サーバーから発行したワンタイムトークン」を含め
るのが現実的な設計と考えられる。
Copyright Drecom Co., Ltd. All Rights Reserved. 29
ご静聴
ありがとうございました!

More Related Content

What's hot

SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 

What's hot (20)

エンジニアチームビルディングジャーニー
エンジニアチームビルディングジャーニーエンジニアチームビルディングジャーニー
エンジニアチームビルディングジャーニー
 
IT エンジニアのための 流し読み Windows 10 - Windows Hello for Business
IT エンジニアのための 流し読み Windows 10 - Windows Hello for BusinessIT エンジニアのための 流し読み Windows 10 - Windows Hello for Business
IT エンジニアのための 流し読み Windows 10 - Windows Hello for Business
 
IoT用途で簡単に使えるWebRTC Engineを作った話
IoT用途で簡単に使えるWebRTC Engineを作った話IoT用途で簡単に使えるWebRTC Engineを作った話
IoT用途で簡単に使えるWebRTC Engineを作った話
 
IETF111 RATS: Remote Attestation ProcedureS 報告
IETF111 RATS: Remote Attestation ProcedureS 報告IETF111 RATS: Remote Attestation ProcedureS 報告
IETF111 RATS: Remote Attestation ProcedureS 報告
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 
Demystifying Identities for Azure Kubernetes Service
Demystifying Identities for Azure Kubernetes ServiceDemystifying Identities for Azure Kubernetes Service
Demystifying Identities for Azure Kubernetes Service
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
 
エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩
 
リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
⼤企業で実現するイマドキの内製開発
⼤企業で実現するイマドキの内製開発⼤企業で実現するイマドキの内製開発
⼤企業で実現するイマドキの内製開発
 
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
 

Similar to DApps のユーザ認証に web3.eth.personal.sign を使おう!

とあるアプリの開発運用(トラブルシュート)
とあるアプリの開発運用(トラブルシュート)とあるアプリの開発運用(トラブルシュート)
とあるアプリの開発運用(トラブルシュート)
Takafumi ONAKA
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
外道 父
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみた
Drecom Co., Ltd.
 

Similar to DApps のユーザ認証に web3.eth.personal.sign を使おう! (20)

とあるアプリの開発運用(トラブルシュート)
とあるアプリの開発運用(トラブルシュート)とあるアプリの開発運用(トラブルシュート)
とあるアプリの開発運用(トラブルシュート)
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
 
Webアプリケーションは難しい
Webアプリケーションは難しいWebアプリケーションは難しい
Webアプリケーションは難しい
 
ドリコムのインフラCI
ドリコムのインフラCIドリコムのインフラCI
ドリコムのインフラCI
 
JAWS-UG山形 AWSのきほん 2016/11/12
JAWS-UG山形 AWSのきほん 2016/11/12 JAWS-UG山形 AWSのきほん 2016/11/12
JAWS-UG山形 AWSのきほん 2016/11/12
 
Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
 
SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例
SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例
SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例
 
SORACOM Technology Camp 2018 | B1. SORACOM を API で 256 倍使いこなす方法
SORACOM Technology Camp 2018 | B1. SORACOM を API で 256 倍使いこなす方法SORACOM Technology Camp 2018 | B1. SORACOM を API で 256 倍使いこなす方法
SORACOM Technology Camp 2018 | B1. SORACOM を API で 256 倍使いこなす方法
 
Hyperledgerのチュートリアルで理解する基幹システム向けブロックチェーンハンズオン
Hyperledgerのチュートリアルで理解する基幹システム向けブロックチェーンハンズオンHyperledgerのチュートリアルで理解する基幹システム向けブロックチェーンハンズオン
Hyperledgerのチュートリアルで理解する基幹システム向けブロックチェーンハンズオン
 
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
SORACOM Conference Discovery 2017 | F1. F3. IoTシステム入門 〜IoTシステム構築・運用の課題とSORACO...
SORACOM Conference Discovery 2017 | F1. F3. IoTシステム入門 〜IoTシステム構築・運用の課題とSORACO...SORACOM Conference Discovery 2017 | F1. F3. IoTシステム入門 〜IoTシステム構築・運用の課題とSORACO...
SORACOM Conference Discovery 2017 | F1. F3. IoTシステム入門 〜IoTシステム構築・運用の課題とSORACO...
 
ServerlessConf Tokyo2018 サーバーレスなシステムのがんばらない運用監視
ServerlessConf Tokyo2018 サーバーレスなシステムのがんばらない運用監視ServerlessConf Tokyo2018 サーバーレスなシステムのがんばらない運用監視
ServerlessConf Tokyo2018 サーバーレスなシステムのがんばらない運用監視
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみた
 

More from Drecom Co., Ltd.

More from Drecom Co., Ltd. (20)

コンテナで始める柔軟な AWS Lambda 生活
コンテナで始める柔軟な AWS Lambda 生活コンテナで始める柔軟な AWS Lambda 生活
コンテナで始める柔軟な AWS Lambda 生活
 
サービスのインシデントを解決するには.pdf
サービスのインシデントを解決するには.pdfサービスのインシデントを解決するには.pdf
サービスのインシデントを解決するには.pdf
 
ドリコムサマージョブ報告 by 佐々木 誠治
ドリコムサマージョブ報告 by 佐々木 誠治ドリコムサマージョブ報告 by 佐々木 誠治
ドリコムサマージョブ報告 by 佐々木 誠治
 
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
 
HTML5 ゲームフレームワーク開発について
HTML5 ゲームフレームワーク開発についてHTML5 ゲームフレームワーク開発について
HTML5 ゲームフレームワーク開発について
 
「AROW」お披露目(導入編)
「AROW」お披露目(導入編)「AROW」お披露目(導入編)
「AROW」お披露目(導入編)
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)
 
AROW の紹介 〜概要編〜
AROW の紹介 〜概要編〜AROW の紹介 〜概要編〜
AROW の紹介 〜概要編〜
 
AROW の紹介 〜実践編〜
AROW の紹介 〜実践編〜AROW の紹介 〜実践編〜
AROW の紹介 〜実践編〜
 
rails-developers-meetup-day4
rails-developers-meetup-day4rails-developers-meetup-day4
rails-developers-meetup-day4
 
html5conf2018-sponsor-session
html5conf2018-sponsor-sessionhtml5conf2018-sponsor-session
html5conf2018-sponsor-session
 
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
 
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチLoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
 
今月のレッツゴー陰陽師!
今月のレッツゴー陰陽師!今月のレッツゴー陰陽師!
今月のレッツゴー陰陽師!
 
位置情報を常に取得するのはつらいよ
位置情報を常に取得するのはつらいよ位置情報を常に取得するのはつらいよ
位置情報を常に取得するのはつらいよ
 
カンバンと朝会とわたくし
カンバンと朝会とわたくしカンバンと朝会とわたくし
カンバンと朝会とわたくし
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
 
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
 
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
 
フライングゲットガチャ セミナー資料
フライングゲットガチャ セミナー資料フライングゲットガチャ セミナー資料
フライングゲットガチャ セミナー資料
 

DApps のユーザ認証に web3.eth.personal.sign を使おう!

  • 1. Copyright Drecom Co., Ltd. All Rights Reserved. 1 DApps のユーザー認証に web3.eth.personal.sign を使おう! Hi-Con LT 2018/11/10
  • 2. Copyright Drecom Co., Ltd. All Rights Reserved. 2 自己紹介 株式会社ドリコム DRIP部 エンジニア 小川光典 @ogwmtnr
  • 3. Copyright Drecom Co., Ltd. All Rights Reserved. 3 Drecom
  • 4. Copyright Drecom Co., Ltd. All Rights Reserved. 4 DRIP https://drip.drecom.co.jp/
  • 5. Copyright Drecom Co., Ltd. All Rights Reserved. 5 LoveChain 2018年7月5日リリース https://lovechain.ooo
  • 6. Copyright Drecom Co., Ltd. All Rights Reserved. 6 2018年9月26日リリース https://6-pillars.ooo
  • 7. Copyright Drecom Co., Ltd. All Rights Reserved. 7 ところで
  • 8. Copyright Drecom Co., Ltd. All Rights Reserved. 8 DApps で ユーザー登録すると 「署名」を 要求されがち
  • 9. Copyright Drecom Co., Ltd. All Rights Reserved. 9 大先輩 CryptoKitties のフロー
  • 10. Copyright Drecom Co., Ltd. All Rights Reserved. 10 CryptoKitties でのユーザー登録
  • 11. Copyright Drecom Co., Ltd. All Rights Reserved. 11 CryptoKitties でのユーザー登録
  • 12. Copyright Drecom Co., Ltd. All Rights Reserved. 12 CryptoKitties でのユーザー登録
  • 13. Copyright Drecom Co., Ltd. All Rights Reserved. 13 CryptoKitties でのユーザー登録
  • 14. Copyright Drecom Co., Ltd. All Rights Reserved. 14 CryptoKitties でのユーザー登録
  • 15. Copyright Drecom Co., Ltd. All Rights Reserved. 15 CryptoKitties でのユーザー登録
  • 16. Copyright Drecom Co., Ltd. All Rights Reserved. 16 CryptoKitties でのユーザー登録
  • 17. Copyright Drecom Co., Ltd. All Rights Reserved. 17 ユーザーにとっては ID / Password よりも楽なので 体感良さそう
  • 18. Copyright Drecom Co., Ltd. All Rights Reserved. 18 実装を 考える
  • 19. Copyright Drecom Co., Ltd. All Rights Reserved. 19 署名 https://web3js.readthedocs.io/en/1.0/web3-eth-personal.html#sign
  • 20. Copyright Drecom Co., Ltd. All Rights Reserved. 20 署名 Ex. web3.eth.personal.sign( "Hello world", "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", “test password!” // unlock されてるアカウントへの署名ならnull でも動作します ) .then(console.log); >"0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400"
  • 21. Copyright Drecom Co., Ltd. All Rights Reserved. 21 署名 署名するメッセージはユーザーに表示されるので、このように UX の一 部として含めることができそう。
  • 22. Copyright Drecom Co., Ltd. All Rights Reserved. 22 検証 今回は一例として SmartContract 側に検証処理を持たせて JSON-RPC で問い合 わせる設計とする。 https://solidity.readthedocs.io/en/v0.4.25/units-and-global-variables.html sig = "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5 cfd04be400" r = “0x” + sig.slice(2, 66) s = “0x” + sig.slice(66, 130) v = “0x” + sig.slice(130, 132) if (v < 27) v += 27
  • 23. Copyright Drecom Co., Ltd. All Rights Reserved. 23 検証 ecrecover に投げる hash は EIP-191 に即した SignedData にする必要あり。 https://eips.ethereum.org/EIPS/eip-191 len(message) は文字数ではなくUTF-8 byte size です。 message = “小川” len(message) = 6
  • 24. Copyright Drecom Co., Ltd. All Rights Reserved. 24 検証 sig = "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5 cfd04be400" r = “0x” + sig.slice(2, 66) s = “0x” + sig.slice(66, 130) v = “0x” + sig.slice(130, 132) ただし、v は 27 または 28 でなければいけない。 もし 27 未満だったらv += 27 した上で hex にする。上記の例で言うとv = 0x1b となる。
  • 25. Copyright Drecom Co., Ltd. All Rights Reserved. 25 設計
  • 26. Copyright Drecom Co., Ltd. All Rights Reserved. 26 懸念 https://motemen.hatenablog.com/entry/2018/03/ethereum-dapp-protect-content
  • 27. Copyright Drecom Co., Ltd. All Rights Reserved. 27 現実的な設計
  • 28. Copyright Drecom Co., Ltd. All Rights Reserved. 28 まとめ • バックエンドを持つ DApps ではウォレットの署名によるユーザー (アドレス)の認証が可能。 • 署名に使うメッセージはユーザーに提示されるので、UI / UX の1つと して使うと良さそう。 • メッセージが常に単一なものである場合、メッセージと署名が漏れ てしまうとユーザーなりすましに使われてしまう危険がある。 • メッセージに「サーバーから発行したワンタイムトークン」を含め るのが現実的な設計と考えられる。
  • 29. Copyright Drecom Co., Ltd. All Rights Reserved. 29 ご静聴 ありがとうございました!

Editor's Notes

  1. With entertainment 人々の期待を超える を存在意義として掲げています
  2. 発明の種を生み続けるをミッションに活動しています。