BLS Signatures
################
doc
==========================================================
`BLS Signatures: draft-irtf-cfrg-bls-signature `_
`Pairing-Friendly Curves `_
`BLS Multi-Signatures With Public-Key Aggregation `_
`BLS Signatures `_
use case
==========================================================
blockchain的transaction block size优化,节省signature空间
涉及cash的rogue key attack风险性更高
KeyValidate
==========================================================
.. math::
result = KeyValidate(PK)
valid point, not identity element, prime order subgroup point check
CoreSign
==========================================================
利用pairing特性,把msg的hash2curve获得的point,与SK点乘,作为signature。
.. math::
Q = hash_to_point(message)
R = SK * Q
CoreVerify
==========================================================
.. math::
result = CoreVerify(PK, message, signature)
检查signature对应的R point的valid、以及subgroup
检查PK的KeyValidate
Q = hash_to_point(message)
C1 = pairing(Q, PK)
C2 = pairing(R, P)
If C1 == C2, return VALID, else return INVALID
C2 = pairing(SK * Q, P) = pairing(Q, SK * P) = pairing(Q, PK) = C1
Aggregate
==========================================================
检查signature_i的validation
利用signature point addition,实现signature aggregation。
signature aggregation时,优选选用较小p的E用做public key的curve。
.. math::
R = signature_1 + ... + signature_n
CoreAggregateVerify
==========================================================
检查R、PK_i的validation
.. math::
C_i = pairing(hash_to_point(message_i), PK_i)
C1 = C_1 * ... * C_n
C2 = pairing(R, P)
If C1 == C2, return VALID, else return INVALID
显然,N+1次pairing
BLS Signatures
==========================================================
point addition难以控制归零风险
Basic scheme
----------------------------------------------------
要求message_i各不相同,禁止重复
Message augmentation
----------------------------------------------------
原始message前面带上PK,再去做hash_to_point
.. math::
message = PK || message
## Proof of possession
把PK作为msg,计算signature,作为proof
相当于原始message的siganture + PK的proof 都要校验
size/cost都要增加
在此模式下,如果message完全相同,可以优化为2次paring的FastAggregateVerify:
.. math::
R = signature_1 + ... + signature_n
PK = PK_1 + ... + PK_n
CoreVerify(PK, message, signature)
BLS Multi-Signatures With Public-Key Aggregation
==========================================================
`BLS Multi-Signatures With Public-Key Aggregation `_
`Compact Multi-signatures for Smaller Blockchains `_
增加一个H映射: :math:`(t_1, ..., t_n) = H1(PK_1, ..., PK_n)`
.. code-block::
PK_i~ = PK_i ^ t_i
signature_i~ = signature_i ^ t_i
当message完全相同时,同样能优化为2次pairing
i关联信息变一点,重算一遍
security
==========================================================
rogue key attack: 不是valid key,但构造的signature、pk能够通过aggregation verification。其根源在于没有proof校验、以及point addtion的归零
DST区分
KeyValidate
point validation
side channel attack (constant time)
CSPRNG