Secp256k1

比特幣私鑰空間和 secp256k1 取模的區別

  • October 11, 2021

我在網上看到比特幣 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

引用自:https://bitcoin.stackexchange.com/questions/110131