# Tumblebit

Tumblebit é um sistema de pagamento unidirecional e não associável, compatível com o protocolo Bitcoin atual, no qual é possível fazer pagamentos rápidos, anônimos e fora da Blockchain através de um intermediário que não precisa ser confiado chamado Tumbler. Suas propriedades de anonimato são similares ao sistema Ecash, arquitetado por David Chaum, onde ninguém, nem mesmo o tumbler pode ligar um pagamento ao pagador ou ao recebedor. O Tumblebit surge como uma alternativa segura em comparação ao formato em que o tumbler é uma entidade que precisa ser confiada, como por exemplo um banco.
O funcionamento do Tumblebit foi formalizado através de um whitepaper, no ano de 2016.

## Conceito

O tumblebit foi proposto com o objetivo de solucionar problemas envolvendo a Rastreabilidade e também a Escalabilidade de transações Bitcoin.
Com o aumento de popularidade do Bitcoin, a rede que parecia ser razoavelmente anônima, se utilizando de técnicas de Ofuscação para tentar anonimizar seus usuários, se tornou facilmente rastreável após maior pesquisa sobre o assunto, isso fez com que técnicas de anonimizar transações fossem criadas, técnicas como o tumbler apareceram com a intenção de confundir alguém que tente seguir o rastro de uma transação, através de uma terceira parte que mediaria a transferência. É possível notar que esse processo só funcionaria caso o tumbler fosse honesto e enviasse o valor correto. A proposta do Tumblebit é, através de protocolos, limitar e garantir que seu tumbler não consiga nem violar o anonimato, nem roubar bitcoins, nem imprimir dinheiro através da emissão de pagamentos para ele mesmo.
Outro desafio muito abordado no Bitcoin é a escalabilidade, a habilidade de lidar com um número cada vez maior de usuários na rede, sua popularização causou alguns efeitos como:
* Um impasse entre escalabilidade e descentralização relacionado ao tamanho dos blocos conforme mais transações precisam ser processadas pelos mineradores. Similarmente existem impasses com relação a segurança e custo, ligados a ideia de manter em registro todas as transações. Esses impasses não podem ser solucionados a nível de transação (propondo uma solução caso-a-caso), pois o Bitcoin funciona de maneira uniforme para todos os nós.
* Existem impasses ligados a funcionalidades que poderiam ser adicionadas, mas poderiam impactar a a eficiência.
* Existem outros ativos, além das criptomoedas que podem ser transferidos por blockchains, como notas promissórias.
* Há um risco de falha no Bitcoin relacionado ao seu algoritmo, pois diversos componentes criptográficos estão apoiados sobre o mesmo algoritmo, e um erro afetaria todos eles.
* Novas tecnologias desenvolvidas podem trazer novas funcionalidades que não foram pensadas quando o Bitcoin foi desenvolvido, como melhorias de privacidade e resistência a censura.
* O Bitcoin possui uma abordagem para alterações em seu algoritmo lenta e cautelosa, com a necessidade de consenso. Isso pode limitar as capacidades de grupos menores de adicionar ferramentas que poderiam lhe ser úteis.
Tumblebit resolveria o problema de escalabilidade do volume e velocidade de pagamentos através de transações feitas fora da blockchain, podendo confirmar as mesmas em questões de segundos, ao invés dos 10 minutos levados em média pelo Bitcoin
Outras funcionalidades do Tumblebit também envolvem a unidirecionalidade e não associabilidade dos pagamentos, as quais são implementadas pelo tumbler através de protocolos.

## Informações Técnicas
### Sistema eCash

O Ecash foi criado em 1983 para ser um sistema de moeda virtual criptográfica e anônima onde o software eCash guardaria o dinheiro do usuário de forma digital, criptograficamente assinada por um banco. O usuário poderia gastar esse dinheiro virtual em qualquer loja que aceitasse eCash sem que fosse necessário abrir uma conta antes ou passar seu número do cartão de crédito. Isso se tornou possível através de um sistema RSA de "Blind signatures", que garantem a não ligação entre as transações de retirada e de gastos.
Baseado nesse modelo de "Blind signatures" e também no estilo centralizado do eCash o Tumblebit foi criado.

### Tipos de uso

Existem duas maneiras diferentes de se utilizar o protocolo Tumblebit:
* Como um tumbler comum, provendo k-anonimidade, fazendo com que 4 transações sejam confirmadas em dois blocos
* Como um hub de pagamento, garantindo a não rastreabilidade da transação e se utilizando de canais de pagamento unidirecionais

### Funcionamento do tumbler

Imagine a seguinte situação:
* Alice quer pagar uma quantia a Bob
* Alice tem um canal de pagamento unidirecional entre ela e o hub de pagamento
* O hub de pagamento e Bob tem um canal de pagamento unidirecional entre eles
* Os canais unidirecionais são implementados com duas garantias que exigem que ambas as partes em cada lado da garantia assinem uma permissão para que uma pretensão seja aceita
* Alice então, com ajuda do hub de pagamento cria uma pretensão p1 de transação para o hub, que por sua vez cria uma pretensão p2 de transação para Bob
* Alice assina sua pretensão p1, com a intenção de confirmar a transação, o hub de pagamento também assina sua pretensão p2
* Bob então assina sua pretensão p2 e por fim o hub assina a pretensão p1
* A transação é então confirmada e Alice envia 1 BTC para o hub de transação, que por sua vez envia 1 BTC para Bob

#### Problemas dessa abordagem

O tumbler poderia ser malicioso e simplesmente pegar o Bitcoin que Alice enviou, sem enviar nenhum para Bob. Isso é feito impossível através da atomicidade da transação, ou ambos Alice e o hub pagam ou nenhuma transação acontece, para isso é utilizada a técnica RSA com quebra-cabeças, que além de garantir a atomicidade, também garante o anonimato pois seu funcionamento é tal que, num ambiente onde existem x usuários fazendo transações, não permite ao hub de pagamento ligar o pagador ao recebedor, apenas permite que ele saiba que x transações foram efetuadas naquele determinado momento

##### Quebra-cabeças RSA

* Bob precisa descobrir o valor de ε para receber 1 BTC do tumbler
* O tumbler cria um quebra-cabeças com solução ε, com z = RSA(PK, ε)
* O tumbler também encripta o valor da assinatura com a resposta do quebra-cabeças, criando c = Enc(σ, ε)
* Bob recebe o valor de 'z' e 'c', "cega" z e o envia para Alice, que através de um protocolo consegue z*
* Alice entrega z* para o tumbler
* O tumbler utiliza z* para descobrir ε* através de ε* = RSA^{-1}(SK, z*)
* O tumbler não pode simplesmente dizer a Alice o valor de ε*, pois, caso o fizesse, ela poderia enviar 1 BTC para Bob sem pagar nada
* O tumbler então encripta a solução utilizando X onde q = Enc(X, ε*) e gera um hash de X tal que Y = H(X)
* O valor de q e Y são enviados para Alice de forma que, caso ela saiba o valor de X ela possa desencriptar q e saber o valor de ε*
* Alice então cria uma transação envolvendo o tumbler no valor de 1 BTC, que se realizará caso o tumbler revele o valor de X
* Com o valor de X, Alice pode desencriptar q e finalmente ter o valor de ε*
* Alice envia ε* para Bob, ele [:en:Blinding_(cryptography)|"desbloqueia"]] o valor de ε*, tendo como resultado ε
* Bob então entrega ε para o tumbler e recebe 1 BTC por ter resolvido o quebra-cabeças
Um problema relacionado ao quebra-cabeças RSA é que nesse ambiente o tumbler poderia simplesmente, ao invés de mandar uma chave válida para Alice ou Bob, jogar sujo e mandar valores de (z,c,q,y) errados, Alice então teria pago por uma resposta errada e o tumbler ficaria com seu dinheiro sem precisar entregar ele para Bob. A maneira que o Tumblebit resolve esse problema é aplicar dois protocolos, o protocolo "Puzzle promise protocol", que é responsável por convencer Bob de que os valores que ele recebeu são válidos, e o "Puzzle solver protocol", que é responsável por convencer Alice de que os valores recebidos por ela são válidos.

#### Fases do Tumblebit

O protocolo Tumblebit pode ser utilizado de duas formas, cada uma tendo um funcionamento totalmente diferente

##### Como um tumbler comum

Antes de demonstrar o funcionamento é necessário definir alguns parâmetros:
* Cada pagador faz apenas um pagamento
* Cada recebedor aceita apenas um pagamento
* O número de pagadores é igual ao de recebedores
* O par de pagador e recebedor funciona como um único usuário
O funcionamento se dá a seguir:
* O tumbler recebe as transações de cada pagador
* É feita a mixagem dos valores recebidos
* Em cerca de 20 minutos os pagamentos são efetuados pelo tumbler e os recebedores recebem as quantias especificadas pelos pagadores

##### Como um hub de pagamento

* Fase de compromisso, onde todos os canais de pagamento são configurados e cada Bob recebe um número de quebra-cabeças, de acordo com a quantia que eles devem receber
* Fase de pagamento, onde cada Alice paga 1 BTC por cada resposta do quebra-cabeças
* Fase de retirada, permite que cada Bob possa retirar 1 BTC por quebra-cabeças resolvido

## Vantagens

* Tumblebit não é suscetível ao ataque da sibila, pois não requer coordenação entre seus usuários.
* O protocolo Tumblebit, quando utilizado como um tumbler comum, também não é suscetível a ataques DOS como outros tumblers são, como CoinShuffle e CoinShuffle++.
* Ao operar fora da Blockchain, o protocolo permite que as transações sejam confirmadas em questão de segundos, ao invés da média de 10 minutos característica do Bitcoin
* Permite ao usuário se manter anônimo ao realizar transações Bitcoin comuns

## Desvantagens

* É necessário que exista um servidor central para que ele possa ser implementado no nível de protocolo, fazendo com que uma falha nesse servidor possa gerar uma discrepância nos dados do Tumblebit e da Blockchain.
* Como todo sistema no estilo eCash, é necessário uma entidade que centralize as transações, acabando com a descentralização do modelo

## Potenciais aplicações

É possível implementar o protocolo em qualquer aplicação envolvendo uso de bitcoins, pois não é necessário fazer nenhuma mudança no Bitcoin em si, já que Tumblebit funciona com sua versão atual. Algumas aplicações como o aumento de privacidade da Lightning_Network também estão sendo sondadas

### Aplicações

* Breeze Wallet é uma carteira Bitcoin, desenvolvida pela startup Stratis que promete aplicar o protocolo Tumblebit para anonimizar seus usuários.
* Hidden wallet é uma carteira Bitcoin criada pelos desenvolvedores do Tumblebit

## Impacto social

O Bitcoin é uma moeda de transparência total, é possível, através de uma planilha imutável e altamente replicada chamada blockchain, saber exatamente o valor transferido por cada transação, além de quem enviou e quem recebeu esse dinheiro. Isso pode afastar empreendimentos que gostariam de utilizar bitcoins mas não querem divulgar suas vendas através da blockchain, além de apresentar problemas para seus usuários que podem ser alvo de monitoramentos sobre suas transações realizados por empresas que queiram se beneficiar dessa informação.
Porém, garantir o anonimato em transações pode não ser em sua totalidade benéfico, já que esse anonimato também garantiria que criminosos utilizando bitcoins como forma de pagamento nunca pudessem ser rastreados através das transações guardadas na blockchain, tornando impossível , somente através do histórico de transações, descobrir a identidade do infrator.

## Outras alternativas

Existem outras alternativas criadas para tentar manter as transações bitcoin anônimas, algumas não precisam de ferramentas externas, como alterar o endereço para cada transação, de forma que complique um pouco a rastreabilidade, porém essas técnicas não são totalmente confiáveis por serem apenas paliativos. Técnicas mais complexas como tumblers, ou mixers, envolvem a necessidade de centralizar a forma com que as transações são feitas, aplicações como CoinMixer, BITMIXER.IO. Esses serviços são úteis porém requerem que o usuário confie que eles efetuarão a transação corretamente, além do mais esse tipo de serviço pode sofrer ataques do tipo DOS. Algumas aplicações foram desenvolvidas, além do Tumblebit, com o intuito de manter a rede descentralizada, mas também garantir outras funcionalidades, como a Zcash e a Monero.

### Zcash

A Zcash foi criada com o intuito de anonimizar seus usuários utilizando uma prova de conhecimento zero chamada zn-SNARK, essa zn-SNARK monta uma prova matemática que permite eliminar a necessidade de uma terceira entidade na transferência, e com isso manter a descentralização da moeda.

### Monero

A criptomoeda Monero, criada em 2014 tem como foco a anonimidade, descentralização e escalabilidade. Utilizando o protocolo CryptoNote ela permite que seus clientes se mantenham anônimos em sua rede, além de utilizar prova de trabalho para validar suas transações, mantendo a rede descentralizada.