Come posso firmare un messaggio con il mio libro mastro?
3 risposta
- voti
-
- 2019-01-30
Tutto ciò cheil libromastro safare è offrirefirme di diversitipi dimessaggiinviati dall'app client.Quindiin questo senso latua domanda si riferiscepiù alla capacità del client Tezos a cui stai collegandoiltuo Ledger (nodo completo,tezboxecc ...).
Almomento sfortunatamentenon è offerta l'opzionein nessuno dei clientperfirmaremessaggi di stringa regolari (inmodo simile a direnelportafogliogui standardbitcoin) quindi la risposta allatua domanda è "no".La cosapiù vicina che è disponibile è conilnodo completoperfirmarei messaggi dibyte conil comando
./tezos-client signbytes & lt; data >per & lt; src > che richiederebbe unafirma daltuo libromastro è che uno controlla src
Detto questo,è unafunzionalità utile da averee che vale lapena richiedere a vari sviluppatori diportafogli!
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!
-
Attenzione: `signbytes`puòfirmaretrasferimenti,ecc. Bisogna stare attenti a cosa sia` `.Warning: `sign bytes` can sign transfers, etc. One must be careful what the `` is.
- 1
- 2020-01-07
- Tom
-
- 2019-02-14
ATTENZIONE :il seguente hack èpericolosoperchétrattailtuomessaggio come operazione chepotrebbeessere reinterpretatain un contesto successivoperindicare qualcosa chenonintendevi.
Puoieffettivamente convincereil libromastro afirmare cose arbitrariein questomomento.Verrà visualizzato un "Segnonon verificato?"prompt:
tezos-client signbytes 0x03 $ (echo "ciao!"| xxd -ps| tr -d '\n')per & lt; account > Ma avere una soluzione completamente supportatain questo casoin cuiil libromastroti mostrieffettivamenteilmessaggio (o una sua versione verificabile) sarebbe l'ideale.
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.
-
Attenzione:nonfirmare cose arbitrarie usando 0x03.0x03 significa che segue un'operazione.Warning: do not sign arbitrary things using 0x03. 0x03 signifies that an operation follows.
- 1
- 2020-01-07
- Tom
-
Sono contento chetu lofaccianotare.Questo hack dovrebbeessere considerato rischiosoin quanto quellefirmepotrebberofinireperessere reinterpretatein un contesto successivo come aventi un significato chenonintendevi.Si spera che Tezos supporteràmessaggi arbitrari * reali * ad un certopunto.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 ho aggiunto un avvertimento alla risposta ufficiale.Grazie.@Tom I added a warning to the official response. Thanks.
- 0
- 2020-03-12
- Elliot Cameron
-
- 2019-02-15
Non ci sono ancora comanditezos-client o RPCmolto convenientiper aiutare con questo,ma attualmente sipuòfirmare un'espressione Michelinein unmodo convenzionale come questo:
$ 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 ...
Talefirma sarà accettata,adesempio,da un contratto cheesegue
{PUSH string "hello, world"; PACK; BLAKE2B; PUSH signature ...; PUSH key ...; CHECK_SIGNATURE; ASSERT}
.Questa convenzione è usata adesempio dai contratti di vestingmultisiggenesis.
Ad oggi l'app delportafoglio Ledgernon confermeràtalefirma,visualizzando "Firmanon verificata". Forse ungiornomostrerà l'hash visualizzato da
hash data
.Nonmi sento amio agionel descriverlo senzafornire un avvertimento:
Puòesserepericolosofirmare leespressioni Micheline.
Tienipresente anche che
sign bytes
èpericoloso . Èfondamentale sopra chei bytefirmatiinizino con0x05
,che convenzionalmenteindica che segue un'espressione Micheline. Sei byteiniziano con0x01
-0x04
,potrebbero significare qualcos'altro ! (Seiniziano con0x03
,adesempio,potrebbero significare untrasferimento!)Ingenerale,fai sempre attenzione a qualimessaggifirmi con quali chiavi.
Ricorda che letuefirme sono valideper sempre,quindi anche le situazionifuture sono rilevanti.
Vedi anche due rilevanti anti-pattern di Michelson,cheiniziano qui a suggerire la relativa complessità (dalpunto di vista dell'autore del contratto): Lefirme da solenonimpedisconogli attacchi di replay , Non dareper scontato chegli utenti utilizzeranno una chiave univocaper ogni smart contract .
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.
Vorrei sapere seesiste unmodoperfirmare unmessaggio?Qualsiasi aiuto sarebbe apprezzato.Grazie!