<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://anneouyang.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://anneouyang.com/" rel="alternate" type="text/html" /><updated>2025-11-26T20:43:05+00:00</updated><id>https://anneouyang.com/feed.xml</id><title type="html">Anne Ouyang</title><subtitle></subtitle><author><name>Anne Ouyang</name></author><entry><title type="html">Hidden Blog Test Post 1</title><link href="https://anneouyang.com/encrypted/hidden-blog-test-post.html" rel="alternate" type="text/html" title="Hidden Blog Test Post 1" /><published>2022-06-24T00:00:00+00:00</published><updated>2022-06-24T00:00:00+00:00</updated><id>https://anneouyang.com/encrypted/hidden-blog-test-post</id><content type="html" xml:base="https://anneouyang.com/encrypted/hidden-blog-test-post.html"><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pretium tincidunt odio. Nunc in gravida ex. Nunc in venenatis leo. Etiam molestie viverra vehicula. Ut ultricies mauris non vestibulum aliquam. Curabitur consectetur ligula vitae urna consequat sagittis. Phasellus eu lacus ligula. Donec ultricies massa dapibus semper suscipit. Integer ornare tellus ac sem viverra, eget dictum ante congue. Phasellus tincidunt congue ultricies. Nulla nunc arcu, tristique ut semper et, interdum eu nisi. Phasellus auctor magna a nulla accumsan, et elementum libero consectetur. Donec cursus erat dapibus ipsum porta semper. Sed eu pulvinar elit. Sed consequat accumsan orci a commodo. Aliquam sit amet molestie est, eget sollicitudin felis.</p>

<p>Donec elementum justo quis mollis aliquam. In nec velit ultricies, hendrerit nulla ac, volutpat magna. Quisque ac efficitur magna, laoreet pretium est. Ut eu mauris odio. Pellentesque malesuada augue velit, non semper sapien finibus at. Sed finibus iaculis massa. Morbi nec elementum massa. Aenean eu feugiat leo, vel commodo purus. Quisque eu suscipit nisi, sed lacinia augue. Proin iaculis, dolor in eleifend pulvinar, est quam euismod eros, ut rhoncus diam nisi eu ipsum. Proin vel ante est. Nullam nibh metus, tristique non scelerisque et, efficitur et massa. Mauris euismod nisl vel aliquet vestibulum. Ut massa nibh, luctus at gravida nec, malesuada ac elit.</p>

<p>Ut pellentesque sem id nunc fermentum malesuada. Nulla vel metus nibh. Sed quis lorem eget augue gravida molestie molestie ut felis. Duis a nisl in eros vestibulum tempor. Cras fringilla euismod turpis sed sollicitudin. Sed diam elit, iaculis vitae pellentesque id, efficitur a ipsum. Aenean sagittis nibh rutrum semper tincidunt. Integer cursus accumsan elit vitae molestie. Nunc ac nisi ut nisi cursus molestie vitae quis metus. Fusce faucibus tellus eros, eu ultrices tortor egestas ac. Vestibulum sit amet convallis sapien. Ut pulvinar vestibulum interdum. Fusce id sapien tempus, posuere felis sit amet, tincidunt eros.</p>

<p>Cras tempor, turpis nec eleifend viverra, ex est convallis sapien, sit amet accumsan nisi sapien porttitor nulla. Donec et cursus arcu, at feugiat risus. Sed ac accumsan diam, quis semper lorem. Morbi eros arcu, feugiat ac viverra et, lacinia ut felis. Aliquam tortor libero, bibendum ut consequat nec, ultricies in mauris. Donec mollis mauris vitae turpis congue bibendum. Phasellus erat nunc, faucibus a libero et, dictum tincidunt tellus. Phasellus consequat vestibulum purus, accumsan aliquam dui dictum suscipit. Integer tincidunt, nunc quis ullamcorper facilisis, purus justo commodo eros, eu rutrum augue eros ut mauris. Nam pharetra velit sit amet nulla suscipit, nec tempor nisi euismod. Nunc rhoncus gravida est, nec finibus elit finibus in.</p>

<p>Integer cursus sollicitudin ligula a ornare. Morbi sollicitudin congue ipsum, maximus mollis velit finibus eu. In tellus ligula, euismod mollis ultricies in, egestas eget nisi. Proin maximus nunc euismod mattis ullamcorper. Aliquam convallis ullamcorper tortor, et ullamcorper erat cursus non. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Fusce scelerisque velit in neque tincidunt, ac efficitur mauris suscipit.</p>]]></content><author><name>Anne Ouyang</name></author><category term="encrypted" /><summary type="html"><![CDATA[Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pretium tincidunt odio. Nunc in gravida ex. Nunc in venenatis leo. Etiam molestie viverra vehicula. Ut ultricies mauris non vestibulum aliquam. Curabitur consectetur ligula vitae urna consequat sagittis. Phasellus eu lacus ligula. Donec ultricies massa dapibus semper suscipit. Integer ornare tellus ac sem viverra, eget dictum ante congue. Phasellus tincidunt congue ultricies. Nulla nunc arcu, tristique ut semper et, interdum eu nisi. Phasellus auctor magna a nulla accumsan, et elementum libero consectetur. Donec cursus erat dapibus ipsum porta semper. Sed eu pulvinar elit. Sed consequat accumsan orci a commodo. Aliquam sit amet molestie est, eget sollicitudin felis.]]></summary></entry><entry><title type="html">Provisions: Privacy-Preserving Proofs of Solvency for Bitcoin Exchanges Paper Overview</title><link href="https://anneouyang.com/provisions-proof-of-solvency-paper-overview.html" rel="alternate" type="text/html" title="Provisions: Privacy-Preserving Proofs of Solvency for Bitcoin Exchanges Paper Overview" /><published>2020-05-28T00:00:00+00:00</published><updated>2020-05-28T00:00:00+00:00</updated><id>https://anneouyang.com/provisions-proof-of-solvency-paper-overview</id><content type="html" xml:base="https://anneouyang.com/provisions-proof-of-solvency-paper-overview.html"><![CDATA[<p>Managing cryptographic keys can be difficult for users who hold digital assets, so exchanges are often used for an user experience similar to banking. Solvency is one factor in assessing an exchange’s credibility – users can determine whether the exchange’s assets can cover its liabilities. <a href="http://www.jbonneau.com/doc/DBBCB15-CCS-provisions.pdf">Provisions</a> is a privacy-preserving proof of solvency which proves that the total amount of users’ assets is less than the exchanges reserves without revealing information about the customer’s holdings, the total value of the exchange’s holdings, and eliminates the possibility of collusion among different exchanges.</p>

<p><em>Provisions</em> consists of three main protocols:</p>

<ol>
  <li><strong>Proof of assets</strong>: The exchange assembles a set of public keys and yields a Pedersen commitment to each public key in the set, and a homomorphic addition yields a commitment to its total assets. Through an interactive zero-knowledge proof, the prover convinces the verifier that for \(i \in [1, n]\) when \(s_i = 1\), the exchange knows the private key \(\hat x_i \in \mathbb{Z}_q\) such that \(g^{\hat x_i} = y_i\). The proof is an honest-verifier zero-knowledge and can be made non-interactive using the Fiat-Shamir heuristic. The verifier then computes \(\Pi_{i=1}^{n} p^i\) to ensure that the sum of the balances is equal to the committed value without knowing which public keys the exchange has the corresponding private keys to. This proof size is linear in the size of the anonymity set \(n\).</li>
  <li><strong>Proof of liabilities</strong>: Every customer should have an entry in a clash-attack-resistant list of liabilities, and the apparent liabilities of the exchange should be greater than or equal to its actual total liabilities. To ensure that there are no negative numbers, the sum of the total liabilities should not exceed the order \(q = 2^{256}\) of the group \(G = secp256k1\). A range proof that proves the account balance is at most 51-bits long by a bitwise commitment is used to enforce this. A fresh identifier (a commit to the username) is generated for each customer by applying a collision-resistant hash function to the concatenation of the username and a random nonce. A customer can check that its entry is included in <em>Liablist</em> with the correct balance, and a public auditor will verify all commits for all users. The proof size is linear in the number of customers \(c\).</li>
  <li><strong>Proof of solvency</strong>: A difference between assets and liabilities is computer homomorphically from the two protocols above. If \(Z_{\text{assets} - \text{liabilities}}\) is a commitment to 0, the proof is a simple Schnorr ZK proof of knowledge of \(k\) where \(Z_{\text{assets} - \text{liabilities}} = g^0h^k\). If fractional reserve banking is used, a modified balance can be used in place of the true balance.</li>
</ol>

<p>To prevent cabals of insolvent exchanges from colluding, a list \(L\) of the public keys but computed using the base \(w\) instead of \(g\) is published, and auditors can check if the lists of different exchanges are disjoint ignoring the identity element. The correctness of \(L\)’s construction is proved through a Neff-like ZKP.</p>

<p>To ensure that different anonymity sets between audits do not leak information regarding the exchange’s holdings, the different sets used should be similar and grow over time with new addresses.</p>

<p>If the exchange chooses to fraudulently omit some liabilities, assuming the exchange has \(U\) users and \(F\) entries and a random subset \(A \subset U\) users perform audits, the probability of not being caught is \(\frac{U-F \choose A}{U \choose A}\), which is upper-bounded by \(min[(1 - \frac{A}{U})^F, (1 - \frac{F}{U})^A]\).</p>

<p>The inherent limitation of this work is that a proof of solvency does not guarantee honest behavior in the future; nevertheless, frequent monitoring of the financial health of exchanges can help mitigate losses through early detections.</p>

<p>Some future work includes:</p>

<ul>
  <li>Extending <em>provisions</em> to support proof of ownership of unused pay-to-pub-key hash, unused pay-to-script-hash address, or multisig addresses through using zk-SNARKS</li>
  <li>Developing and analyzing a heuristic for forming an anonymity set</li>
  <li>Designing a proof-of-assets protocol that is compatible with HSMs that only perform complete ECDSA signatures and do not support an isolated addition with the key</li>
  <li>Taking into account the age of each UTXO to allow exchanges to demonstrate stability</li>
</ul>]]></content><author><name>Anne Ouyang</name></author><summary type="html"><![CDATA[Managing cryptographic keys can be difficult for users who hold digital assets, so exchanges are often used for an user experience similar to banking. Solvency is one factor in assessing an exchange’s credibility – users can determine whether the exchange’s assets can cover its liabilities. Provisions is a privacy-preserving proof of solvency which proves that the total amount of users’ assets is less than the exchanges reserves without revealing information about the customer’s holdings, the total value of the exchange’s holdings, and eliminates the possibility of collusion among different exchanges.]]></summary></entry><entry><title type="html">IPFS P2P File Sharing System Whitepaper Overview</title><link href="https://anneouyang.com/ipfs-whitepaper-overview.html" rel="alternate" type="text/html" title="IPFS P2P File Sharing System Whitepaper Overview" /><published>2020-05-24T00:00:00+00:00</published><updated>2020-05-24T00:00:00+00:00</updated><id>https://anneouyang.com/ipfs-whitepaper-overview</id><content type="html" xml:base="https://anneouyang.com/ipfs-whitepaper-overview.html"><![CDATA[<p>The <a href="https://ipfs.io/">InterPlanetary File System (IPFS)</a> is a peer-to-peer network of a distributed file system (whitepaper <a href="https://github.com/ipfs/ipfs/blob/master/papers/ipfs-cap2pfs/ipfs-p2p-file-system.pdf">here</a>). The nodes in this network store a generated public-private key pair and are identified by the cryptographic hashes of their public keys. IPFS can be used on overlay networks to provide features such as integrity, reliability, and authenticity even if the underlying network doesn’t support them. Similar to BitTorrent, IPFS uses a distributed hashing table for addressing peers and finding peers who have particular objects.</p>

<p>Data distribution happens by exchanging blocks via the <a href="https://github.com/ipfs/go-bitswap/blob/master/docs/how-bitswap-works.md">BitSwap Protocol</a> inspired by BitTorrent; however, the BitSwap protocol enables nodes to acquire any blocks they need rather than being limited to the ones in a single torrent. BitSwap operates as a barter system where nodes have a “have list” and a “want list” which they need to “work” for. To prevent leeches, the probability of a node sending to a debtor node decreases and the debt increases. In practice, a sigmoid function can be used: 
\(P(\text{send} | r) = 1 - \frac{1}{1+e^{(6-3r)}}\), where \(r\) is the debt ratio and defined as \(\frac{\text{bytes_sent}}{\text{bytes_received+1}}\).</p>

<p>The protocol happens in several stages for a successful exchange,  including sharing ledgers, sharing want lists, sending blocks, and closing the connection.</p>

<p>Data is stored in a Merkle DAG structure that enables content addressing, tamper resistance, and deduplication. The object model of IPFS is similar to that of Git’s, so version control tools can be available to IPFS users. IPFS objects can be traversed with a string path API and the lookup performance can be improved by caching or flattening trees.</p>

<p>The Merkle DAG contains permanent objects and IPNS enables mutable pointers to the Merkle DAG. Mutable, self-certified names can be constructed in a cryptographically assigned global namespace. IPNS is not inherently human-friendly, and this issue can be mitigated through solutions such as peer links, name shortening, pronounceable identifiers, and DNS TXT records.</p>

<p>IPFS offers benefits such as being DDoS-resistant, being censorship-resistant, saving bandwidth, preventing hotspots from becoming bottlenecks, and making content permanent.</p>

<p>The paper does not seem to address security issues related to IPFS. Based on the design of IPFS, anyone with the hash of a file can acquire the contents of the file. There’s currently no mechanism for managing file permissions, and it is up to the user to encrypt confidential files themselves. Deduplication and encryption can be conflicting goals. On the other hand, an opposite problem can be content discovery and indexing content without knowing hashes, which can make it difficult to build a search engine.</p>

<p>Another challenge of IPFS is serving dynamic websites. It seems that IPFS is better suited for transferring static files rather than supporting real time interactive applications.</p>

<p>In addition, IPFS is only useful when users actually participate in the network. Currently, to incentivize adoption, <a href="https://filecoin.io/">filecoin</a> can be earned by users hosting files, and it seems to be a more environment-friendly mining mechanism than the proof of work mechanism used by Bitcoin.</p>]]></content><author><name>Anne Ouyang</name></author><summary type="html"><![CDATA[The InterPlanetary File System (IPFS) is a peer-to-peer network of a distributed file system (whitepaper here). The nodes in this network store a generated public-private key pair and are identified by the cryptographic hashes of their public keys. IPFS can be used on overlay networks to provide features such as integrity, reliability, and authenticity even if the underlying network doesn’t support them. Similar to BitTorrent, IPFS uses a distributed hashing table for addressing peers and finding peers who have particular objects.]]></summary></entry></feed>