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]博客