¿Cómo puedo firmar un mensaje con mi libro mayor?
3 respuestas
- votos
-
- 2019-01-30
Todo lo queel libromayor sabe haceres ofrecerfirmas de diferentestipos demensajes que la aplicación clienteenvía.Entonces,en ese sentido,supregunta se refieremás a la capacidad del cliente de Tezos al queestá conectando su Ledger (nodo completo,tezbox,etc.).
Porelmomento,desafortunadamente,ninguno de los clientes ofrece la opción defirmarmensajes de cadena regulares (demanera similar a lo que se diceen labilletera deinterfazgráfica de usuarioestándar debitcoin),por lo que la respuesta a supreguntaes "no".Lomás cercano queestá disponiblees conelnodo completoparafirmarmensajes debytes conel comando
./tezos-client sign bytes <data> for <src>
lo que solicitaría unafirma de su libromayores que uno controla src
Dichoesto,es una característica útil y vale lapena solicitarla a varios desarrolladores debilleteras.
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!
-
Advertencia: `signbytes`puedefirmartransferencias,etc. Hay quetener cuidado conel` `.Warning: `sign bytes` can sign transfers, etc. One must be careful what the `` is.
- 1
- 2020-01-07
- Tom
-
- 2019-02-14
ADVERTENCIA : El siguientetrucoespeligrosoporquetrata sumensaje como una operación quepodría reinterpretarseen un contextoposteriorpara significar algo quenopretendía.
De hecho,puede convencer al libromayor de quefirme cosas arbitrarias ahoramismo.Aparecerá unmensaje de "¿Firmar sin verificar?"aviso:
tezos-client sign bytes 0x03$(echo "hi there!" | xxd -ps | tr -d '\n') for <account>
Perotener una solucióntotalmente compatibleparaesto dondeel libromayor realmente lemuestreelmensaje (o alguna versión verificable delmismo) seríaideal.
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.
-
Advertencia:nofirme cosas arbitrarias usando 0x03.0x03 significa que sigue una operación.Warning: do not sign arbitrary things using 0x03. 0x03 signifies that an operation follows.
- 1
- 2020-01-07
- Tom
-
Me alegra queme lo señale.Estetruco debe considerarse riesgoso ya queesasfirmaspodríanterminar siendo reinterpretadasen un contextoposterior como situvieran un significado quenopretendías.Es deesperar que Tezos admitamensajes arbitrarios * reales *en algúnmomento.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 Agregué una advertencia a la respuesta oficial.Gracias.@Tom I added a warning to the official response. Thanks.
- 0
- 2020-03-12
- Elliot Cameron
-
- 2019-02-15
Todavíano hay comandos de clientetezos o RPCmuy convenientespara ayudar conesto,pero actualmente sepuedefirmar unaexpresión Micheline de unamanera convencional comoesta:
$ 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 ...
Talfirma será aceptada,porejemplo,por un contrato que haga
{PUSH string "hello, world"; PACK; BLAKE2B; PUSH signature ...; PUSH key ...; CHECK_SIGNATURE; ASSERT}
.Esta convención se utiliza,porejemplo,en los contratos de adjudicación de derechosmúltiples degenesis.
Apartir de hoy,la aplicación debilletera Ledgerno confirmará dichafirma ymostrará "Firmar sin verificar". Tal vez algún díamuestreel hashmostradopor
hash data
.Nome siento cómodo describiendoesto sin dar una advertencia:
Puede serpeligrosofirmarexpresiones Micheline.
Tengaen cuentatambién que
sign bytes
espeligroso . Es crucial arriba que losbytes que seestánfirmando comiencen con0x05
,que convencionalmenteindica que sigue unaexpresión Micheline. Si losbytes comienzan con0x01
-0x04
, ¡pueden significar algomás ! (Si comienzan con0x03
,porejemplo,¡podrían significar unatransferencia!)Engeneral,siempretenga cuidado con quémensajesfirma con qué claves.
Recuerde que susfirmas son válidaspara siempre,por lo que las situacionesfuturastambién son relevantes.
Veatambién dos anti-patrones relevantes de Michelson,que comienzan ainsinuar una complejidad relacionada aquí (desde laperspectiva del autor del contrato): Lasfirmaspor sí solasnoevitan los ataques de repetición , No asuma que los usuarios usarán una clave únicapara cada contratointeligente .
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.
Megustaría saber si hay algunaforma defirmar unmensaje.Cualquier ayuda sería apreciada.¡Gracias!