Daí amigos, boa tarde.

No versículo anterior, vimos a segunda parte da obra “Detecting Double Spending”. No de hoje a terceira e última.
A razão para o dinheiro ter a forma que ele tem é para que Bob possa verificar se ele está assinado pelo banco. Para cada valor de i, Alice precisa fornecer informações suficientes para calcular xi e yi. Se Bob escolhe um 1, ela dá a ele ai e yi. Dado ai, Bob pode calcular xi (=f(ai)), e com isso e yi ele g(xi,yi). Se Bob escolher um 0, ela dá a ele (ai xor <info>), como descrito anteriormente, e também xi. Dado (ai xor <info>), Bob calcula yi (=f(ai xor <info>)), e com isso e xi ele pode calcular g(xi, yi).
Então, para cada i, se Bob dá um 0 ou um 1, ele obtém informações suficientes para calcular g(xi,yi). Ele multiplica isso tudo junto e confirma que eles são iguais ao valor do “dinheiro” original de Alice quando levado a 3ª potência (lembre-se que o dinheiro era produto de g(xi,yi)^(⅓) para todo i). Somente o banco poderia ter produzido uma assinatura nesta função unidirecional cujos argumentos assumem essa forma especial.
Mais uma complicação existe. (Bem, na verdade, um número quase infinito de complicações existe se você procurar bastante. Mas vamos nos focar em mais uma.) Alice precisa obter essa forma especial de dinheiro do banco de tal forma que o banco não irá reconhecê-lo. Isso significa que ela tem de “cegá-lo” (blind it). Mas neste caso, o banco quer ter certeza de que o dinheiro é da forma adequada quando o assina; em particular, ele quer ter a certeza de que a <info> de Alice, que está enterrada em todos esses f’s de g’s, é na verdade a mais adequada para ela. Mas como o banco não consegue ver o que está assinando, isso é difícil de fazer.
Chaum usa “cut-and-choose” (cortar-e-escolher) para isso. Ele faz com que Alice prepare todos esses f’s e g’s de acordo com o formulário acima, inserindo cuidadosamente sua própria <info> incriminadora em cada uma delas. Então ela multiplica cada g(xi,yi) por um fator “cegante” (blinding) ri^3 como no primeiro dinheiro. Estes são o que ela envia ao banco para ser assinado.
O truque, porém, é que ela envia o dobro do que será usado. Ela envia k deles, mas somente k/2 será usado. (É por isso que o loop acima usou k/2 como limite.) O banco escolhe k/2 aleatoriamente do k que ela enviou como os que realmente serão usados. Alice então tem que enviar os valores de ri “cegantes” para aqueles que o banco não escolheu.
A ideia é que, se Alice tentar trapacear, incorporando “Bozo” em vez de “Alice” naquele campo <info>, ela está se arriscando. Primeiro, para ser útil, ela terá que o incorporar em muitos campos <info> para valores diferentes de i. Quando Bob e Charlie comparam notas depois que ela gasta duas vezes, cada valor de i para o qual eles escolheram 0’s e 1’s diferentes, que estarão em média na metade deles, revelará um campo <info>. Se ela só finge algumas, é provável que sua verdadeira identidade ainda seja revelada.
Mas se ela falsificar muitos deles, depois quando o banco escolher metade, é provável que pelo menos alguns dos falsos estarão no set que o banco não escolheu. Então, quando Alice tiver que revelar seus r’s “cegantes”, o jogo acabou. O banco irá revelar todos aqueles g(xi,yi) que não estão sendo usados e ver os falsos campos <info>.
Essa metodologia cut-and-choose (cortar e escolher) tem a desvantagem que Alice precisa fazer o dobro de trabalho na preparação do dinheiro, metade da qual será jogada fora. Mas é uma maneira simples de “força bruta” de se certificar que as assinaturas cegantes estão sendo feitas em dados corretamente formados.
Então aí está. Anonimato desde que você não trapaceie, e os que cometem gasto duplo são pegos. É um pouco complicado, mas é pra isso que servem os computadores; Bob e Alice não fariam tudo isso a mão. Alice iria pressionar o botão “gerar um candidato a dinheiro” e iria conseguir que algo fosse enviado ao banco (muitos dos novos PDA’s têm comunicação wireless infravermelho que seriam perfeitas para transações face a face.). Bob iria apertar o botão “checar o dinheiro” quando Alice o gastasse e iria piscar em vermelho ou verde. Contanto que os cálculos não demorem muito tempo, o que eles realmente não fariam neste caso, apesar desta longa explicação, as pessoas envolvidas podem ignorar os detalhes.
Hal Finney
Essa foi a tradução de “Detecting Double Spending”, de satoshi nakamoto Hal Finney, publicada em 15 de outubro de 1993. É uma obra um pouco técnica, mas espero que tenham gostado. Amanhã o Capítulo 15. Ricas bençãos.

Lembrete pra galera do Sul: dia 20/03, na próxima quarta-feira. Vai rolar dois meet-ups, um em Floripa e outro em Porto Alegre. Quem tiver a oportunidade de ir..
Segue os links: