-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Malicious proposers may choose VRF proof #553
Comments
I'm currently investigating. I need time because I need to understand the security of tendermint.
Since the proposer would benefit from becoming the original proposer, even a malicious proposer may not carry out such an attack.
I don't think there are any particular concerns. |
Is it possible? I don't think it can happen because there are several confirmed blocks can't occur, so I don't think it can happen that new proposer can choose it. And if there are multiple confirmed blocks, it is subject to slashing with double signatures. |
Oh, I see. This issue is a situation in same block height. But I also this is not a problem. Even if a malicious proposer creates a new block in a new round, it is unlikely to be controlled by a malicious validator because other valdiators who vote for it do not vote if they already know another valid_round, or vote for a new block or select other validators as well. |
Let me explain the situation in some detail. When generating the block, for reasons of efficiency, Tendermint allows the Proposer to re-use Proposals that have passed validation in previous rounds of the same height but failed to reach agreement. It's the same behavior for Ostracon. Ostracon then determins the Proposer for the next block based on the VRF proof associated with that block. Thus, this allows a malicious Proposer to select and re-use a Proposal from previous rounds to select a Proposer in their favour. The "validated but not agreed proposals" known to each Validator are not the same for all Validators. This is because "no agreement reached" includes the case where "the Proposal was not received correctly". In any case, it's not expected that all Validators have all previous validated Proposals, as more than 2/3 of them were not agreed. This makes it difficult for other Validators to determine whether the reused Proposal was arbitrarily selected or the only one known to that Proposer (it may be possible to trace back past signatures to see what Proposals were recognised by the Proposer, but a new protocol to report this would be needed). Note, however, that there are limitations to this malicious selection.
|
Consider the worst case of 33% being Byzantine. In this case, there is a 33% chance of producing a proof such that the next proposer is Byzantine. So if we can reuse previous proofs, the worst-case probability of agreeing on the next byzantine proposer proof at r is 1 - (0.67)^r. |
I'm afraid the Byzantine proposer will last forever. This probability cannot be calculated immediately, but it is definitely increasing. |
It may be possible to slightly increase the number of failed agreement rounds, but even if Byzantine nodes occupy |
Probability that Byzantine proposer will continue to be selected is not zero because proposer selection is random sampling. But this was an extreme example. It is a concern that more byzantine validators would be elected as proposers than the actual byzantine percent to be exact. |
I thought about what kind of problems would arise in such a situation.
1: Even if proposers are malicious, if they think rationally, they will not do anything that will damage the liveness. This will only make network unreliable and lost their assets. Reasonable thinking can ignore this. From the above it seems that modifying like proposal doesn't make much sense, at least for 1,2,3. Are there other possible problems? |
If the probability of validator being elected as proposer is determined by the ratio of staking power, it seems that byzantine can be prevented from continuing to be elected. Even if byzantine selects byzantine as the next proposer at a certain block height, it seems that the possibility of byzantine being selected as the proposer can always be reduced. |
Problem
The current ostracon allows proposers to re-propose previously proposed blocks. A vrf proof exists in the block header to determine the next height proposer. Therefore, a malicious proposer may select and re-propose a block containing his/her preferred vrf proof from past round proposed blocks.
This is still a concern. It is not yet known that this attack is possible. However, I think that concerns can be eliminated by changing the specification so that the highest round proposer creates a VRF proof.
Proposal
I would suggest the following fixes:
Since the latest proposer creates a VRF proof, it cannot be stored in the current block. Therefore, it is stored in the next block in the same way as last_commit.
VRFParams
are broadcast just like BlockParts. Also, this value is managed in the internal state in the same way as commit.Things to think about
The text was updated successfully, but these errors were encountered: