Secp256k1
比特幣私鑰空間和 secp256k1 取模的區別
我在網上看到比特幣 secp256k1 曲線的組序是:
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
它的小數點是:
115792089237316195423570985008687907852837564279074904382605163141518161494337
但是,secp256k1 曲線的模數是素數:
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
它的小數點是:
115792089237316195423570985008687907853269984665640564039457584007908834671663
這些數字幾乎相同。由於 secp256k1 曲線沒有子組,它的輔因子為 1。這是否意味著曲線上的點數幾乎與計算它的模數一樣多?
或者這些數字是一樣的,但有一個是錯的?
這是否意味著曲線上的點幾乎與計算它的模數一樣多?
這不是意外。
根據哈斯定理,有限域上的橢圓曲線上的點數總是接近該域的大小。具體來說,它表示曲線上的點數(不包括無窮遠點)與場大小之間的差異最多是場大小平方根的兩倍。
或者這些數字是一樣的,但有一個是錯的?
不,它們是不同的。
這些數字可以使用以下 Sage 程式碼計算:
>>> F = GF(2**256 - 2**32 - 977) # secp256k1 field >>> E = EllipticCurve(F, [0,7]) # secp256k1 curve >>> F.order() + 1 - E.order() 432420386565659656852420866390673177327 >>> int(sqrt(F.order()) 340282366920938463463374607431768211455