More Related Content
Similar to DApps のユーザ認証に web3.eth.personal.sign を使おう! (20)
More from Drecom Co., Ltd. (20)
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
- 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 となる。
- 26. Copyright Drecom Co., Ltd. All Rights Reserved. 26
懸念
https://motemen.hatenablog.com/entry/2018/03/ethereum-dapp-protect-content
- 28. Copyright Drecom Co., Ltd. All Rights Reserved. 28
まとめ
• バックエンドを持つ DApps ではウォレットの署名によるユーザー
(アドレス)の認証が可能。
• 署名に使うメッセージはユーザーに提示されるので、UI / UX の1つと
して使うと良さそう。
• メッセージが常に単一なものである場合、メッセージと署名が漏れ
てしまうとユーザーなりすましに使われてしまう危険がある。
• メッセージに「サーバーから発行したワンタイムトークン」を含め
るのが現実的な設計と考えられる。
Editor's Notes
- With entertainment
人々の期待を超える
を存在意義として掲げています
- 発明の種を生み続けるをミッションに活動しています。