<--- not replying to list as this is off-topic ---->

Hey Alejandro,

thanks for the pointer. Is there a summary of how the opcode you're proposing 
would look like?
Is pairing crypto strictly necessary or would interactive key aggregation 
schemes like Bellare-Neven
work as well?

Best,
Jonas

On 2/9/19 10:01 AM, Alejandro Ranchal Pedrosa via bitcoin-dev wrote:
> Hi all,
>>
>> Side note: I was not able to come up with an similar, eltoo-like protocol 
>> that works
>> if you can't predict in advance who will become absent.
>>
> An eltoo-like protocol that works (without going on-chain) if you can't 
> predict in advance who will become absent would be a childchain. If the 
> off-chain protocol can continue updating in the abscence
> of other parties, it means that other parties' signatures must not be 
> required when they are not involved in the off-chain state update. If other 
> parties' signatures must not be required, there must
> be a way of having a common verifiable 'last state' to prevent a party to 
> simultaneously 'fork' the state with two different parties, and double-spend. 
> A solution for this is a childchain for Bitcoin.
> An example of this is what is known as a 'Broken Factory' attack [1] 
> (https://bitcoin.stackexchange.com/questions/77434/how-does-channel-factory-act/81005#81005)
> 
>> If the expectation is that the unresponsive party returns, fungibility is
>> not reduced due to output tagging because the above scheme can be used
>> off-chain until the original channel can be continued.
> 
> I believe that in many cases other parties won't be able to continue until 
> the unresponsive parties go back online. That might be true in particular 
> scenarios, but generally speaking, the party might
> have gone unresponsive during a factory-level update (i.e. off-chain closing 
> and opening of channels), while some parties might have given out their 
> signature for the update without receiving a fully
> signed transaction. In this case they do not even know which channel they 
> have open (the one of the old state that they have fully signed, or the one 
> for the new state that they have given out their
> signature for). This is known as a 'Stale Factory', and can be exploited by 
> an adversary in a 'Stale Factory' attack [1]. Even if they knew which state 
> they are in (i.e. the party went unresponsive
> but not during a factory-level update), some of them might have run out of 
> funds in some of their channels of the factory, and might want to update, 
> while they will not be willing to wait for a party
> to go back online (something for which they also have zero guarantees of).
> 
> An eltoo-like protocol that works (allowing going on-chain) if you can't in 
> advance who will become absent, then this is precisely why 'Transaction 
> Fragments' have been suggested. They allow an
> eltoo-like protocol even when one cannot predict in advance who will become 
> absent, or malicious (by publishing invalid states), cause the non-absent 
> parties can unite their fragments and create a
> valid spendable factory-level transaction that effectively kicks out the 
> malicious parties, while leaving the rest of the factory as it was. To the 
> best of my understanding, the eltoo original
> proposal also allows this though.
> 
> Best,
> 
> Alejandro.
> 
> [1]: Scalable Lightning Factories for Bitcoin, 
> https://eprint.iacr.org/2018/918.pdf
> 
> 
> On 08/02/2019 20:01, Jonas Nick via bitcoin-dev wrote:
>> Output tagging may result in reduced fungibility in multiparty eltoo 
>> channels.
>> If one party is unresponsive, the remaining participants want to remove
>> the party from the channel without downtime. This is possible by creating
>> settlement transactions which pay off the unresponsive party and fund a new
>> channel with the remaining participants.
>>
>> When the party becomes unresponsive, the channel is closed by broadcasting 
>> the
>> update transaction as usual. As soon as that happens the remaining
>> participants can start to update their new channel. Their update signatures
>> must use SIGHASH_NOINPUT. This is because in eltoo the settlement txid is not
>> final (because update tx is not confirmed and may have to rebind to another
>> output). Therefore, the funding output of the new channel must be NOINPUT
>> tagged. Assuming the remaining parties later settle cooperatively, this loss
>> of fungibility would not have happened without output tagging.
>>
>> funding output          update output                                    
>> settlement outputs              update output
>> [ A & B & C ] -> ... -> [ (A & B & C & state CLTV) | (As & Bs & Cs) ] -> [ 
>> NOINPUT tagged: (A' & B'), -> ...
>>                                                                             
>> C' ]
>> If the expectation is that the unresponsive party returns, fungibility is
>> not reduced due to output tagging because the above scheme can be used
>> off-chain until the original channel can be continued.
>>
>> Side note: I was not able to come up with an similar, eltoo-like protocol 
>> that works
>> if you can't predict in advance who will become absent.
>>
>> On 12/13/18 12:32 PM, Johnson Lau via bitcoin-dev wrote:
>>> NOINPUT is very powerful, but the tradeoff is the risks of signature 
>>> replay. While the key holders are expected not to reuse key pair, little 
>>> could be done to stop payers to reuse an address.
>>> Unfortunately, key-pair reuse has been a social and technical norm since 
>>> the creation of Bitcoin (the first tx made in block 170 reused the previous 
>>> public key). I don’t see any hope to change this
>>> norm any time soon, if possible at all.
>>>
>>> As the people who are designing the layer-1 protocol, we could always blame 
>>> the payer and/or payee for their stupidity, just like those people laughed 
>>> at victims of Ethereum dumb contracts (DAO,
>>> Parity multisig, etc). The existing bitcoin script language is so 
>>> restrictive. It disallows many useful smart contracts, but at the same time 
>>> prevented many dumb contracts. After all, “smart” and
>>> “dumb” are non-technical judgement. The DAO contract has always been 
>>> faithfully executed. It’s dumb only for those invested in the project. For 
>>> me, it was just a comedy show.
>>>
>>> So NOINPUT brings us more smart contract capacity, and at the same time we 
>>> are one step closer to dumb contracts. The target is to find a design that 
>>> exactly enables the smart contracts we want,
>>> while minimising the risks of misuse.
>>>
>>> The risk I am trying to mitigate is a payer mistakenly pay to a previous 
>>> address with the exactly same amount, and the previous UTXO has been spent 
>>> using NOINPUT. Accidental double payment is not
>>> uncommon. Even if the payee was honest and willing to refund, the money 
>>> might have been spent with a replayed NOINPUT signature. Once people lost a 
>>> significant amount of money this way, payers
>>> (mostly exchanges) may refuse to send money to anything other than P2PKH, 
>>> native-P2WPKH and native-P2WSH (as the only 3 types without possibility of 
>>> NOINPUT)
>>>
>>> The proposed solution is that an output must be “tagged” for it to be 
>>> spendable with NOINPUT, and the “tag” must be made explicitly by the payer. 
>>> There are 2 possible ways to do the tagging:
>>>
>>> 1. A certain bit in the tx version must be set
>>> 2. A certain bit in the scriptPubKey must be set
>>>
>>> I will analyse the pros and cons later.
>>>
>>> Using eltoo as example. The setup utxo is a simple 2-of-2 multisig, and 
>>> should not be tagged. This makes it indistinguishable from normal 1-of-1 
>>> utxo. The trigger tx, which spends the setup utxo,
>>> should be tagged, so the update txs could spend the trigger utxo with 
>>> NOINPUT. Similarly, all update txs should be tagged, so they could be spent 
>>> by other update txs and settlement tx with NOINPUT.
>>> As the final destination, there is no need to tag in the settlement tx.
>>>
>>> In payer’s perspective, tagging means “I believe this address is for 
>>> one-time-use only” Since we can’t control how other people manage their 
>>> addresses, we should never do tagging when paying to
>>> other people.
>>>
>>> I mentioned 2 ways of tagging, and they have pros and cons. First of all, 
>>> tagging in either way should not complicate the eltoo protocol in anyway, 
>>> nor bring extra block space overhead.
>>>
>>> A clear advantage of tagging with scriptPubKey is we could tag on a 
>>> per-output basis. However, scriptPubKey tagging is only possible with 
>>> native-segwit, not P2SH. That means we have to disallow
>>> NOINPUT in P2SH-segwit (Otherwise, *all* P2SH addresses would become 
>>> “risky” for payers) This should be ok for eltoo, since it has no reason to 
>>> use P2SH-segwit in intermediate txs, which is more
>>> expensive.
>>>
>>> Another problem with scriptPubKey tagging is all the existing bech32 
>>> implementations will not understand the special tag, and will pay to a 
>>> tagged address as usual. An upgrade would be needed for
>>> them to refuse sending to tagged addresses by default.
>>>
>>> On the other hand, tagging with tx version will also protect P2SH-segwit, 
>>> and all existing wallets are protected by default. However, it is somewhat 
>>> a layer violation and you could only tag all or
>>> none output in the same tx. Also, as Bitcoin Core has just removed the tx 
>>> version from the UTXO database, adding it back could be a little bit 
>>> annoying, but doable.
>>>
>>> There is an extension to the version tagging, which could make NOINPUT even 
>>> safer. In addition to tagging requirement, NOINPUT will also sign the 
>>> version of the previous tx. If the wallet always
>>> uses a randomised tx version, it makes accidental replay very unlikely. 
>>> However, that will burn a few more bits in the tx version field.
>>>
>>> While this seems fully compatible with eltoo, is there any other proposals 
>>> require NOINPUT, and is adversely affected by either way of tagging?
>>> _______________________________________________
>>> bitcoin-dev mailing list
>>> bitcoin-dev@lists.linuxfoundation.org
>>> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
>>>
>> _______________________________________________
>> bitcoin-dev mailing list
>> bitcoin-dev@lists.linuxfoundation.org
>> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists.linuxfoundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev

Reply via email to