Title: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: cryptobaboon on February 25, 2020, 01:55:52 AM Buscando um tema para um novo tutorial para postar por essas bandas, identifiquei que temos pouquíssimo material que contemple a assinatura de mensagens (parte integrante, inclusive, do procedimento para restauração de contas (https://bitcointalk.org/index.php?topic=3076506.0) aqui no BTT. O único tutorial que temos e que já está listado em nosso Guia de Postagens (https://bitcointalk.org/index.php?topic=5222475.0) é o do @textgeek (Como assinar uma transação BTC usando Carteira Electrum (https://bitcointalk.org/index.php?topic=5074596.0)) mas que, como o título indica, é dedicado ao processo apenas com a Electrum.
Pensei em fazer algo mais abrangente e, durante as pesquisas, acabei encontrando este tópico (https://bitcointalk.org/index.php?topic=990345.0) do usuário @shorena que se mostrou bem completo! No entanto, com sua última atualização tendo ocorrido já há algum tempo (Set/18), achei que seria uma oportunidade de montar algo na mesma linha, porém, mais atualizado, detalhado e buscando uma melhor diagramação dos passos e das imagens - penso que a visualização completa de todas as aplicações no corpo do próprio tópico acaba por dificultar a leitura do todo, então a idéia é detalhar cada um dos passos e, caso exista alguma dificuldade, imagens em proporção real (clique nelas para visualizá-las sob esta condição) podem ser referenciadas ao final de cada um dos procedimentos. Seguirei esporadicamente atualizando o tópico e até incluindo outras carteiras/serviços. Afinal, os aqui listados elencam apenas algumas das opções que temos no mercado. BITCOIN COMO ASSINAR UMA MENSAGEM Í N D I C E 1. Introdução (#post_st1) 2. Como Funciona? (#post_st2) 3. Indicações (#post_st3) 4. Assinando uma mensagem (#post_st4)
6. Verificando uma assinatura (#post_st6)
1. INTRODUÇÃO? https://i.imgur.com/9AgRP3t.png (#post_ind) Estamos acostumados a passar referências bancárias quando necessário. Nesta ocasiões, normalmente informações como o nome/código do banco, agência, conta, etc. são suficientes para estabelecer uma ligação da pessoa física com a mesma. Mas... como fazer isso quando estamos falando do Bitcoin e sua economia descentralizada? Em um ambiente onde não há um link direto entre o mundo real e o digital, como garantir a alguma parte que um determinado endereço realmente lhe pertence? Para estas situações, a função de assinatura pode ser utilizada. A idéia aqui é que, em posse da chave privada de um determinado endereço, você consiga customizar uma mensagem em particular que poderá ser utilizada para aquele um fim em especial ou mesmo para generalizadamente exprimir a posse da daquele endereço e, consequentemente, dos fundos ali contidos. Seguindo a analogia inicial, poderíamos dizer que seria algo como um cheque de seu banco, onde apenas com o vínculo de sua assinatura, o mesmo seria validado - identificando-o como o real titular e liberando o montante ali indicado. A diferença no Bitcoin é que não há margem para erros, estamos falando de uma verificação matemática, assim como ocorre em todas as operações da moeda. Dentre algumas utilidades do processo, podemos citar alguns possíveis exemplos de objetivos com a ação, como:
2. COMO FUNCIONA? https://i.imgur.com/9AgRP3t.png (#post_ind) Como sabemos, o Bitcoin utiliza o Algoritmo de Assinatura Digital de Curva Elíptica, mais conhecido como ECDSA (https://en.wikipedia.org/wiki/Elliptic_Curve_DSA) para assinar as transações. Mas como isso funciona exatamente? Diversos cálculos são realizados sobre os valores de entrada, sofrem uma compressão, gerando um hash que é justamente o ponto a ser validado. As etapas resumem-se da seguinte forma: 1) Gera-se a chave 2) Codifica-se 3) Gera-se o hash 4) Compara-se o hash obtido com o extraído através do endereço original Para um melhor entendimento sobre a criptografia de curva elíptica, referencie o documento oficial (http://www.secg.org/sec1-v2.pdf) do SEC (não, não estamos falando aqui da Securities and Exchange Comission dos EUA ::)). 3. INDICAÇÕES https://i.imgur.com/9AgRP3t.png (#post_ind) Como estamos falando de um "método de validação", é sumariamente importante que ela seja realizada da melhor maneira, sem que existam lacunas para indivíduos de má índole tirarem proveito das informações. Sendo a idéia da assinatura uma forma comprobatória de posse de um endereço, dados não tão específicos podem dar margem à interpretações incorretas e apoderamento por terceiros do propósito original. Partindo dessa premissa, existem alguns apontamentos que devem ser seguidos e alguns outros que devem ser evitados de toda forma:
Obs.: Indico a utilização de um live CD/USB (https://bitcointalk.org/index.php?topic=5220540.0#post_st2) e, se possível, de forma offline nos serviços e carteiras que permitam a operação neste estado. 4. ASSINANDO UMA MENSAGEM https://i.imgur.com/9AgRP3t.png (#post_ind) Como vocês deverão notar, o procedimento é extremamente parecido na maior parte das carteiras/serviços, usualmente os campos são tratados da mesma forma e, inclusive, pelo mesmo nome. Em algumas situações o módulo fica um pouco mais escondido, mas se ele existe, a gente encontra :) Para os exemplos, usualmente utilizaremosum endereço vanity (criada especialmente para este tutorial, utilizando o VanitySearch - quer saber como criar o seu próprio? Confira o tutorial dedicado para este fim (https://bitcointalk.org/index.php?topic=5220540.0). É extremamente fácil!) e a mesma mensagem: Endereço: Code: 1BRAS1LEnc9tduTm6QT8awP3F5gpHX5KZe Mensagem: Code: Este é um teste feito por cryptobaboon em uma carteira teste para a comunidade luso-brasileira do Bitcointalk em 16/02/2020. A segmentação segue cada uma das carteiras com suas respectivas versões. Lembrando apenas que se a sua versão não é a abaixo descrita, dê uma conferida mesmo assim! Muitas vezes as atualizações são apenas de caráter técnico e não refletem no ambiente gráfico da aplicação, ou seja, a disposição das opções/campos podem ser exatamente iguais ou ao menos extremamente similares. IMPORTANTE: Se o endereço a ser assinado é um endereço Segwit (iniciado por 3 ou bc1q), por não haver um padrão responsável por este confrontamento, uma conversão para legacy é necessária. Nosso amigo @Loganota postou abaixo (https://bitcointalk.org/index.php?topic=5228243.msg53913468#msg53913468) dando maiores detalhes de como executar o procedimento e, desta forma, ter um workaround para este tipo de endereçamento. Devido a quantidade um pouco elevada de itens, indico a utilização do índice (#post_ind) caso você esteja procurando por alguma ferramenta em particular.
5. APRESENTAÇÃO https://i.imgur.com/9AgRP3t.png (#post_ind) Mas como expressar essa assinatura? Basta informá-la sem qualquer vínculo com o endereço? Existe algum padrão para o fornecimento deste tipo de informação? Sim! Existe uma "estrutura padrão" utilizada para a transmissão destas validações e usada até mesmo em algumas ferramentas. Usualmente, aqui no fórum o seguinte modelo é utilizado: Code: -----BEGIN BITCOIN SIGNED MESSAGE----- Alterando-se, logicamente, as 3 informações indicadas (mensagem / endereço / assinatura). Usando o exemplo utilizado anteriormente, teríamos: Code: -----BEGIN BITCOIN SIGNED MESSAGE----- IMPORTANTE: Utilize as tags CODE ao invés de QUOTE, isso garante que todas as informações (principalmente referente a mensagem, que usualmente envolve espaço) sejam contabilizadas para a correta verificação da assinatura gerada. 6. VERIFICANDO UMA ASSINATURA https://i.imgur.com/9AgRP3t.png (#post_ind) Se há um cálculo para gerar uma assinatura com base em algumas informações, logicamente para fazer a prova real um cálculo inverso também pode ser operado. Felizmente, assim como na ação original, temos ferramentas que possuem módulos de validação destas informações. Esta seção contará com os que consegui testar até o momento, os elecando da mesma forma (nome do app/serviço + versão). Seguindo o teste realizado na criação (naqueles onde a importação do endereço foi possível), a assinatura gerada para a mesma composição foi esta: Code: H/NiN1wzJhrBuHoPV8D8xJNADPZQFAWdns67AS4ttlkXdIsFdHoksQIGZCWt1yjDZK69oeIWfYtYwLRyHgRGdqo= Que será utilizada como parâmetro para a devida validação nos procedimentos abaixo.
Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: cryptobaboon on February 25, 2020, 01:56:17 AM
Infelizmente, nem todos as carteiras/serviços possuem um módulo para geração e/ou validação de assinaturas. Todas as carteiras/serviços testadas e que não dispuserem da função serão listados aqui, já formatados para serem movidos para a seção de detalhamento do processo (Assinando uma mensagem (#post_st4) e/ou Verificando uma assinatura (#post_st6)), caso em algum momento o fluxo seja implementado: PLATAFORMAS UTILIZADAS https://cdn.icon-icons.com/icons2/836/PNG/512/Windows_Phone_icon-icons.com_66782.png Windows 10 Pro b10319 | https://i.ya-webdesign.com/images/internet-icon-png-1.png Tor Browser v9.0.5 | https://i.imgur.com/98gxvme.png Android 10 v1.190825.002 | https://i.imgur.com/4eVySL6.png iOS 13 v13.2.2
ATUALIZAÇÕES [/list][/list] Code: 28/02/2020 - Links para BrainWalletX dt.23.02.20 em "Assinando uma mensagem" e "Verificando uma mensagem" corrigidos Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: cryptobaboon on February 25, 2020, 01:56:29 AM Reservado
Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: alegotardo on February 25, 2020, 11:12:52 AM Poxa vida @cryptobaboon :o que material incrível você produziu, meus parabéns cara.
Você baixou todas essas wallets para montar o tutorial? Que empenho. Uma pequena dica, use sempre o Imgur (https://imgur.com/upload) para hospedar suas imagens, até onde sei ele é o único que não estraga o seu trabalho enviando as imagens para o espaço (ele mantém ela nas nuvens ;D ) Digo isso porque algumas imagens do seu tutorial já deram problemas em menos de 24 horas após publicadas.... https://i.imgur.com/cH2IygE.jpg Faltam me sMerits nesse momento, volto aqui assim que os conseguir ;) Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: bitmover on February 25, 2020, 12:20:29 PM Parabens.
EU adicionaria a Samourai a lista. Melhor carteira mobile pra bitcoin. Permite assinar, open surge, segwit , coin control, etc. Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: alegotardo on February 25, 2020, 02:24:59 PM Quanto a Ledger, dei uma fuçada aqui (https://medium.com/@bytether/how-to-sign-a-message-with-a-ledger-wallet-bb13077341d8) e parece que na versão antiga que rodava ainda como um complemento/extensão do Chrome tinha esse recurso.
Essa wallet foi descontinuada e por segurança eu nem arisco abrir ela aqui. Já na Ledger live procurei por tudo e não encontrei a opção, também pesquisei e ao que descobri de fato não há o suporte para esse procedimento. Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: cryptobaboon on February 25, 2020, 03:09:20 PM (...) Valeu, ale! Inicialmente pensei em buscar algumas referências em outros tutoriais, como estes presentes no fórum, mas a quantidade de carteiras e serviços é tão absurda que preferi eu mesmo girar a roleta e escolher algumas e fazer. Quando percebi que já não cabiam no primeiro post, achei que era hora de parar... ia acabar seguindo com a lista até que as verificações anteriores já estivessem defasadas ;D Sobre o host de imagens, então, acho que foi algum problema no proxy do fórum (talvez pelo número de imagens carregadas ao mesmo tempo?), você pode verificar clicando diretamente na imagem e sendo direcionado para a imagem em proporção real. Sempre utilizei o imgbox (https://imgbox.com/) e o imgur (http://imgur.com/) para as hospedagens, justamente por deixaram fazer o hyperlink sem problema. O bom do imgbox é a organização do quadro com as tags bbcode; não sai exatamente como você precisa (como eu uso ao menos) mas já ajuda bastante :) Parabens. Na verdade eu a testei e ela está na lista, bit. Fiz o teste com a carteira Android e pelo que vi não encontrei a versão iOS. Na Android confesso que de prima não encontrei não. Vou tentar mais uma vez e encontrando o módulo eu movo para a seção de assinatura ;)EU adicionaria a Samourai a lista. Melhor carteira mobile pra bitcoin. Permite assinar, open surge, segwit , coin control, etc. Quanto a Ledger, dei uma fuçada aqui (https://medium.com/@bytether/how-to-sign-a-message-with-a-ledger-wallet-bb13077341d8) e parece que na versão antiga que rodava ainda como um complemento/extensão do Chrome tinha esse recurso. Vale mais uma vez, ale! Inclui a Ledger Live na lista de não suportados, então. Mas a manterei a Ledger Wallet na lista não testada ainda também, vai que aparece alguém que utiliza a versão antiga e pode nos confirmar?! ;)Essa wallet foi descontinuada e por segurança eu nem arisco abrir ela aqui. Já na Ledger live procurei por tudo e não encontrei a opção, também pesquisei e ao que descobri de fato não há o suporte para esse procedimento. Aliás, você testou com a última disponível? Pelo que chequei é a 1.20.0, certo? Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: TryNinja on February 25, 2020, 05:14:56 PM Quanto a Ledger, dei uma fuçada aqui (https://medium.com/@bytether/how-to-sign-a-message-with-a-ledger-wallet-bb13077341d8) e parece que na versão antiga que rodava ainda como um complemento/extensão do Chrome tinha esse recurso. Ela realmente tinha, mas hoje em dia nem sei se ainda funciona. De qualquer forma, não recomendo nem tentar utilizá-la. Caso queira assinar uma mensagem da sua Ledger, tem como utilizá-la através da Electrum e assinar por lá. Talvez seja uma boa colocar um OBS sobre isso para os usuários da hardware wallet.Essa wallet foi descontinuada e por segurança eu nem arisco abrir ela aqui. Já na Ledger live procurei por tudo e não encontrei a opção, também pesquisei e ao que descobri de fato não há o suporte para esse procedimento. Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: cryptobaboon on February 25, 2020, 09:05:01 PM Ela realmente tinha, mas hoje em dia nem sei se ainda funciona. De qualquer forma, não recomendo nem tentar utilizá-la. Caso queira assinar uma mensagem da sua Ledger, tem como utilizá-la através da Electrum e assinar por lá. Talvez seja uma boa colocar um OBS sobre isso para os usuários da hardware wallet. O grande problema desse processo, ninja, é a inclusão de um ponto de falha para a utilização da hardware wallet, já que a idéia seria justamente de não haver a necessidade de transacionar as seeds em ambientes que não os envolvidos pelo dispositivo, certo? De qualquer forma, foi o que você disse, na ausência de uma alternativa, essa com certeza é uma opção exequível! Desta forma, adicionei uma pequena nota no seção dos não testados indicando a possibilidade mas, claro, destacando a ainda maior diligência quando neste cenário.Ah, claro, obrigado a todos pela força (e merits)! :) Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: TryNinja on February 25, 2020, 09:09:11 PM ~ Ninguém falou em utilizar a seed da hardware wallet. Isso é acabar com qualquer rastro de segurança da hardware wallet.A Electrum permite utilizar a Ledger Nano S perfeitamente do mesmo jeito que você utiliza a Ledger Live, conectando-a normalmente. Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: cryptobaboon on February 25, 2020, 09:17:54 PM ~ Ninguém falou em utilizar a seed da hardware wallet. Isso é acabar com qualquer rastro de segurança da hardware wallet.A Electrum permite utilizar a Ledger Nano S perfeitamente do mesmo jeito que você utiliza a Ledger Live, conectando-a normalmente. Dei uma furunfada aqui e encontrei este artigo (https://support.ledger.com/hc/en-us/articles/115005161925-Set-up-and-use-Electrum) no próprio site de suporte da Ledger, acabei de re-formatar o fragmento e inclui-lo. Só não o adiciono ao tutorial porque vai acabar abrindo o leque demais. Mas para quem tem a bichinha por aí, talvez fosse interessante traduzir ou mesmo fazer um breve tutorial do processo - se ocorrer, deixem-me saber que eu o linko por aqui (e no Guia também), claro! Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: Loganota on February 26, 2020, 02:15:27 AM Parabéns pelo tutorial @cryptobaboon!
Gostaria de lembrar que as vezes as carteiras não conseguem verificar uma transação que foi assinada por um endereço Segwit. O da BrainWalletX, que o pessoal costuma utilizar naquele tópico pra "guardar" o endereço em caso de possível perda/roubo de conta, não suporta. Uma solução nesse caso é apagar o endereço que ele vai identificar o endereço legacy correpondente ao segwit que a pessoa assinou e vai dar como verificado. Por exemplo, assinei usando um endereço Segwit: https://talkimg.com/images/2023/09/12/6dJbW.png BrainWalletX dá como falha ao colocar o endereço Segwit: https://talkimg.com/images/2023/09/12/6djSJ.png Ao apagar o endereço ele consegue verificar como se fosse um endereço legacy correspondente: https://talkimg.com/images/2023/09/12/6dr3C.png Se quiser "transformar" o endereço Segwit em Legacy para fazer a verificação, é só seguir esse tutorial aqui do @lulucrypto How to verify SegWit signature with Brainwallet ? (https://bitcointalk.org/index.php?topic=5198585.0) Você vai ver que vai dar o mesmo endereço que o BrainWalletX achou ao "advinhar" qual é Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: cryptobaboon on February 26, 2020, 11:10:56 AM (...) Muitíssimo bem lembrado, Loga! Na verdade, o assunto chegou a ser brevemente coberto no tópico do shorena, mas no esforço sobre as wallets esqueci de adicionar a informação quanto à inexistência de um padrão para esta validação, ainda que ocorra no âmbito da Electrum. Acabei de fazer uma menção na seção de Assinatura, referenciando justamente o seu post para validações de endereços Segwit. Obrigado, mais uma vez, pela agregada! :) Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: cryptobaboon on February 28, 2020, 01:02:22 AM Parabens. Na verdade eu a testei e ela está na lista, bit. Fiz o teste com a carteira Android e pelo que vi não encontrei a versão iOS. Na Android confesso que de prima não encontrei não. Vou tentar mais uma vez e encontrando o módulo eu movo para a seção de assinatura ;)EU adicionaria a Samourai a lista. Melhor carteira mobile pra bitcoin. Permite assinar, open surge, segwit , coin control, etc. Quote "Currently you can only sign messages with addresses that contain an unspent balance of bitcoin." Ou seja, neste momento apenas endereços que contenham algum valor podem ser assinados. Como importei o endereço do teste em diversas carteiras, o entendo como comprometido e para o processo dela mantive apenas os direcionamentos ali descritos. Se alguém tiver a imagem dos passos, posso segmentá-las e incluir ao procedimento depois, seguindo o padrão das restantes. ;) Ah, incluí também um quadro de updates ao final, para manter um tracking do que tivermos de atualizações daqui pra frente. Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: Loganota on February 28, 2020, 02:13:21 AM Esqueci de falar no meu post anterior que o link para a BrainWalletX está indo para o https://bither.net/
Title: Re: [Tutorial] Como assinar uma mensagem (carteiras/serviços variados) Post by: cryptobaboon on February 28, 2020, 11:29:10 AM Esqueci de falar no meu post anterior que o link para a BrainWalletX está indo para o https://bither.net/ Obrigado mais uma vez, Loga! Como montei o Sign primeiro, nele ficou errado e acabei replicando o erro para o Verify ::) ambos corrigidos! ;) |