Skip to content

Commit e5a1675

Browse files
committed
Add clarification as why we need to distinguish aggergatable scheme
from non-aggregatable ones.
1 parent 08ff101 commit e5a1675

File tree

1 file changed

+14
-1
lines changed
  • substrate/primitives/core/src

1 file changed

+14
-1
lines changed

substrate/primitives/core/src/pop.rs

+14-1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,19 @@ where
6969

7070
/// Marker trait to identify whether the scheme is not aggregatable thus changing
7171
/// the implementation of the scheme parts such as Proof Of Possession or other specifics.
72+
///
73+
/// This is specifically because implementation of proof of possession for aggregatable schemes
74+
/// is security critical.
75+
///
76+
/// We would like to prevent aggregatable scheme from unknowingly generating signatures
77+
/// which aggregate to false albeit valid proof of possession aka rouge key attack.
78+
/// We ensure that by separating signing and generating pop at the API level.
79+
///
80+
/// Rouge key attack however is not immediately applicable to non-aggregatable scheme
81+
/// when even if an honest signing oracle is tricked to sign a rogue pop, it is not
82+
/// possible to aggregate it to generate a valid proof for a key the attack does not
83+
/// possess. Therefore we do not require non-aggregatable schemes to prevent PoP
84+
/// confirming signatures at API level
7285
pub trait NonAggregatable {}
7386

7487
impl<T> ProofOfPossessionVerifier for T
@@ -83,4 +96,4 @@ where
8396
T: Pair + NonAggregatable,
8497
T::Public: CryptoType,
8598
{
86-
}
99+
}

0 commit comments

Comments
 (0)