元帳でメッセージに署名するにはどうすればよいですか?
3 回答
- 投票
-
- 2019-01-30
元帳が行う方法を知っているのは、クライアントアプリが送信するさまざまな種類のメッセージの署名を提供することだけです.その意味で、あなたの質問は、元帳を接続しているTezosクライアントの機能(フルノード、tezboxなど)に言及しています.
残念ながら、現時点では、どちらのクライアントでも通常の文字列メッセージに署名するオプションは提供されていないため(ビットコインの標準GUIウォレットで言うのと同様)、質問に対する答えは「いいえ」です.利用可能な最も近いものは、コマンドでバイトメッセージに署名するフルノードを使用することです
./tezos-client sign bytes <data> for <src>
元帳に署名を要求するのは、 src
を制御することです.そうは言っても、さまざまなウォレット開発者に要求する価値のある便利な機能です!
All that ledger knows how to do is to offer signatures of different kinds of messages the client app sends it. So in that sense your question refers more to capability of the Tezos client you are connecting your Ledger to (full node, tezbox etc...).
At the moment unfortunately the option is not offered in either client to sign regular string messages (similarly to say in the bitcoin standard gui wallet) so the answer to your question is "no". The closest thing that is available is with the full node to sign bytes messages with the command
./tezos-client sign bytes <data> for <src>
which would request a signature from your ledger is that one controls src
That being said it is a useful feature to have and worth requesting to various wallet developpers!
-
警告: `signbytes`は転送などに署名できます.``が何であるかに注意する必要があります.Warning: `sign bytes` can sign transfers, etc. One must be careful what the `` is.
- 1
- 2020-01-07
- Tom
-
- 2019-02-14
警告:次のハッキングは、メッセージを操作として扱い、後で意図しないものを意味するように再解釈される可能性があるため、危険です.p>
実際に、元帳に任意のものに今すぐ署名するように説得することができます.「SignUnverified?」と表示されます.プロンプト:
tezos-client sign bytes 0x03$(echo "hi there!" | xxd -ps | tr -d '\n') for <account>
ただし、元帳にメッセージ(またはその検証可能なバージョン)が実際に表示される、これに対する完全にサポートされたソリューションがあると理想的です.
WARNING: The following hack is dangerous because it treats your message as an operation which could be reinterpreted in a later context to mean something you did not intend.
You can actually convince the ledger to sign arbitrary things right now. It will display a "Sign Unverified?" prompt:
tezos-client sign bytes 0x03$(echo "hi there!" | xxd -ps | tr -d '\n') for <account>
But having a fully supported solution to this where the ledger actually shows you the message (or some verifiable version of it) would be ideal.
-
警告:0x03を使用して任意のものに署名しないでください.0x03は、操作が続くことを意味します.Warning: do not sign arbitrary things using 0x03. 0x03 signifies that an operation follows.
- 1
- 2020-01-07
- Tom
-
ご指摘いただきありがとうございます.これらの署名は、後のコンテキストで意図しない意味を持つものとして再解釈される可能性があるため、このハッキングは危険であると見なす必要があります.Tezosは、ある時点で*実際の*任意のメッセージをサポートすることを願っています.I'm glad you point this out. This hack should be considered risky as those signatures could end up being reinterpreted in a later context as having meaning that you didn't intend. Tezos will hopefully support *real* arbitrary messages at some point.
- 0
- 2020-03-12
- Elliot Cameron
-
@トム私は公式の応答に警告を追加しました.ありがとう.@Tom I added a warning to the official response. Thanks.
- 0
- 2020-03-12
- Elliot Cameron
-
- 2019-02-15
これを支援するための非常に便利なtezos-clientコマンドまたはRPCはまだありませんが、現在、次のような従来の方法でミケリン式に署名できます.
$ tezos-client hash data '"hello, world"' of type string | grep 'Raw packed data:' | cut -d: -f2 0x05010000000c68656c6c6f2c20776f726c64 $ tezos-client unpack michelson data 0x05010000000c68656c6c6f2c20776f726c64 "hello, world" $ tezos-client sign bytes 0x05010000000c68656c6c6f2c20776f726c64 for key ...
このような署名は、たとえば、
{PUSH string "hello, world"; PACK; BLAKE2B; PUSH signature ...; PUSH key ...; CHECK_SIGNATURE; ASSERT}
.この規則は、たとえば、ジェネシスマルチシグ権利確定契約によって使用されます.
本日現在、Ledgerウォレットアプリはそのような署名を確認せず、「SignUnverified」と表示します.いつか、
hash data
によって表示されるハッシュが表示されるかもしれません.警告を出さずにこれを説明するのは気が進まない:
ミケリンの表現に署名するのは危険な場合があります.
sign bytes
は危険であることに注意してください.上記では、署名されるバイトが0x05
で始まることが重要です.これは、通常、ミケリン式が続くことを示します.バイトが0x01
-0x04
で始まる場合、他の意味である可能性があります. (たとえば、0x03
で始まる場合は、転送を意味する場合があります!)通常、どのメッセージにどのキーで署名するかは常に注意してください.
署名は永久に有効であるため、将来の状況も関係することを忘れないでください.
ここで関連する複雑さを示唆し始める2つの関連するMichelsonアンチパターンも参照してください(契約作成者の観点から):署名だけでは、リプレイ攻撃を防ぐことはできません、ユーザーがすべてのスマートコントラクトに一意のキーを使用すると想定しないでください.
There are no very convenient tezos-client commands or RPCs to help with this yet, but one can currently sign a Micheline expression in a conventional way like this:
$ tezos-client hash data '"hello, world"' of type string | grep 'Raw packed data:' | cut -d: -f2 0x05010000000c68656c6c6f2c20776f726c64 $ tezos-client unpack michelson data 0x05010000000c68656c6c6f2c20776f726c64 "hello, world" $ tezos-client sign bytes 0x05010000000c68656c6c6f2c20776f726c64 for key ...
Such a signature will be accepted, for example, by a contract doing
{PUSH string "hello, world"; PACK; BLAKE2B; PUSH signature ...; PUSH key ...; CHECK_SIGNATURE; ASSERT}
.This convention is used for example by the genesis multisig vesting contracts.
As of today the Ledger wallet app will not confirm such a signature, displaying "Sign Unverified". Maybe someday it will display the hash displayed by
hash data
.I don't feel comfortable describing this without providing a warning:
It can be dangerous to sign Micheline expressions.
Note also that
sign bytes
is dangerous. It is crucial above that the bytes being signed start with0x05
, which conventionally indicates that a Micheline expression follows. If the bytes start with0x01
-0x04
, they might mean something else! (If they start with0x03
, for example, they might mean a transfer!)Generally, always take care which messages you sign with which keys.
Remember that your signatures are valid forever, so future situations are relevant too.
See also two relevant Michelson anti-patterns, which start to hint at related complexity here (from the contract author's perspective): Signatures alone do not prevent replay attacks, Do not assume users will use a unique key for every smart contract.
メッセージに署名する方法があるかどうか知りたいですか?どんな助けでもいただければ幸いです.ありがとう!