Security 为什么P-521公钥X,Y有时是65字节有时是66字节
我使用golang生成p-521公钥。 源代码如下所示:Security 为什么P-521公钥X,Y有时是65字节有时是66字节,security,go,elliptic-curve,ecdh,Security,Go,Elliptic Curve,Ecdh,我使用golang生成p-521公钥。 源代码如下所示: curve:=elliptic.P521() priv, x, y, err := elliptic.GenerateKey(curve, rand.Reader) xBytes:=x.Bytes() yBytes:=y.bytes() //len(xBytes) some time is 65 bytes ,some time is 66 bytes 为什么p-521公钥X,Y不像具有固定公钥长度的p-256或p-384?secp
curve:=elliptic.P521()
priv, x, y, err := elliptic.GenerateKey(curve, rand.Reader)
xBytes:=x.Bytes()
yBytes:=y.bytes()
//len(xBytes) some time is 65 bytes ,some time is 66 bytes
为什么p-521公钥X,Y不像具有固定公钥长度的p-256或p-384?
secp521r1
使用521位素数字段。因此,X或Y坐标表示为521位数字。是的,521,不是512
521位是65个完整字节,剩余一位。在公钥的固定大小编码中,最高有效字节的7个最高有效位始终设置为0,第8位将为1或0(因此整个字节为0x00或0x01)
由于坐标空间并不是所有521位的数字,因此为任何特定点设置高位的几率略低于50%
Go的方法似乎是使用最小字节表示返回值。所以你应该看到类似的东西
- 66字节:49%的时间
- 65字节:50%的时间
- 64字节(前9位均为0):0.2%
- (63字节及以下是可能的,但百分比非常小)