EOS中規定簽名的R和S必須同時小於N/2纔是合法的簽名。git
EOS簽名交易相對BTC和ETH來講,對簽名的要求更加嚴格了。github
BTC中bip62規定了((Low S values in signatures)[https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki#Low_S_values_in_signatures])簽名中的S值不能大於N/2:code
The value S in signatures must be between 0x1 and 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0 (inclusive). If S is too high, simply replace it by S' = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 - S.blog
而這產生了一個問題,對於一個規範的R值和S值,(R, S)
、(N-R, S)
、(R, N-S)
、(N-R, N-S)
都是合法的簽名值,而比特幣只是規避了S值過大的狀況,R值過大的狀況它無論,因此可能會形成只要把R值改爲N-R就能夠發佈一筆合法的、交易hash不一樣的交易。EOS要規避這個問題,規定R和S值必須同時小於N/2纔是合法的簽名。ip
論述簽名的博客: (Steem & BitShares Cryptographic Security Update)[https://steemit.com/steem/@dantheman/steem-and-bitshares-cryptographic-security-update]博客