Inhaltsverzeichnis

PPCryptoCur Exam 2020-10-21

In case I still haven't uploaded my own summary of PPCryptoCur, please write a PM to me

Meta Information

Exam

This braindump is not exhaustive, I definitely forgot some questions from the exam.

Abbreviations: BTC = Bitcoin, ROM = random oracle model, TS = Trusted Setup, TSA = Trusted Setup Assumption, TTP = Trusted Thirdparty, ZKP = zero-knowledge proof

RingCT. In contrast to BTC, it provides three main advantages: (i) ring signatures, (ii) stealth addresses, (iii) hidden amounts. I elaborated on every point with at least 3-4 sentences saying how it's *not* (or badly) done in BTC and with what consequences and how it's done in RingCT. Roughly:

* ad (i): in BTC a TX with exactly 10 senders contains exactly those 10 senders in plaintext. In RingCT, you can provide 100 putative senders, of which, say, 90 are just „decoy“ senders. And no outsider can discern the actual senders from the decoy ones.

* ad (ii): in BTC, if you want someone to pay you, you have to publish your BTC address. The same holds true if you want to run, say, a donation campaign. Then, on the blockchain everyone can see who donated to you, and that's bad. Hence, it's recommended to always freshly generate receival addresses, but that's impossible with donation campaigns. Hence, RingCT offloads that fresh generation thing onto the sender via stealth addresses.

* ad (iii): in BTC, transferred amounts are public. In RingCT, they are hidden.
I elaborated on blockchain deanonymization and link analysis. I detailled how it's even worse than the traditional banking system: in BTC the blockchain is fully public, permament (non-redactable), and analyzable even by cheap hardware.
(i) if you buy at a real store with a BTC address, a link to a real identity will appear, and (ii) real identities of some addresses are publicly known (e.g. for organizations running donation campaigns such as WikiLeaks)
Use mixing services. Either centralized (centralized mixer, TumbleBit) or decentralized ones (CoinJoin, CoinShuffle). Centralized mixers [note: this does *not* include TumbleBit] inherently need to be a TTP, can steal your coins and/or leak your identity. Decrentralized ones build upon peer-to-peer protocols. But in CoinJoin all participants still learn about the input/output address pair mapping. At least no coins can be stolen anymore thanks to how BTC transactions work and how transaction inputs need to be signed. Or use a currency that was made with privacy-preservation in mind, e.g. RingCT.
Indeed, DoS is a problem found in all privacy-preserving techniques that require active participation by others. By contrast, in ZeroCoin, RingCT, and ZeroCash such participation by others is not required and you can choose your anonymity set yourself.
In the decentral protocols, there is no much you can do to avoid DoS. Certainly you can stop interacting with specific BTC addresses. But then, their users just generate tons of fresh ones. Certainly you can stop interacting with specific IP addresses. But then, they might as well possess a botnet with tons of different IP addresses.
With SKAccGen you create `(msk, mpk)` and from `mpk` senders can derive a `pk`. If senders do that honestly, `pk` cannot be linked back to `mpk`. But if you possess the `msk`, you can scan the blockchain and for matching `pk`s (that have been derived from `mpk`), you can derive the corresponding `sk` to have the money at your disposal.
No, that's where tags come in. I wrote down the interface of the RingCT Spend algorithm and that the transaction built later on contains tags. Miners can just check for duplicate tags to prevent double spending.
In the RingCT construction, amounts aren't returned by `OTAccGen`, but rather commitments to it. They bind the amounts, yet hide them at the same time.
It's like writing something on a piece of paper and putting it upside down on a table and later flipping (revealing) it. The revealed value must not be different than the initial value I wrote down. This is the binding property. And nobody must be able to read the value without revealing the bottom side of the paper.
For example by the Pedersen commitments. There, in Setup: (i) a group `(G, g, q) ← GenGrp` is chosen with generator g of order q, (ii) `h ← Z_q` is chosen uniformly at random from the „exponent space“, and (iii) `pp ← (G, g, q, [h])` is returned. Importantly, from `[h]` we *cannot* infer `h` under the DLOG assumption. Then, in `Com(m;r)` we simply return `[1]*r + [h]*m`.
Pedersen commitments are perfectly binding because for every commitment `Com(m;r)` and for every other message `m'`, there is a randomness `r'` such that `Com(m;r) = Com(m';r')`. Note that this `r'` cannot be efficiently computed. Me saying „there is a randomness `r'`“ is on the meta level of mathematics, not on the meta level of efficient crypto algorithms.
Finally, Pedersen commitments are just computationally binding. You cannot have perfect hiding and perfect binding at the same time.
Because `Verify` checks the ZKP and verifies the „of knowledge“ part for the amounts.
Intuitively, interactive or non-interactive protocols between a prover and a verifier such that the verifier doesn't learn anything except that the statement is true, and for „of knowledge“ systems, that the prover possesses a witness.
By requiring the existence of an extractor that given a prover and a statement stmt outputs a (putative) witness fulfilling the following property: if that prover was able to convince the (honest) verifier, then the witness output by the extractor is in fact a witness for the statement stmt being in the relation R. R is the NP relation in the usual definitions of ZKP-related concepts. Importantly, the extractor is given oracle access to the prover and can also rewind it. Something that isn't doable in practice and hence this extractability notion actually makes sense. [note: I said this paragraph purely orally and that sufficed. I don't think they want you to know the exact notation or learn the typesetting of definitions by heart.]
The extractor can control the common reference string crs or some trapdoor - depends on the exact formalization of ZKP-related concepts, though. [note: Prof. Schröder here just repeated a question of mine; namely that question I had asked days before on the course forum and there got the very same reply I answered, too.]
We often have an interactive protocol that we then transform via the Fiat-Shamir transform. There, we replace the challenges by the verifier (that all need to be public-coin) by hashes of all previous messages. This is then guaranteed to be secure in the ROM. [note: sometimes, we can get a secure scheme with Fiat-Shamir even without the ROM assumption, see https://eprint.iacr.org/2020/915].
As always depends on your threat model. For any serious threat model, I would never recommend Bitcoin or anything building on that (e.g. CoinJoin, CoinShuffle, TumbleBit, ZeroCoin). Hence, the decision is between RingCT and ZeroCash. Here, it from a rough point of view, they differ in whether they need a TSA or not. ZeroCash requires one, RingCT not.
They are only secure in ROM. Hence, you need to trust the specific instantiation of the hash function.
Indeed, one could say so.
I guess there are algorithms to perform the required trusted setups in a decentral way. But still, this is only spreading the risk, ultimately, it'll remain a TSA for the users that performed that setup decentrally.