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