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.

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

575 views

Published on

DApps におけるユーザ認証手法の紹介です。

Published in: Engineering
  • Be the first to comment

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

  1. 1. Copyright Drecom Co., Ltd. All Rights Reserved. 1 DApps のユーザー認証に web3.eth.personal.sign を使おう! Hi-Con LT 2018/11/10
  2. 2. Copyright Drecom Co., Ltd. All Rights Reserved. 2 自己紹介 株式会社ドリコム DRIP部 エンジニア 小川光典 @ogwmtnr
  3. 3. Copyright Drecom Co., Ltd. All Rights Reserved. 3 Drecom
  4. 4. Copyright Drecom Co., Ltd. All Rights Reserved. 4 DRIP https://drip.drecom.co.jp/
  5. 5. Copyright Drecom Co., Ltd. All Rights Reserved. 5 LoveChain 2018年7月5日リリース https://lovechain.ooo
  6. 6. Copyright Drecom Co., Ltd. All Rights Reserved. 6 2018年9月26日リリース https://6-pillars.ooo
  7. 7. Copyright Drecom Co., Ltd. All Rights Reserved. 7 ところで
  8. 8. Copyright Drecom Co., Ltd. All Rights Reserved. 8 DApps で ユーザー登録すると 「署名」を 要求されがち
  9. 9. Copyright Drecom Co., Ltd. All Rights Reserved. 9 大先輩 CryptoKitties のフロー
  10. 10. Copyright Drecom Co., Ltd. All Rights Reserved. 10 CryptoKitties でのユーザー登録
  11. 11. Copyright Drecom Co., Ltd. All Rights Reserved. 11 CryptoKitties でのユーザー登録
  12. 12. Copyright Drecom Co., Ltd. All Rights Reserved. 12 CryptoKitties でのユーザー登録
  13. 13. Copyright Drecom Co., Ltd. All Rights Reserved. 13 CryptoKitties でのユーザー登録
  14. 14. Copyright Drecom Co., Ltd. All Rights Reserved. 14 CryptoKitties でのユーザー登録
  15. 15. Copyright Drecom Co., Ltd. All Rights Reserved. 15 CryptoKitties でのユーザー登録
  16. 16. Copyright Drecom Co., Ltd. All Rights Reserved. 16 CryptoKitties でのユーザー登録
  17. 17. Copyright Drecom Co., Ltd. All Rights Reserved. 17 ユーザーにとっては ID / Password よりも楽なので 体感良さそう
  18. 18. Copyright Drecom Co., Ltd. All Rights Reserved. 18 実装を 考える
  19. 19. Copyright Drecom Co., Ltd. All Rights Reserved. 19 署名 https://web3js.readthedocs.io/en/1.0/web3-eth-personal.html#sign
  20. 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. 21. Copyright Drecom Co., Ltd. All Rights Reserved. 21 署名 署名するメッセージはユーザーに表示されるので、このように UX の一 部として含めることができそう。
  22. 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. 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. 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. 25. Copyright Drecom Co., Ltd. All Rights Reserved. 25 設計
  26. 26. Copyright Drecom Co., Ltd. All Rights Reserved. 26 懸念 https://motemen.hatenablog.com/entry/2018/03/ethereum-dapp-protect-content
  27. 27. Copyright Drecom Co., Ltd. All Rights Reserved. 27 現実的な設計
  28. 28. Copyright Drecom Co., Ltd. All Rights Reserved. 28 まとめ • バックエンドを持つ DApps ではウォレットの署名によるユーザー (アドレス)の認証が可能。 • 署名に使うメッセージはユーザーに提示されるので、UI / UX の1つと して使うと良さそう。 • メッセージが常に単一なものである場合、メッセージと署名が漏れ てしまうとユーザーなりすましに使われてしまう危険がある。 • メッセージに「サーバーから発行したワンタイムトークン」を含め るのが現実的な設計と考えられる。
  29. 29. Copyright Drecom Co., Ltd. All Rights Reserved. 29 ご静聴 ありがとうございました!

×