fix!: defensive ghost row constraints in bc_hashing pil #19481
Merged
+81
−26
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.

Summary
Adds defensive constraints to
bc_hashing.pilto prevent ghost row injection attacks on the#[GET_PACKED_FIELD_1]and#[GET_PACKED_FIELD_2]permutations.The vulnerability pattern: When
sel=0(gadget inactive), the sub-selectorssel_not_padding_1andsel_not_padding_2were only boolean-constrained, not forced to 0. A malicious prover could set these to 1 on ghost rows to fire the permutations intobc_decomposition.The fix: Add constraints that force these selectors to 0 when
sel=0:Note: This is a defensive fix. The destination trace (bc_decomposition) already has sel_packed * (1 - sel) = 0 which would block ghost destination rows, making the attack non-exploitable in practice.
Test Plan