bnb-chain / tss-lib

Threshold Signature Scheme, for ECDSA and EDDSA
MIT License
790 stars 271 forks source link

WaitingFor() is not accurately determining the culprit #117

Closed Strernd closed 3 years ago

Strernd commented 3 years ago

I'm not sure if this is a bug or a limitation of the protocol. Consider following case: We have 4 nodes A, B, C and D with threshold = 2. They establish communication over another layer and start signing something. It usually takes me about ~8 seconds in local docker containers to produce a signature. If I kill node C at an arbitrary point during the sign algorithm and I print out the WaitingFor() of the tss.Party after a timeout I get:

A waiting for C,D
B waiting for C,D
C - dead
D waiting for C

Node A,B can not accurately determine, that they can't proceed because C doesn't send messages anymore. If I wanted to restart the signing without the culprit, I wouldn't be able to determine the culprit.

omershlo commented 3 years ago

Hi,

This specific issue can be probably more elegantly handled with some extra communication, however, there is a fundamental limitation of the protocol (GG18) that makes it impossible to determine the culprit in the general case. This is one of the motivations behind some of the followup protocols from the literature (see GG20 and AHS20 regarding identifiable abort)

Strernd commented 3 years ago

Looks interesting, would love to see the improvements from those protocols in this lib.