目前,我遇到了一个问题,我应该喜欢返回的u2f令牌的用户公钥对应于椭圆曲线方程(secp256r1)。令牌看起来如下:
05047d550bc2384fd76a47b8b0871165395e4e4d5ab9cb4ee286d1c60d074d7d60ef8cc6dd01e747ccb8bedaae6e7fb875d036ce7e4e6231b75b93993b15202829ac40d77b03735f1bc7716bd0df99790010495850502ebaf991c73f981a6f325db75869d98a03ca00c8471cab95832c0531cf3987238d0329dc5f780a0e4ca3eb419b3082021c30820106a003020102020424dbab40300b06092a864886f70d01010b302e312c302a0603550403132359756269636f2055324620526f6f742043412053657269616c203435373230303633313020170d3134303830313030303030305a180f32303530303930343030303030305a302b3129302706035504030c2059756269636f205532462045452053657269616c2031333530333237373838383059301306072a8648ce3d020106082a8648ce3d0301070342000402b094be347d477941c4778ebec5ca4ded2a479faa1e6fec39afebde0c2070cb5bd4bd69c96a78e3bf8751feb5791b8dfacac29401751cb157b97c09e4391a36a3123010300e060a2b0601040182c40a01010400300b06092a864886f70d01010b0382010100a363ae0e983af30bbaf12c8b2df35a59bf1cbb4a1b0fcb68c484558490f687345865b8db0269c346e553884c2c5607af0ea27b90ac8cf1ef431f72ac189db21c824914bf1788a5511a33d07b4c8e34647ce9f61e1516a9a9b36e900a402061f69aa46e12c532b993f9423efaaa4cf9a3b654b4dddef2924a548fd59995510dd4f7f4d9a4d52193873c71c9b87e86853e9e2da75e8f0c6d28305374d4efdd5e1496f8c33906107bd68bd6350daad2c37811eca3ca43bc930b734097def69d688d94550c4cfb18a9e24b86a2e5d88f499899a09bce5b810c536caf390dc8bdde960df330cacabc0521a18323957ffebca59ca90b20b10d09b5231c58c27eba6783304402206309fe66e6aa42c58ab156ed45efc120efb63abcac9d1d35a6237f99fbe1182102201462192f84f0fe1b6d2e4ce828f886264f249bafb585aa2c55f454e19e53a81a首先,我提取了X和Y坐标
x=56689369228784262545363082847328735491157691224156776757613891264163121815791
y=63675159857742677907627179845718530654249452333416428677953468052023208847788
然后SEC2v1说椭圆曲线看起来像y^2=x^3+a\,x+b,给出了a和b参数。所以我的想法是,把x粘贴到这个方程中,得到y^2,然后取它的平方根。不幸的是我总是得到错误的结果。
我的方法怎么了?
发布于 2020-10-26 08:47:11
它在曲线上。使用为NISTP-256曲线(又名sageMath )提供的这里代码。在线测试这里
# Finite field prime
p256 = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF
# Curve parameters for the curve equation: y^2 = x^3 + a256*x +b256
a256 = p256 - 3
b256 = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B
px = 0x7d550bc2384fd76a47b8b0871165395e4e4d5ab9cb4ee286d1c60d074d7d60ef
py = 0x8cc6dd01e747ccb8bedaae6e7fb875d036ce7e4e6231b75b93993b15202829ac
print("The x-coordinate =", px)
print("The y-coordinate =", py)
print(py^2 % p256 )
print((px^3 + a256*px + b256) % p256)产出:
79438795822128695252942075663504569320626776578533931102248002205388342529032
79438795822128695252942075663504569320626776578533931102248002205388342529032注1: u2f标准可以找到FIDO U2F原始消息格式
注2:不需要取平方根。只需比较两边在曲线的模量。这消除了对字段的额外平方根计算。
在基于有限域的椭圆曲线中,我们采用有限域F (素场或有限域扩张),用y^2 + a_1xy + a_3y = x^3 + a_2x^2 + a_4x + a_6定义曲线方程,即Weierstrass方程。
如果场F具有不同于2或3的特征,则可以将Weierstrass方程转化为短形式。
方程是标准的短Weierstrass形式。我们不想要奇异曲线,所以我们用2A^3-27B^2 \neq 0.检查曲线判别式是否为非零。
曲线的点在几何解释下形成一个阿贝尔群,其单位元称为\mathcal{O},它可以是secp256r1中的无穷远点或(0,1)作为Edwards曲线。点加法的几何解释转化为算术过载场F。
https://crypto.stackexchange.com/questions/85800
复制相似问题