在密钥交换中使用ECDH,在数字签名中使用ECDSA,secp256k1 曲线已被证明可以在密钥交换和 RSA 签名中取代 Diffie-Hellman 方法。
如果不是中本聪,你可能永远不会听说secp256k1椭圆曲线密码学(ECC)方法。但是,中本聪用它来获取私钥,然后生成一个公共标识符。
采用比特币的核心是使用ECDSA(椭圆曲线数字签名算法),并且可以通过公共比特币标识符来验证交易。secp256k1标准已发布:https://www.secg.org/sec2-v2.pdf 。
这是椭圆曲线的Weierstrass形式,并使用:
$$ y ²= x³ +7 (mod p) $$
它的基点为$$ g=(0x79be667ef9dcb … 959f2815b16f81798, 0x483ada77 … 8ffb10d4b8) $$和一个质数 ²²⁵⁶−²³²−²⁹−²⁸−²⁷−²⁶−²⁴−1。曲线的阶数为 $$n =0xfffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141$$。
总的来说,我们有一个私钥a,然后产生一个公钥aG。对于secp256k1,我们有一个256位的私钥值和一个512位的公钥值(这是椭圆曲线上的一个点)。
谁知道为什么中本聪选择了secp256k1曲线而不是NIST定义的secp256k1曲线。许多人质疑NIST和NSA之间的密切关系,以及在曲线中插入后门的可能性。因此,也许中本聪选择secp256k1就是出于这个原因。
椭圆曲线上的点并不总是给出一个有效的x坐标。同样,每个有效的x坐标值都有两个点:
在x范围内公共曲线的椭圆曲线点。例子:https://asecuritysite.com/ecc/ecc_points4 。本例使用曲线25519、secp256k1、P256和P512来显示给定x坐标范围内的点的范围。
有限域内普通曲线的前20个椭圆曲线点。例子:https://asecuritysite.com/ecc/ecc_points2 。在有限域内定位椭圆曲线的前20个点,曲线包括Curve25519 (Tor), secp256k1(Bitcoin)和NIST P-256。
椭圆曲线密码学之所以快速,是因为它能够将一个点(G)乘以一个标量值(通常是私钥)来得到aG。因为有蒙哥马利阶梯,所以是快速的:
椭圆曲线在它的模拟中是美丽的,但在离散时指向:
椭圆曲线密码的核心,是我们执行点乘法:
(1G, 2G, nG)的真实ECC曲线。例子:https://asecuritysite.com/ecc/ecc_real 。曲线25519、secp256k,等等。
使用Python。例子:https://asecuritysite.com/ecc/python_secp256k1Inv 。在这个例子中,Alice发送aG,Bob返回abG。然后Alice计算a−1(mod n),然后可以确定a^{−1}abG=bG。secp256k1曲线为Weierstrass曲线形式(y²=x³+ax+b)。
椭圆曲线密码学主要关注数字签名过程,我们生成一个私钥(sk)和一个公钥(pk)。密钥对定义如下:
椭圆曲线(OpenSSL密钥生成)。椭圆曲线:https://asecuritysite.com/ecc/keypair2 。椭圆曲线是一种公钥方法。该页介绍了ECC密钥的生成,包括secp128r1。
椭圆曲线(密钥)。椭圆曲线:https://asecuritysite.com/ecc/ecc 。椭圆曲线是一种公钥方法。本页概述了比特币中ECC密钥的生成。
除数字签名外,椭圆曲线方法也用于密钥交换:
带有 secp256k1 的 ECDH。例子:https://asecuritysite.com/ecdh/ecdh2 。ECDH用于创建共享密钥。
不同曲线的ECDH。例子:https://asecuritysite.com/ecc/ecdh3 。ECDH用于使用不同的曲线创建共享密钥,包括secp256k1、p192和p224。
secp256k1 ECDH与Python。secp256k1 ECDH:https://asecuritysite.com/ecc/python_secp256k1ecdh 。ECDH使用secp256k1与Python。secp256k1曲线为Weierstrass曲线形式(y²=x³+ax+b)。
使用Python验证secp256k1 ECDH。例子:https://asecuritysite.com/ecc/python_secp256k1ecdh2 。ECDH使用secp256k1和Python,其中我们使用Bob和Alice的长期密钥来创建共享会话密钥。secp256k1曲线为Weierstrass曲线形式(y²=x³+ax+b)。
比特币和以太坊信任的核心部分是使用 ECDSA 签名:
椭圆曲线数字签名算法(ECDSA)。ECDSA:https://asecuritysite.com/ecdsa/ecdsa 。椭圆曲线数字签名算法(ECDSA)用于对数据进行签名。
具有核心操作的椭圆曲线数字签名算法 (ECDSA)。ECDSA:https://asecuritysite.com/ecdsa/ecdsa2 。椭圆曲线数字签名算法(ECDSA)用于对具有核心操作的数据进行签名。
但需要谨慎对待:
从随机数 (SECP256k1) 的泄漏中破解 ECDSA。ECDSA与nonce:https://asecuritysite.com/ecc/ecd3。这概述了ECDSA如何通过secp256k1的nonce值泄漏来恢复私钥。
用弱随机数破解ECDSA。ECDSA与弱随机数:https://asecuritysite.com/ecc/ecd 。这概述了ECDSA如何使用弱随机数值恢复私钥。
盲化ECDSA。盲化ECDSA:https://asecuritysite.com/ecc/blinding_ecdsa 。使用盲签名,Bob 可以在不知道消息是什么的情况下签名消息。在这种情况下,Alice 将创建一个盲化的 ECDSA 签名,Bob 可以在其中签名,然后 Alice 可以对其进行解密。该方法基于 Oleg Andreev 为比特币中的盲签名而制作的方法。
ECDSA:故障攻击。ECDSA故障攻击:https://asecuritysite.com/ecc/ecd7 。在ECDSA中的故障攻击中,我们只需要两个签名。一个没有故障(r,s),另一个有故障(rf,sf)。
由于公钥是一个点,在其最纯粹的形式中,我们有一个512位的公钥,它由256位的x坐标和256位的y坐标组成。但是,其实也可以压缩它,因为我们可以很容易地从x坐标推导出y坐标。最后,只有两个可能的y坐标,所以我们要做的就是记录它是奇数还是偶数,然后用一个标识符和x坐标压缩这个点:
02、03 还是 04?那么什么是压缩和未压缩的公钥?https://asecuritysite.com/ecc/js_ethereum2
在密钥交换中使用ECDH,在数字签名中使用ECDSA,secp256k1 曲线已被证明可以在密钥交换和 RSA 签名中取代 Diffie-Hellman 方法。
关于
ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!