Sousa, Simão Patricio Melo dePascoal, José Carlos Ferrão2020-03-182020-03-182019-11-132019-09-16http://hdl.handle.net/10400.6/10054É devido á tecnologia de blockchain apresentada pela Bitcoin que é possível criar moedas digitais geridas pelos seus utilizadores e não por uma entidade central (como bancos ou governos). As criptomoedas oferecem mais uma forma de pagamento, as quais se destacam por não existir a necessidade de confiar em instituições mas sim no sistema, e em mais algumas características, como o pseudo-anonimato. Para evitar que as moedas sejam gastas mais do que uma vez em várias transações (double spending), as transações têm de ser anunciadas publicamente para que todos as possam verificar e concordar apenas com um único histórico de transações. O sistema tradicional bancário alcança um nível de privacidade ao limitar o acesso às trasações. Um participante apenas tem acesso à suas transações enquanto que o banco tem acesso a todas. Como todas as transações são publicas, a privacidade numa blockchain depende apenas da propriedade do pseudo-anonimato. O público apenas consegue observar que um endereço enviou moedas a outro, não revelando informações sobre qualquer entidade. Mas caso sejam transacionadas moedas, a entidade que as vai receber necessita de anunciar um dos seus endereços. Desta forma, o remetente da transacção consegue estabelecer uma ligação entre o endereço anunciado e a entidade, e a partir daí pode descobrir outros endereços da entidade e quantas moedas possuí nos endereços descobertos. Através de provas de conhecimento nulo é possível alcançar uma maior privacidade nas criptomoedas. É o caso das Bulletproofs, as quais permitem realizar de uma forma mais eficiente confidential transactions. Numa confidential transaction, a quantidade transferida é “escondida” através de Pedersen Commitments, os quais mantêm a propriedade algébrica da soma. Assim é possível verificar que a quantidade de moedas como input e output de uma transação estão equilibradas. É também necessário verificar que um Pedersen Commitments de um valor está em um determinado intervalo para prevenir valores negativos ou overflows. Para tal é necessário uma range proof. As Bulletproofs permitem range proofs mais eficientes, as quais apenas crescem logaritmicamente com o tamanho do intervalo e o número de outputs. Então é preferível ter múltiplos outputs numa única range proof. Esta característica permite o CoinJoin (múltiplos outputs de várias transações em apenas uma transação), melhorando a privacidade.It’s because of the blockchain technology presented by Bitcoin that it’s possible to create digital currencies (cryptocurrencies) managed by its users and not by a central entity (such as banks or governments). These type of coins gives another form of payment, which stands out because there is no need to rely on institutions but only in the system, and some other features, such as pseudo-anonymity. To prevent the currencies from being spent more than once on multiple transactions (double spending), the transactions must be publicly announced, in this way, everyone can verify and agree on only one transaction history. The traditional banking system achieves a level of privacy by limiting access to transactions. A participant only has access to their transactions while the bank has access to all of them. Since all transactions are public, privacy in a blockchain depends only on the property of pseudo-anonymity. The public can only observe that one address sent currencies to another, not revealing information about any entity. But in a transaction, the recipient needs to announce one of their addresses. In this way, the sender of the transaction can establish a connection between the announced address and the entity, and from there can discover other entity addresses and how many currencies it has in the discovered addresses. Through zero-knowledge proofs, it’s possible to achieve greater privacy in cryptocurrencies. The Bulletproofs are zero-knowledge proofs which allow efficient confidential transactions. In a confidential transaction, the amount transferred is “hidden” through Pedersen Commitments, which maintain the algebraic property of the sum. So it’s possible to verify that the number of currencies as input and output of a transaction are balanced. But it’s also necessary to verify that a Pedersen Commitments of one value is in a certain range to prevent negative values or overflows. For this, it requires a range proof. Bulletproofs enable more efficient range proofs, which only grow logarithmically with the range size and the number of outputs. So it’s better to have multiple outputs in a single range proof. This feature allows CoinJoin (multiple outputs of multiple transactions in one transaction), improving privacy.porBlockchainBulletproofsCoinjoinConfidential TransactionsCriptomoedasPedersen CommitmentsPrivacidadeProvas de Conhecimento NuloPseudo-AnonimatoRange ProofsImplementação Funcional de Bulletproofsmaster thesis202375501