Bem vindo! Novo em Zcash?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with monthly highlights on ecosystem growth, network development and how to get started with Zcash!

Idioma

BOLT: Canais Privados de Pagamento

Ian Miers | Aug 01, 2016

Matthew Green e eu escrevemos um artigo que introduz BOLT (Blind Off-chain Lightweight Transactions), que oferece uma resposta rápida, o protocolo de canal de pagamento privado inspirado pela Lightning Network. Acreditamos que isso vai tornar Zcash mais escalável e prático, mantendo suas proteções de privacidade fortes.

TL;DR: Usando BOLT, vários pagamentos no mesmo canal não podem ser ligados entre si, mesmo por se terem concertado partes. Os pagamentos ocorrem em milésimos de segundos e não requerem confirmação bloco. Todos os comerciantes aprende é que ele está sendo pago em algum canal que tem aberto. Os pagamentos podem ser encaminhadas através de terceiros, evitando a necessidade de um cliente e comerciante ter diretamente um canal, mantendo a privacidade em relação a terceiros mal-intencionados, ambos mantendo os participantes anônimos (mesmo se o terceiro conspire), e escondendo o valor transferido. Tudo isto requer que o canal seja financiado com fundos privados, caso contrário, as partes maliciosas poderiam violar a sua privacidade, forçando o fechamento do canal. A pré-impressão do paper pode ser encontrada em http://eprint.iacr.org/2016/701.

O Problema

Criptomoedas baseadas em blockchain-based trabalham gravando todas as transações em um blockchain público. Isto tem a vantagem de eliminar a necessidade de as partes confiáveis​​. Mas tem graves problemas de privacidade, escalabilidade e de latência, porque você está gravando todas as transações em um blockchain público. Você precisa do espaço para registrar todas as transações na blockchain (veja todo o debate sobre tamanho do bloco de Bitcoin), registrar a transação em um bloco leva alguns minutos, e claro, a gravação é pública e as pessoas podem descobrir muito sobre o que você está fazendo .

Canais de Pagamento

Protocolos de canal de pagamento, tais como a Lightning Network, enfrentam a escala e os problemas de latência, utilizando o blockchain apenas para escrow de fundos e resolução de disputas. Fora isso, os usuários trocam o que são essencialmente IOUs, que não são gravados no blockchain a menos que haja uma disputa imposta no blockchain.

Como é que isso funciona? Alice e Bob ambos concordam em um inicial IOU de fundos, eles colocam no canal (por exemplo, cada um deles colocado em US$ 50 e o IOU é Alice: US$ 50, Bob: US$ 50). Este dinheiro é mantido sob custódia na blockchain e lançado apenas por um IOU válido assinado por Alice e Bob. Para Alice pagar Bob US$ 5, ela destrói sua antiga IOU, e ela e Bob assinam um novo IOU "Alice: US$ 45, Bob:. $55" Eles podem fazer isso repetidamente até que qualquer das partes queira sacar. Neste ponto, Alice ou Bob pode postar a última IOU no blockchain (ou ambos podem publicar, em caso de uma disputa). Assim, apenas a abertura do canal e fechamento são gravadas no blockchain.

Canais não são privados

Abertura e fechamento de um canal deixa um registro de identificação do cliente, do comerciante, e o desdobramento inicial e final dos fundos, estas são muitas vezes as mesmas coisas que devem ser escondidas.

Suponha Tor (ou outro serviço de anonimato) levou micropagamentos para pagar por banda larga. Efetivamente, a cada visita na página Alice via Tor exigiria um micropagamento através de um canal de pagamento, vamos dizer que uma visualização seja um décimo de centavo. Podemos ver que Alice tem um canal de pagamento com Tor por US$ 1,00 que fecha com um saldo zero cada mês, então nós sabemos que ela é um usuário hardcore do Tor. Se Alice é um ativista ou um jornalista, isso pode levá-la à atenção das autoridades como alguém que tem "algo a esconder", mesmo se ela tem o cuidado de usar apenas Tor nas lojas de café ou semelhantes. E Se Alice vive em, por exemplo, Turquia, que poderia ser uma idéia muito ruim.

Felizmente, este é exatamente o tipo de problema que Zcash foi projetado para resolver. Usando Zcash em vez de um livro razão com tudo transparente como Bitcoin ou Ethereum, o blockchain não contém mais informações ligando abertura e fechamento do canal de volta para Alice. Mas Zcash só lida privacidade para pagamentos on-chain; não lida com o IOUs .

O problema é que esses IOUs formam um identificador único, que pode ser usado para controlar tanto a Alice como um biscoito. Qualquer um que os observa (por exemplo, o node de saída do Tor) não vai a priori saber a quem é o identificador pertence - sua identidade real ainda é protegida pelo anonimato serviço, mas eles ainda podem observar page views e padrões porque vários pagamentos em um canal de pagamento são inerentemente passíveis de ligação. Isso pode ser suficiente para identificar inequivocamente Alice (por exemplo, se ela olha para documentos relacionados com artigos de jornal que ela escreveu), ou pode revelar outras informações semelhantes que assunto ela está escrevendo um artigo. Assim Zcash é parte da solução, mas a própria Zcash não faz um canal privado de pagamento.

BOLT: Canais Privados de Pagamento

BOLT, que Matt e eu tenho trabalhado para os últimos meses. BOLT elimina a ligação entre os pagamentos dentro de um canal. Isso garante que os pagamentos de Alice estão escondidos dentro do conjunto de todos os pagamentos feitas para o destinatário.

Nós projetamos dois protocolos, um que é não-interativo, mas apenas permite o pagamento de Alice para Bob de valores fixos e que permite pagamentos bidirecionais de valores arbitrários, mas requer interação. Vamos nos concentrar no protocolo bidirecional aqui.

A ideia básica do protocolo é a construção de IOUs privadas. Fazemos isso usando duas peças de tecnologia: assinaturas cegas e compromissos. Compromissos permite que Alice oculte o valor do IOU (que pode identificá-la). Assinaturas cegas convencem à Bob que o IOU é autêntico - porque ele deve ter assinado isso - mas garantir que ele não possa reconhecer a assinatura ou IOU especificamente fora de qualquer do conjunto de IOUs ele assinou.

BOLT Diagrama

Alice paga Bob provando que ela tem como um IOU, invalidando -o (assinando-a com a chave de revogação) e levando o Bob para assinar um novo IOU com um equilíbrio que é o mesmo que o antigo deduzido o montante do pagamento. Da mesma forma, quando Bob, Alice paga o valor que é adicionado ao novo IOU. O saldo real e assinatura permanece escondido de Bob, garantindo que ele não pode dizer se dois pagamentos distintos veio do mesmo canal ou diferentes.

O verdadeiro desafio é invalidar o velho IOU e assinar o novo atomicamente. E — esta é a parte — difícil de fazer sem vazamento no qual canal Alice está usando. Se Alice invalida o antigo IOU primeiro lugar, e Bob se recusar a assinar o novo IOU, Alice não pode fechar o canal para que ela perde seu dinheiro. Se Bob assina o novo IOU antes que o antigo é invalidado, então Alice pode defraudar Bob: Ela pode, então, assumir o novo IOU Bob assinado e usá-lo para uma série de pagamentos, mas, em seguida, sacar o IOU original mantendo todo o seu dinheiro. Em canais de pagamento normais, isso não pode acontecer, porque Bob vai reconhecer pagamentos fraudulentos posteriores de Alice. Fazê-lo para os canais privados, no entanto, é impossível.

BOLT Diagrama

Para resolver isso, nós separamos o processo de geração de IOUs para fechamento de canal de permitir que o IOUs a ser usado para operações futuras. Um IOU é um compromisso tanto para o equilíbrio e uma chave pública de uso único, chamada de chave de revogação. Assumimos Alice tem uma existente (às cegas) assinado IOU de estabelecimento de canal. ① Alice primeiro cria uma nova IOU e prova que paga Bob US$ 5 mais do que alguns IOU Bob assinado anteriormente. ② Alice, em seguida, comprovadamente revela a chave pública de revogação da antiga IOU e recebe ③ Bob assinar o novo IOU para o fechamento (depois, claro, provando o novo IOU é formado corretamente no que diz respeito à antiga). ④ Em seguida, ela assina uma mensagem para invalidar o velho IOU com a chave de revogação e dá a mensagem + assinatura para Bob. Isto é seguro, porque agora ela pode fechar o canal com o novo IOU não importa o que acontece. ⑤ Depois de garantir que o antigo IOU foi revogado, Bob agora assina o novo IOU como válido para uso no próximo pagamento. Isto é seguro porque o velho IOU é inválido e, portanto, Bob é assegurada por Alice que nunca pode voltar a um estado antigo, onde ela tem mais dinheiro. Alice pode agora usar o novo IOU no próximo pagamento BOLT.

Da perspectiva de Bob, ele sabe que ele tem recebido um pagamento (de US$ 5 neste exemplo) em um de seus canais de pagamento (ou melhor, ele vai receber US$ 5, mas quando esse canal de pagamento estiver fechado), mas ele não sabe qual canal de pagamento foi realmente utilizado para o pagamento: nós temos escondido o real IOU, o seu equilíbrio, e assinatura de Bob sobre ele a partir dele e estas são as únicas maneiras que ele poderia identificar o canal.

A parte interessante é tudo isso é simples, rápido, e usa a criptografia que já está muito bem compreendida. Um protótipo deverá lançado em breve, mas acreditamos que vai demorar menos de 50 ms e 10 MB de memória para executar este protocolo.

Canais de Pagamento Indireto

Até agora, precisamos de Alice e Bob para ter um canal de pagamento. Mas e se não precisássemos?

Como Lightning, BOLT permite pagamentos quando não há nenhum canal direto entre as partes, desde que eles compartilhem um intermediário (por exemplo Coinbase). Fazemos isso através de utilização dos IOUs para o fechamento do canal condicional nas outras transações passando. Ao contrário de Lightning, num único intermediário não conhece nem os participantes envolvidos nem o montante transferido. Para fazer isso, é crucial que os próprios canais são financiados anonimamente, como o terceiro partido pode abortar e observar quem fechou o seu canal. Se o próprio canal é anônimo, essa informação é inútil.

É provável que podemos generalizar pagamentos BOLT indiretos para pagamentos através de múltiplos intermediários, como no Lightning, mas no momento BOLT não pode fazê-lo.

Pode BOLT trabalhar sem Zcash?

Podemos configurar BOLT para trabalhar com a maioria das criptomoedas fornecidas, nós podemos adicionar as primitivas. Podemos até ser capaz de fazer isso sem qualquer alteração de Bitcoin, embora à custa da utilização de compromissos à base de hash e e computação genérica baseada em circuito multi-party (MPC) para assinatura às cegas com ECDSA. Mas qualquer privacidade real fornecida por BOLT depende fundamentalmente do estabelecimento de canal e fechamento anônimo.

No Bitcoin, o financiamento de um canal não é particular: há um registro de quem você abriu o canal com a quantidade, e para quem foi fechado. BOLT sozinho não resolve este problema, que só faz os pagamentos no mesmo canal não linkados uns aos outros. Pior ainda, se um comerciante ou terceiros pode forçar um aborto no protocolo de BOLT, em seguida, eles podem identificar qual o canal que você está usando. Eles só podem fazer isso uma vez, por isso vários pagamentos no mesmo canal não pode ser ligada, mas se você não abrir o canal anonimamente, então que (abortado) o pagamento pode ser ligada a você.

Para evitar isso, você precisa de fundos anônimos para criar o canal, com efeito os requisitos de privacidade para o financiamento de um canal são tão elevados como os relativos aos pagamentos normais. Então se você quer uma forte privacidade como você faria para pagamentos normais e Zcash é a melhor maneira de obter fundos fortemente privadas.

Eu gostaria de agradecer a Sean Bowe, um dos desenvolvedores Zcash, por sugerir a ideia de combinar Lightning e Zerocash. E Sean, Maureen, Matthew, Daira, Jack, e o leopardo anônimo pelos comentários sobre este post .