• Nenhum resultado encontrado

F 2 corpo finito com dois elementos

7.5 Implementação de f cr com Bitcoin

 Se k ∈ C, então S retira q moedas da Carteirak e envia a mensagem

(reembolso, k, m, ϕcob, τ

m, valor(q)) para A controlando Pk.

No final da simulação, S copia a saída A.

Para encerrar a prova do Lema 7.105, precisamos argumentar que a saída do simula- dor S é indistinguível da saída do adversário A. De fato, a saída de S é exatamente a de A exceto em duas ocasiões: quando A consegue quebrar o sigilo ou a não-ambiguidade do es- quema de comprometimento utilizado. Nesses casos, S tem como saída Falhasigiloe Falhaambg, respectivamente.

No entanto, os cenários em que S falha em imitar A só podem acontecer com probabili- dade desprezível, segundo a Definição 3.14 (sobre esquemas de comprometimento). Por isso, apoiado nas propriedades do esquema de comprometimento utilizado, concluímos que a saída de Sé indistinguível da de A, embora elas não sejam idênticas.

Outra propriedade importante do simulador S, e essencial para que a construção escada seja considerada segura, é o fato de que S não precisa criar moedas. Isto é, S consegue conduzir a simulação apenas com as moedas recebidas de A. Lembramos que essa é uma propriedade necessária porque, segundo a definição do modelo de computação, apenas o ambienteE pode criar moedas.

7.5 Implementação de fcr com Bitcoin

7.5.1 Visão Geral

O que falta para possibilitar uma implementação concreta da construção escada é apre- sentarmos uma implementação da funcionalidade fcr. Para isso, utilizamos transações Bitcoin.

Um depósito condicional 

Pi−→ϕ

c,τ Pj



é implementado através de duas transações. A primeira delas é a Txncri→ j, esquematizada na Figura 7.2. Ela é responsável por transferir as c moedas para Pjrespeitando as condições de fcr. A condição mais óbvia que fcrimpõe é a de que

Pj precisa fornecer uma entrada adequada para o circuito ϕ. Além disso, fcrimpõe que apenas

Pj deva ser capaz de reivindicar o depósito. Essas duas condições são aplicadas através do script

da saída de Txncri→ j.

A segunda transação necessária para implementar fcr é a Txnreemi→ j, esquematizada na

Figura 7.4. Ela serve para reembolsar Piquando Pjdeixar de reivindicar Txncri→ j antes da rodada

τ especificada. A novidade nessa transação é o uso do campo locktime impedir um reembolso prematuro, isto é, antes da rodada τ.

Outra característica importante de fcr é seu sincronismo. A estratégia de BENTOV e

KUMARESAN (2014) para implementá-lo é usar a blockchain como um relógio global em que a unidade básica de tempo é o bloco. Ela se sustenta na premissa de que a taxa de geração de

Figura 7.2: A Transação Txncr i→ j Txncri→j Sa´ıda Valor : c btc Script de Sa´ıda: Parˆametros: [T xn], p, ASki, ASkj In´ıcio: retorne VrfAssinatura(P kj, [T xn], ASkj) = 1 ∧ VrfAssinatura(P ki, [T xn], ASki) = 1∨ ϕ(p) = 1 

Fonte: Elaborada pelo autor.

blocos é aproximadamente constante10. Dessa forma, para representar as rodadas, precisa-se de duas medidas. A primeira delas é a duração de uma rodada em blocos, que chamaremos de ∆T . A segunda delas é um parâmetro de segurança Tsegque representa a quantidade mínima de

confirmações para que um bloco seja considerado pertencer à blockchain. Dessa forma, para que uma transação seja feita dentro de uma determinada rodada, ela deve aparecer em bloco antes dos Tseg últimos blocos dessa rodada.

Por conveniência, chamaremos de T0 a quantidade de blocos presentes na blockchain

imediatamente antes do início do protocolo. Dessa maneira, a rodada τida implementação Bitcoin

de fcr começa quando a blockchain contiver T0+ τi· ∆T blocos e uma transação só é considerada

ter sido publicada em τi se ela aparecer em um bloco entre os “instantes” (T0+ τi· ∆T ) e

(T0+ (τi+ 1)· ∆T − Tseg).

Como um último detalhe dessa visão geral, ressaltamos que os broadcasts especifica- dos em fcr são realizados naturalmente pelo protocolo Bitcoin. Eles correspondem à própria

publicação de transações na blockchain.

Nas seções seguintes vamos descrever mais detalhadamente as transações Txncri→ j e Txnreemi→ j considerando o cenário em que o depósito

 Pi−→ϕ

c,τ Pj



é feito. Em seguida vamos exibir a estratégia completa da implementação Bitcoin de fcr.

7.5.2 As Transações Txncri→ j

Como ilustrado na Figura 7.2, Txncri→ j transfere c moedas para Pj e só pode ser reivindi-

cada se as condições do depósito 

Pi ϕ

−→c,τ Pj



forem respeitadas. Essas condições são aplicadas pelo script da única saída de Txncri→ j. Ele recebe como argumentos a versão simplificada da transação que reivindica Txncri→ j ([txn]), uma entrada para o circuito ϕ (p) e duas assinaturas de [txn] supostamente válidas, uma gerada com a chave secreta de Pj (ASkj) e outra com a chave

secreta de Pi(ASki).

O script de saída é projetado de modo a permitir Txncri→ jser reivindicada de duas maneiras.

7.5. IMPLEMENTAÇÃO DE FCR COM BITCOIN 142

Figura 7.3: A Transação Txncredi→ j

Txncredi→j

Entrada

Sa´ıda Referenciada: a ´unica sa´ıda de Txncri→j

Script de Entrada: In´ıcio:

forne¸ca [Txncredi→j], p,⊥, Assina(Skj, [Txncredi→j]) para a

sa´ıda referenciada.

Fonte: Elaborada pelo autor.

A primeiras delas é através do fornecimento de uma assinatura válida feita com a chave secreta Skj(do destinatário Pj) e de uma entrada p que satisfaça o circuito ϕ. Essa é a única maneira

pela qual Pj deve ser capaz de reivindicar essa transação e é como a etapa de crédito (E2 da

Definição 7.100) de fcr é implementada. Ilustramos, na Figura 7.3, como uma transação Txncredi→ j

pode reivindicar Txncri→ j dessa maneira. Ela precisa apenas satisfazer Txncri→ jfornecendo uma entrada p para o script ϕ e uma assinatura com a chave secreta de Pj. Nenhuma restrição é feita

em relação ao seu script de saída11.

A outra maneira de reivindicar Txncri→ j é fornecendo duas assinaturas válidas: uma feita com a chave Skje outra com a chave Ski. Essa é a forma pela qual a etapa de reembolso (etapa

E3 da Definição 7.100) de fcr é implementada, como veremos adiante.

Como mostra a Figura 7.2, alguns valores utilizados pelo script de saída de Txncri→ j não são recebidos como argumentos. É o caso do circuito ϕ e das chaves públicas Pkie Pkj. De fato,

eles devem ser introduzidos diretamente no código (hardcoded) durante a criação de Txncri→ j e, portanto, precisam ser conhecidos naquele momento.

Ressaltamos que não são impostas restrições sobre a origem das moedas transferidas por Txncri→ j. Por essa razão, omitimos a especificação da entrada (ou entradas) de Txncri→ j na Figura 7.2.

7.5.3 As Transações Txnreemi→ j

A segunda transação criada para implementar fcr é a Txnreemi→ j, esquematizada na Fi-

gura 7.4. Ela serve para reembolsar o criador de Txncri→ j (Pi) quando Txncri→ j não for creditada

até a rodada limite τ. A única entrada de Txnreemi→ j referencia a saída de Txncri→ j. O script dessa entrada fornece as duas assinaturas (Assina([Txnreem

i→ j], Ski) e Assina([Txnreemi→ j], Skj)) que

possibilitam Txncri→ j ser reivindicada sem a apresentação de uma entrada para ϕ .

A transação Txnreemi→ j possui o campo locktime definido com o início da rodada τ, isto é, T0+ τ· ∆T . Isso serve para impedir que ela seja publicada antes do esperado e, portanto, que o depósito de Piseja reembolsado antes da hora.

Figura 7.4: A Transação Txnreem i→ j

Txnreemi→j locktime: T0+ τ · ∆T (rodada τ)

Entrada

Sa´ıda Referenciada: a ´unica sa´ıda de Txncri→j

Script de Entrada: In´ıcio:

forne¸ca [Txnreemi→j ],⊥, Assina(Ski, [Txnreemi→j ]),

Assina(Skj, [Txnreemi→j ]) para a sa´ıda referenciada.

Fonte: Elaborada pelo autor.

Os participantes Pi e Pj precisam cooperar para construir Txnreemi→ j, já que ela possui

assinaturas geradas com as chaves secretas dos dois. Essa cooperação deve acontecer antes de Txncri→ j ser publicada, pois Txnreemi→ j é a única garantia de Piser reembolsado no caso de Pj não

reivindicar o depósito.

7.5.4 Juntando as Peças: o Protocolo Πcr

Juntando tudo o que foi discutido sobre as transações Txncnr e Txnreemi→ j, definimos o protocolo Πcr para computar fcr através do protocolo Bitcoin a seguir.

Definição 7.106 (Protocolo Πcr para computar fcr baseado no protocolo Bitcoin- BENTOV e

KUMARESAN (2014)). Seja{P1,··· ,Pm} um conjunto de participantes.

E1. (Etapa de Depósito.) O objetivo desta etapa é criar as transações Txncri→ j e Txnreemi→ j para implementar o depósito  Pi ϕ −→c,τ Pj 

. Nesta etapa Txncri→ j é publicada na rede Bitcoin. Para isso,

 Pirecebe de Pjuma chave pública Pkj,

 Picria a transação Txncri→ j, conforme a Figura 7.2, utilizando sua chave pública

Pki, a chave Pkj recebida de Pje o script ϕ,

 Picria a transação Txnreemi→ j de acordo com a Figura 7.4 e envia a versão simpli-

ficada [Txnreemi→ j ] para Pj,

 Pjgera a assinatura ASkj = Assina([Txnreemi→ j], Skj) e a envia para Pi,

 Piverifica se VrfAssinatura([Txnreemi→ j], Pkj, ASkj) = 1, acrescenta ASkj no script

de entrada de Txnreemi→ j e publica Txncri→ j na rede Bitcoin.

E2. (Etapa de Crédito.) O objetivo desta etapa é fazer com que a transação Txncri→ j seja reivindicada com o fornecimento de uma entrada p para o script ϕ.

Para isso, Pjpublica na rede Bitcoin a transação Txncredi→ j reivindicando Txncri→ j, com p no