내 원장으로 메시지에 서명하려면 어떻게해야합니까?
3 대답
- 투표
-
- 2019-01-30
원장이 할 수있는 방법은 클라이언트 앱이 보내는 다양한 종류의 메시지에 대한 서명을 제공하는 것뿐입니다.따라서 귀하의 질문은 Ledger를 연결하는 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
경고 : 다음 해킹은 메시지를 나중에 의도하지 않은 것을 의미하기 위해 나중에 재 해석 할 수있는 작업 으로 취급하므로 위험합니다.
지금 당장 임의의 것에 서명하도록 원장을 설득 할 수 있습니다."Sign Unverified?"가 표시됩니다.프롬프트 :
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
-
당신이 이것을 지적하게되어 기쁩니다.이러한 서명은 나중에 의도하지 않은 의미를 갖는 것으로 나중에 다시 해석 될 수 있으므로이 해킹은 위험한 것으로 간주되어야합니다.테 조스는 언젠가는 * 실제 * 임의의 메시지를 지원할 것입니다.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 공식 답변에 경고를 추가했습니다.감사.@Tom I added a warning to the official response. Thanks.
- 0
- 2020-03-12
- Elliot Cameron
-
- 2019-02-15
아직이 작업을 도와 줄 편리한tezos-client 명령이나 RPC는 없지만 현재 다음과 같은 일반적인 방식으로 Micheline 표현식에 서명 할 수 있습니다.
$ 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 지갑 앱은 이러한 서명을 확인하지 않고 "Sign Unverified"를 표시합니다. 언젠가는
hash data
로 표시된 해시를 표시 할 것입니다.경고없이 설명하는 것이 편하지 않습니다.
미쉐린 표현에 서명하는 것은 위험 할 수 있습니다.
또한
sign bytes
는 위험합니다 . 서명되는 바이트가0x05
로 시작하는 것이 중요합니다. 이는 일반적으로 Micheline 표현식이 뒤따른다는 것을 나타냅니다. 바이트가0x01
-0x04
로 시작하면 다른 의미 일 수 있습니다 ! (예를 들어0x03
로 시작하는 경우 전송을 의미 할 수 있습니다!)일반적으로 어떤 키로 서명하는 메시지에 항상주의하세요.
귀하의 서명은 영원히 유효하므로 향후 상황도 관련이 있습니다.
여기 (계약 작성자의 관점에서) 관련 복잡성을 암시하기 시작하는 두 가지 관련 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.
메시지에 서명하는 방법이 있는지 알고 싶습니다.어떤 도움을 주시면 감사하겠습니다.감사합니다!