<oembed><type>rich</type><version>1.0</version><author_name>npub1ac86vemj7ce5z8jyxt39rna3tvwql6xd30ha3vxcd6esysp23d9qrlswfj</author_name><author_url>https://nostr.ae/npub1ac86vemj7ce5z8jyxt39rna3tvwql6xd30ha3vxcd6esysp23d9qrlswfj</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2013-05-15&#xA;📝 Original message:So in a previous mail I described a simple, extremely efficient and easy to&#xA;implement symmetric key commitment that is unlinkable until reveal time (at&#xA;bottom).  I think this can help improve the byzantine generals problem, that&#xA;bitcoin only defends to simple majority (with one vote per CPU power), and&#xA;so assumes most nodes by cpu power are honest.  With this simple protocol&#xA;change you dont need any honest nodes, just some honest clients to spend to,&#xA;to have your transaction accepted.  &#xA;&#xA;You can think of this in terms of a (somewhat distributed) server performing&#xA;validations, but in a way that it sufficiently blind to the details of the&#xA;validations that it can not selectively enforce a policy, it power is&#xA;limited to random DoS.&#xA;&#xA;There are other situations where you can rely on a server for one property&#xA;but not another - eg a somewhat distributed encrypted backup (like Tahoe&#xA;LAFS) you rely on for availability, but not integrity nor confidentiality&#xA;(because you encrypt those, and some sharing scenarios still work.) So this&#xA;is in that class of protocols - zero-trust in server, but can extract&#xA;service and some guarantees from the (optionally distributed) server anyway.&#xA;&#xA;(Bitcoin does not use known better than majority results for byzantine&#xA;generals based on fair coin toss, relying instead on simple majority and an&#xA;assumed largely unjammable network.  I notice Nick Szabo was complaining&#xA;about this on his blog and saying bitcoins majority is not even a standard&#xA;or proven byzantine voting protocol - something adhoc.  I think the bitcoin&#xA;unjammable network assumption is a false at the limit so that someone with&#xA;strong network hacking capabilities can create network splits long enough to&#xA;even overcome the network majority vote without having any compute power of&#xA;their own.  All they need is to have a split with enough power to plausibly&#xA;quickly get the victims their desired number of (split) confirmations.)&#xA;&#xA;Anyway this should be a clear voting improvement, that is efficient.&#xA;&#xA;Imagine a couple of big pools or ASIC miners started enforcing some&#xA;arbitrary coin policy, eg say coins must not have some taint according to&#xA;its list of black coins, or coins must be certified by some entity, be&#xA;traceable to some type of event etc.  Well call these miners/voters&#xA;&#34;dishonest&#34;, in that they are not following the intended zero-policy&#xA;protocol.&#xA;&#xA;If the coins dont match their chosen policy, the dishonest miners will&#xA;refuse to include transactions in blocks they issue.  If they see a&#xA;transaction which does not match their policy in a block by someone else&#xA;they will ignore it and try to make it into an orphan.  As they have say 75%&#xA;of the network power they can do that successfully.  Even with current&#xA;validation protocols in the clients, so the &#34;but clients wont accept the&#xA;change&#34; argument does not apply - the existing clients will accept the&#xA;policy change, because they cant detect it, nor prove it, and dont have the&#xA;voting power to impose honest policies.&#xA;&#xA;(For realism of this risk, note that according to Kaminsky there already&#xA;exist multiple entities with reserve ASIC power each exceeding current&#xA;network difficulty who are holding part of their power in reserve for profit&#xA;maximisation reasons.  This is a coming to fruition of the concentration of&#xA;power issue I was talking about in my first bitcoin forum post.  People who&#xA;have that kind of power in reserve have clearly invested millions of&#xA;dollars, which probably makes them more vulnerable to political influence.)&#xA;&#xA;&#xA;Alright so the solution.  Use the commitment protocol (below) which even&#xA;though it is symmetric key strongly hides the committed transaction public&#xA;key.  (Symmetric in the sense that the validation steps are all highly&#xA;efficient symmetric key based).  Now send the transaction (which includes&#xA;the public key) direct to the receiver, over a secure channel, or an assumed&#xA;non-eavesdropped direct channel, with no p2p flood of the transaction.  The&#xA;receiver can check the hash to the commitment, and decide how many&#xA;confirmtions he needs.  Once he has eg 6 confirmations he reveals the&#xA;commitment to the transaction (by publishing it).  The sender may also send&#xA;the reveal/transaction to the network directly himself, if the recipient is&#xA;offline.  However there is no advantage to publishing early so it seems&#xA;better to let the recipient do it when he is ready to incorporate the&#xA;payment into his wallet.  &#xA;&#xA;Now the powerful dishonest voters if they try to apply their policy when&#xA;they see the reveal triggers it, must redo the work of the 6-commitments&#xA;that they computed themselves.  This is like starting 6-steps behind in the&#xA;statstical gamblers ruin game that Nakamoto describes in the bitcoin paper. &#xA;Consequently even with 75%, they will find it very hard to outcompete their&#xA;own prior work, to create a 6 chain long orphan while the 25% is moving&#xA;forward on the honest chain.  Each time they see transactions which violate&#xA;their policy, they have to restart their chain recalculation again from&#xA;scratch.  Often if simple lower powered intermittent recipient sends the&#xA;coin will be burried hundreds of blocks back.  In addition 6 chain long&#xA;branches are extremely unlikely with honest payers, so clients can (and&#xA;maybe already do?) act with suspicion of they see one.&#xA;&#xA;&#xA;Going further, I said for best security, the recipient should never even&#xA;reveal (to the network) until he is actually about to spend, but futher he&#xA;does not even have to reveal publicly ever, he can choose to reveal only to&#xA;the recipient with a direct connection (no p2p flood fill of transaction.)&#xA;And the direct spend argument composes, ie the 2nd recipient can not do the&#xA;same thing again.  (public key A sends to public key B sends to public key&#xA;C: B publishes COM( transaction B-&gt;C ), sends the reveal of COM( transaction&#xA;A-&gt;B ), and COM transaction B-&gt;C ) to C.  C waits 6 confirmations and is&#xA;convinced.  So its the approach is composable, and in fact the network&#xA;doesnt learn the size of the transaction even, though the spend grows each&#xA;time.  Eventually presumably someone will publish will the confirmations to&#xA;the network to trim the tansaction size, though it is not strictly&#xA;necessary, and the transaction flow is small and direct (no network scaling&#xA;issues), so that it wouldnt be a huge problem to have a 1MB payment&#xA;representing 1000s of hops of network blind transactions.  (For the&#xA;composable network blind respending the commitment has to commit publicly to&#xA;both the sender and next hop recipient keys, so the network can see how long&#xA;the chain is).&#xA;&#xA;Probably you can cope with multiple inputs and outputs, and maybe given even&#xA;you can work with a 100% dishonest network mining network (all the dishonest&#xA;miner can do is selectively DoS transactions if they are all network blind&#xA;except the mining), maybe the mining can even be decoupled from the voting,&#xA;as you no longer demand much from the voting process.  That admits more&#xA;interesting things like pool free direct mining, low variance hashcash&#xA;coins, probably.  Many things to think through.&#xA;&#xA;I suppose the commitment could be described as a blind symmetric commitment.&#xA;&#xA;Adam&#xA;&#xA;On Tue, May 14, 2013 at 04:09:02PM +0200, Adam Back wrote:&#xA;&gt; [...]&#xA;&gt;&#xA;&gt;One related concept is commitments.  I think its relatively easy to commit&#xA;&gt;to a payment and lock a coin without identifying yourself, until the&#xA;&gt;commitment is released.  You might do the commitment, wait 6-blocks for&#xA;&gt;confirmation, then reveal the commitment.  Then that is like a self-issued&#xA;&gt;green coin with no need for trust, that can be immediately cleared.  The&#xA;&gt;recipient has to be committed to at the same time to prevent double&#xA;&gt;spending.&#xA;&gt;&#xA;&gt;So just commit = H( input-pub ) H( transaction ) and put it in the block&#xA;&gt;chain.  Where transaction the is usual ( input signature, output-pub,&#xA;&gt;script).  (Fee for the commit would have to come from an unlinked coin or&#xA;&gt;the input-pub reveals the coin).  Wait 6 blocks, send/reveal the transaction&#xA;&gt;(free because fee was already paid).  Validators check input-pub hash&#xA;&gt;against committed coins by hash, check the transaction hash, and the usual&#xA;&gt;ransaction validations = sum inputs, otherwise reject.  The user better pay&#xA;&gt;change if any to a different public key, as the inputs public keys are one&#xA;&gt;use - are after the reveal they are DoS lockable by other people reposting&#xA;&gt;H( input-pub ).&#xA;&gt;&#xA;&gt;The input-pub coin is locked as normal transactions have their public key hash&#xA;&gt;validate as not being locked.&#xA;&gt;&#xA;&gt;Adam</html></oembed>