什么是椭圆曲线密码学?
椭圆曲线密码学(Elliptic Curve Cryptography,ECC)是一种公钥密码学,基于有限域上的椭圆曲线点运算。
加密货币网络主要使用 ECC 创建公钥和私钥对、生成数字签名、验证交易授权、建立共享密钥,并支持高级密码学证明。
私钥是一个保密数字,其持有者可以控制加密货币账户或签名身份。
公钥是一个与私钥存在数学关联的值,其他参与者可以用它验证签名,而无需获知私钥。
ECC 的安全性很大程度上取决于椭圆曲线离散对数问题的求解难度。
给定私钥和选定的生成点,可以高效计算出对应的公钥。
在使用安全曲线、适当密钥长度和正确实现的情况下,仅凭公钥和生成点恢复私钥被认为在计算上不可行。
NIST 椭圆曲线密码学项目将 ECC 描述为数字签名和密码学密钥建立的重要方法。
ECC 并不指某一种算法、曲线、区块链或加密货币。
它是一个广泛的密码学方法类别,包括 ECDSA、EdDSA、ECDH、Schnorr 签名、BLS 签名和其他构造。
加密货币为什么使用 ECC?
加密货币系统需要一种方法,让用户可以授权交易,同时不泄露控制其资产的秘密信息。
ECC 通过数字签名实现了这一点。
钱包使用私钥对交易数据签名。
网络参与者使用相关公钥验证签名是否有效。
这一过程可以证明操作获得所需密钥的授权,而无需公开该密钥。
ECC 的优势在于,相较于某些较早的公钥密码学方法,在相近安全级别下,它可以使用相对紧凑的公钥和签名提供强大的经典安全性。
在相近安全级别下,较小的密码学数据可以减少交易大小、网络带宽、存储需求和验证开销。
这些效率优势对于区块链很重要,因为数千个独立节点可能都需要存储或验证相同的密码学数据。
什么是椭圆曲线?
密码学中使用的椭圆曲线,是有限域上满足特定方程的一组数学点。
常见的简化 Weierstrass 形式可写为
密码学计算通常不会使用入门示意图中平滑、连续的曲线。
它使用的是有限数量的点,这些点的坐标为整数,并按模运算计算。
曲线参数定义了哪些点有效,以及点加法和标量乘法等运算如何进行。
完整的域参数集可以包括有限域、曲线系数、生成点、生成点的阶和余因子。
安全系统必须使用经过充分分析的参数,而不是随意选择曲线方程。
最终版 NIST SP 800-186 建议为适用的密码学系统规定了获批准的椭圆曲线域参数。
什么是有限域?
有限域是一组有限的值,并为加法、减法、乘法和除法定义了规则。
许多加密货币曲线运行在素数域上,计算以一个较大的素数为模进行。
当数值达到有限域的模数时,模运算会使其回绕。
因此,坐标只能取有限数量的值,而不是无限几何平面上的任意值。
有限域和曲线的数学性质使点运算能够构成一个结构化的代数群。
密码学安全性取决于所选域和群参数能否抵御已知的数学攻击。
点加法
点加法是一种将两个有效曲线点组合,并生成另一个有效点的运算。
具体公式取决于椭圆曲线的形式。
一种称为点倍乘的特殊运算是将一个点与自身相加。
重复进行点加法构成了标量乘法的基础。
实现还必须正确处理无穷远点等特殊情况。无穷远点是群的单位元。
点运算不正确可能产生无效签名、泄露秘密信息,或造成可被利用的边缘情况。
标量乘法
标量乘法是指将椭圆曲线上的一个点与自身相加指定次数。
在加密货币中,公钥通常按
在这个表达式中,
从
系统依赖的难题则是从
生产环境中的密码学库会使用优化的乘法方法,同时尝试防止计时和侧信道信息泄露秘密标量。
椭圆曲线离散对数问题
椭圆曲线离散对数问题(ECDLP)是指在已知生成点和结果公钥点的情况下,求出秘密标量的难题。
目前没有已公开的高效经典算法,可以解决参数选择恰当的大型曲线上的 ECDLP。
攻击者可以尝试暴力破解或更先进的数学方法,但对于安全的 256 位曲线,所需工作量应远远超过现实计算能力。
这一判断取决于曲线选择、密钥生成、验证和实现是否正确。
如果随机数生成器较弱或私钥已经泄露,攻击者无需解决 ECDLP 就能攻破系统。
ECC 私钥
ECC 私钥通常是在曲线群阶所规定范围内随机选取的整数。
该值不能为零,也不能超出有效范围。
256 位私钥并不意味着每个可能的 256 位字符串对所有曲线都自动有效。
钱包软件必须使用密码学安全的随机源生成该值,并按照曲线的范围规则进行处理。
私钥必须保密,因为任何获得私钥的人通常都能为相关账户生成有效签名。
区块链共识机制无法区分合法所有者和使用同一有效密钥的窃贼。
ECC 公钥
ECC 公钥是所选椭圆曲线上的一个点。
该点通过标量乘法从私钥计算得出。
根据当前经典安全性假设,公开公钥不会泄露私钥。
加密货币系统可能存储完整公钥、压缩形式,或通过哈希生成的地址。
在敏感协议中使用公钥前必须先验证,因为格式错误的点可能引发无效曲线攻击或子群攻击。
验证可以包括检查编码格式、确认该点位于预期曲线上、拒绝单位点,以及应用子群规则。
公钥与加密货币地址
加密货币地址并不总是与公钥相同。
许多系统通过对公钥信息进行哈希或其他编码方式生成地址。
这样可以产生更短、更便于用户使用的标识符,并添加校验和、网络标识符或脚本条件。
有些地址只有在资金被花费时才会公开完整公钥。
另一些账户系统则会在任何交易发生之前,从公钥派生出固定地址。
用户绝不能假设可以从地址反推出私钥。
正确设计的地址生成过程在实际应用中是单向的。
ECC 与数字签名
数字签名是 ECC 在加密货币中的最常见用途。
签名者使用私钥处理交易数据并生成签名。
其他网络参与者使用对应公钥和相同的交易数据验证签名。
有效签名能够证明特定数据获得所需私钥的授权。
验证者还可以通过签名检测签署后对数据所作的更改。
签名不会加密交易,也不会隐藏交易内容。
最终版 NIST FIPS 186-5 数字签名标准将 ECDSA 和 EdDSA 列为获批准的签名技术。
ECC 不等于加密
椭圆曲线密码学包含与加密和密钥协商有关的技术,但加密货币交易通常使用 ECC 进行签名,而不是保护交易内容的机密性。
公有区块链通常必须读取交易数据,才能验证余额、执行智能合约并更新共享状态。
交易通过签名来证明授权,但发送方、接收方、金额或合约指令仍可能公开可见。
ECC 可以为加密通信建立共享密钥,但这与签署链上交易是不同的操作。
用户不应仅仅因为加密货币使用椭圆曲线密码学,就认为相关活动具有隐私性。
什么是 ECDSA?
ECDSA 是椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm)的缩写。
该算法将数字签名算法应用于椭圆曲线群。
ECDSA 会生成一个包含两个主要值的签名,通常称为
验证过程会检查签名、消息哈希、公钥、生成点和曲线阶之间的数学关系。
ECDSA 的安全性取决于私钥保护,以及为每次签名生成安全且唯一的签名随机数。
该算法被广泛用于加密货币交易授权。
NIST 的 ECDSA 定义将其描述为数字签名算法的椭圆曲线对应形式。
ECDSA 签名随机数为何至关重要?
每个 ECDSA 签名都需要一个通常称为
同一个私钥为不同消息签名时,不能重复使用该值。
如果两个签名重复使用同一个随机数,攻击者往往可以通过简单代数运算求出私钥。
随机数存在偏差或部分可预测时,攻击者也可能从多个签名中获取足够信息来恢复密钥。
即使底层椭圆曲线仍然安全,这类失误也曾造成密码学系统中的实际损失。
现代实现通常会按照 RFC 6979 等经过审查的方法,从私钥和消息哈希确定性地生成随机数。
确定性随机数生成仍然需要正确实现,并防范侧信道泄露。
什么是 secp256k1?
secp256k1 是一种 256 位椭圆曲线,Bitcoin、Ethereum 执行层账户和其他多种加密货币系统都在使用它。
它在素数域上的方程为
该曲线使用系数
其名称源自高效密码学标准(Standards for Efficient Cryptography)系列中公布的曲线参数。
持续维护的 libsecp256k1 项目提供针对该曲线的签名和相关运算专用实现。
secp256k1 不能与其他所有 256 位曲线互换使用。
为 secp256k1 创建的密钥或签名不能自动通过 P-256 或 Ed25519 等其他曲线进行验证。
Bitcoin 与 ECC
Bitcoin 历来使用 secp256k1 上的 ECDSA 来授权支出。
交易输入会提供满足某个先前输出锁定条件所需的信息。
对于常规的基于签名的条件,Bitcoin 节点会验证签名是否与相关交易数据和公钥匹配。
持有私钥可以让所有者生成所需签名,但不能绕过其他脚本条件。
Bitcoin 还在与 Taproot 相关的支出规则中使用 secp256k1 上的 Schnorr 签名。
BIP-340 规范为此规定了固定的 64 字节 Schnorr 签名格式和 32 字节公钥编码。
Schnorr 签名
Schnorr 签名是另一种可在椭圆曲线群上运行的数字签名构造。
它的数学线性特性适用于公钥聚合、多重签名协议和其他高级构造。
通过经过谨慎设计的协议,多个签名者可以生成一个聚合公钥和一个外观普通的签名。
与公开每个单独的公钥和签名相比,这可以减少区块链数据并改善隐私性。
安全聚合需要明确的协议,以防范恶意公钥攻击、随机数攻击和参与者恶意行为。
不遵循经过审查的方案,直接将公钥或签名值相加并不安全。
Ethereum 与 ECC
Ethereum 执行层账户使用 secp256k1 上的 ECDSA 对普通交易签名。
外部拥有账户的地址由其公钥派生而来。
网络可以通过签名恢复或验证与发送方关联的公钥,并确认交易已获授权。
Ethereum 当前的权益证明密钥文档说明,执行层账户密钥仍然是椭圆曲线密钥,而验证者使用单独的密钥系统。
Ethereum 验证者的职责使用 BLS12-381 曲线上的 BLS 签名。
因此,验证者的执行密钥和共识签名密钥用途不同,也使用不同的密码学方案。
可恢复 ECDSA 签名
一些加密货币系统会在 ECDSA 签名中包含恢复信息。
这类信息让软件可以根据消息和签名识别目标公钥,而不必单独传输完整公钥。
Ethereum 签名传统上用通常称为
ERC-2098 紧凑签名标准介绍了如何高效利用奇偶信息,以紧凑形式表示 secp256k1 签名。
公钥恢复是签名格式的一项功能,不会泄露私钥。
什么是 EdDSA?
EdDSA 是 Edwards 曲线数字签名算法(Edwards-Curve Digital Signature Algorithm)的缩写。
它是一类基于扭曲 Edwards 曲线设计的数字签名算法。
EdDSA 旨在支持高效实现、确定性签名,并抵御若干常见的实现错误。
Ed25519 是一种广泛使用的 EdDSA 方案,基于与 Curve25519 相关的数学结构。
RFC 8032 规范定义了 Ed25519 及相关 Edwards 曲线签名方案。
Ed25519 密钥和签名与 secp256k1 ECDSA 密钥和签名不兼容。
Solana 与 Ed25519
Solana 交易使用 Ed25519 签名来验证所需的签名账户。
每个交易签名者都会针对序列化后的交易消息提供一个 64 字节 Ed25519 签名。
当前的 Solana 交易文档介绍了签名结构和签名者要求。
Solana 还为特定应用指令提供 Ed25519、secp256k1 和 secp256r1 签名预编译验证程序。
支持多种验证方案,并不意味着它们的公钥或签名可以相互替代。
什么是 ECDH?
ECDH 是椭圆曲线 Diffie-Hellman(Elliptic Curve Diffie-Hellman)的缩写。
它是一种密钥协商方法,而非交易签名算法。
两个参与者分别将自己的私钥与对方的公钥结合,以计算出相同的共享密钥。
根据 ECDLP 假设,窃听者即使看到公钥,也不应能够计算出该密钥。
通常还需要将共享值传入密钥派生函数,然后用于加密或身份验证。
ECDH 本身不验证参与者身份,因此未经过身份验证的使用方式可能受到中间人攻击。
X25519
X25519 是一种广泛使用的椭圆曲线 Diffie-Hellman 函数,基于 Curve25519 的 Montgomery 形式。
它旨在实现高效的共享密钥建立和简明的实现方式。
RFC 7748 规范定义了 X25519 和 X448。
X25519 用于密钥协商,而非普通的加密货币交易签名。
虽然 X25519 和 Ed25519 使用相关的底层域,但它们的密钥含义不同,不应随意转换。
BLS 签名与配对友好曲线
BLS 签名是一种使用双线性配对的椭圆曲线签名。
在规则经过仔细定义的情况下,它支持高效聚合多个签名和公钥。
Ethereum 权益证明使用 BLS12-381 上的 BLS 签名来处理验证者提议和证明。
通过聚合,可以比逐个公布签名更紧凑地表示多个验证者的投票。
BLS12-381 确定性账户层级标准介绍了 BLS 密钥在 Ethereum 验证者基础设施中的使用。
BLS12-381 与 secp256k1 和 Ed25519 在曲线结构、签名算法、密钥派生和安全要求方面均不相同。
不同的椭圆曲线不能互换使用
椭圆曲线可以采用不同的方程、有限域、生成点、群阶、余因子、编码方式和安全假设。
secp256k1、P-256、Ed25519 和 BLS12-381 是不同的密码学系统。
作为一种公钥有效的 32 字节值,在另一种方案中可能无效或不安全。
开发者必须同时明确指定曲线、签名算法、哈希规则、序列化方式和域分离规则。
只使用 ECC 这样的通用标签,并不足以让两个应用实现互操作。
ECC 密钥长度与安全强度
安全的 256 位素数域椭圆曲线通常对应约 128 位的经典安全强度,可抵御通用离散对数攻击。
这并不意味着攻击者猜中密钥的概率是 1/128。
它描述的是一种近似工作量级;在相关攻击模型下,工作量相当于尝试约
具体安全性取决于曲线结构、算法、实现、随机数生成和攻击者能力。
由于攻击模型不同,不能直接将 256 位 ECC 密钥与 256 位对称加密密钥进行比较。
压缩公钥
素数域椭圆曲线上的一个点通常包含
对于许多曲线,一个有效的
因此,压缩公钥可以存储
这种方法可以缩小公钥体积,但不会减少私钥的搜索空间。
软件在使用公钥前必须正确解压缩并验证曲线点。
BIP-340 使用仅包含 x 坐标的公钥约定,并另外规定了如何选择相应的曲线点。
签名可塑性
签名可塑性是指有效签名可以被转换为同一消息和公钥对应的另一个有效签名。
基础 ECDSA 存在一种数学对称性,可能产生相关的
加密货币协议可以要求使用规范化的低
可塑性并不一定意味着攻击者可以在未经授权的情况下转移资金。
它可能会改变交易标识符,或干扰假定签名编码唯一的系统。
如果按照规范实现,具有强不可伪造性和固定编码的 Schnorr 方案可以提供更清晰的不可塑性特征。
密钥生成与熵
即使 ECC 在数学上很强,也无法保护由可预测信息生成的私钥。
钱包必须使用密码学安全的随机数生成器,或使用具备足够熵的种子进行经过批准的确定性派生。
姓名、生日、引言、短密码和用户自行选择的数字模式都不是安全的私钥。
即使生成的密钥长度符合预期,发生故障的硬件随机数生成器也可能产生可被猜到的密钥。
钱包应结合经过审查的熵源、执行范围检查,并保护助记词生成环境。
用户不应使用普通电子表格函数或编程语言中非密码学用途的随机函数生成私钥。
分层确定性钱包
分层确定性钱包可以通过一个主种子派生出多个相关密钥。
这样,用户只需备份一个种子,就能为不同交易或账户生成不同地址。
派生系统会按照既定标准使用密码学函数和椭圆曲线运算。
某些派生路径可以让用户根据扩展公钥生成子公钥,而无需暴露私钥。
在某些非强化派生系统中,将扩展公钥与泄露的子私钥错误组合可能造成危险。
钱包开发者和用户应遵循确切的派生标准,而不是自行设计非正式的密钥层级。
硬件钱包与 ECC
硬件钱包可以在专用设备中存储 ECC 私钥并执行签名运算。
通常情况下,连接的计算机接收公钥或签名,而不会接触私钥。
这可以降低恶意软件在通用计算机上窃取密钥的风险。
设备仍需显示足够的交易信息,让用户识别恶意收款地址或合约调用。
即使使用安全元件或隔离处理器,也无法保护批准了误导性交易信息的用户。
恢复短语仍然至关重要,因为它可以在其他设备上重新生成 ECC 密钥。
多重签名与门限 ECC
多重签名系统需要多个密钥授权,而不是只依赖单个密钥。
区块链脚本可以验证多个独立的 ECC 签名。
此外,密码学聚合或门限协议也可以让多个参与者协作生成一个签名。
MuSig2 规范定义了一种与 BIP-340 密钥和签名兼容的交互式多重签名方法。
门限系统需要谨慎处理随机数生成、参与者身份识别、通信记录验证,以及对恶意签名者的防范。
即使底层曲线安全,自行设计的门限协议仍可能泄露群组私钥。
侧信道攻击
侧信道攻击会从密码学实现的物理或运行行为中获取秘密信息。
可能利用的信号包括执行时间、功耗、电磁辐射、缓存行为、内存访问和故障响应。
如果实现针对不同私钥位执行了不同操作,即使数学上安全的算法也可能失效。
恒定时间编程会尝试避免可观察到的执行差异依赖秘密数据。
硬件钱包和签名服务器可能还需要物理防护、故障检测、安全内存和速率限制。
开发者应使用专为抵御侧信道攻击而设计并经过审查的库。
无效曲线攻击与子群攻击
攻击者可能提交格式错误的点,或提交属于意外群的点。
如果软件未经验证就在该点上执行私钥运算,返回结果可能泄露私钥信息。
小子群攻击可以迫使计算在可能结果有限的群中进行。
安全实现会按照所选曲线和协议要求应用验证规则和余因子规则。
某些现代曲线设计简化了部分验证过程,但开发者仍必须遵循规定的解码规则。
故障攻击
故障攻击会故意在加密算法执行过程中引入错误。
攻击者可能操纵电压、时钟时序、温度、内存或计算流程。
比较正确签名和故障签名有时可以暴露私钥。
高安全级别的签名设备可能会在返回签名之前验证其计算结果。
设备还可以使用冗余设计、故障传感器、加固硬件和受限错误报告。
开发者为什么应使用经过审查的库?
椭圆曲线运算很难实现得既正确又安全。
开发者编写的代码可能通过普通测试,却仍会受到计时攻击、无效点攻击、随机数偏差、模约简错误或边缘情况的影响。
经过审查的库能够提供优化运算、测试向量、标准化序列化和安全加固功能。
开发者应使用支持区块链所需特定曲线和协议的库。
还应核实库的版本、编译选项、平台行为和依赖完整性。
在生产环境中保护加密货币资产时,直接复制文章或代码片段中的简短 ECC 实现并不安全。
域分离
域分离可以确保为一种用途生成的签名或哈希不能自动用于另一种用途。
协议可以在签名之前加入网络标识符、应用名称、消息类型、合约地址、版本或其他上下文。
如果没有域分离,一条作为无害登录请求签署的消息可能会在其他地方被解释为金融授权。
加密货币钱包应显示签名域,并清楚地区分交易和普通消息。
开发者必须遵循目标区块链规定的精确消息编码和域分离规则。
重复使用私钥
在无关的网络或应用之间重复使用同一个 ECC 私钥会增加风险。
一个应用中薄弱的签名实现可能泄露另一个应用中控制资产的密钥。
不同系统可能以不兼容的方式哈希、编码或验证消息。
跨应用重复使用密钥也会让用户活动更容易被关联起来。
使用不同密钥可以降低单个设备、库或签名协议遭入侵造成的影响。
钱包用户应避免将高价值助记词导入不必要的应用。
ECC 与智能合约
如果区块链提供了合适的运算,智能合约就可以验证椭圆曲线签名。
Ethereum 通过
其他预编译合约或合约库可以支持其他曲线和证明系统。
如果网络没有提供专用预编译合约,链上椭圆曲线运算可能成本高昂。
合约还必须防范重放攻击、编码歧义、可塑性签名、过期授权和错误的签名者域。
签名验证只能证明密钥授权,不能证明签署的操作在经济上安全。
ECC 与零知识证明
许多零知识证明系统也使用椭圆曲线。
配对友好曲线可以支持简洁证明和高效验证。
曲线点可以表示承诺、证明元素或验证密钥。
证明系统的安全要求可能不同于交易签名系统。
适合普通签名的曲线,并不一定适合配对证明系统,也不一定能在其中高效运行或保证安全。
可信设置假设、电路设计、域兼容性、子群检查和证明系统可靠性都需要单独评估。
ECC 在加密货币中的优势
ECC 能以相对紧凑的密钥和签名提供较强的经典公钥安全性。
它使用户能够授权交易,而无需泄露私钥。
它便于去中心化网络参与者高效验证。
它支持密钥协商、签名聚合、门限签名、承诺和零知识证明运算。
针对不同应用,已有多种经过深入研究的曲线和标准化算法可供使用。
ECC 的高效率使其成为现代加密货币钱包和共识系统的基础技术。
ECC 的局限性
ECC 容易受到实现错误、随机数质量低、签名随机数重复使用和侧信道泄露的影响。
不同曲线和签名方案不会自动互操作。
ECC 本身不会加密普通的公有区块链交易。
它无法阻止用户批准恶意转账或泄露恢复短语。
如果量子计算机能力足够强,ECC 的安全假设可能受到威胁。
将运行中的区块链迁移到另一种签名系统,可能需要修改钱包、地址、硬件、交易格式、智能合约和共识软件。
量子计算与 ECC
足够强大的容错量子计算机可以使用 Shor 算法高效求解椭圆曲线离散对数问题。
这会使攻击者能够从已公开的公钥计算出私钥。
目前没有已知的公开量子计算机能够在实际规模上对完整长度的加密货币曲线执行这种攻击。
不过,运行周期很长的区块链系统必须在这类硬件问世之前做好规划。
Ethereum 当前的后量子安全指南指出,ECDSA、BLS 签名和椭圆曲线承诺都需要在未来迁移。
用户应关注官方协议指南,而不是因未经证实的“ECC 已被攻破”说法而恐慌。
后量子密码学
后量子密码学使用被认为可以抵御经典计算机和大型量子计算机攻击的数学难题。
2024 年 8 月,NIST 正式发布了 ML-KEM 的 FIPS 203 标准、ML-DSA 的 FIPS 204 标准,以及 SLH-DSA 的 FIPS 205 标准。
NIST 后量子标准公告建议开始制定迁移计划。
ML-KEM 用于建立共享密钥,ML-DSA 和 SLH-DSA 则用于数字签名。
与常用 ECC 系统一样,这些方案的密钥或签名通常更大。
区块链迁移需要在安全性、交易大小、验证成本、地址兼容性和不活跃资金的恢复方面进行权衡。
密码学敏捷性
密码学敏捷性是指在不必重建整个系统的情况下替换或组合密码学算法的能力。
具备密码学敏捷性的钱包可以识别账户使用的签名方案,并支持未来的迁移路径。
在迁移期间,协议可以采用混合签名,同时要求现有 ECC 签名和后量子签名。
与签名规则直接由底层协议固定的账户相比,智能账户有时可以更灵活地升级算法。
密码学敏捷性必须经过谨慎设计,因为不安全的迁移或降级路径可能削弱整个系统。
开发者如何安全使用 ECC?
开发者应选择目标区块链或标准要求的确切曲线和算法。
应使用维护活跃、具有良好审查记录的密码学库。
私钥和签名随机数必须通过安全流程生成。
实现应验证公钥、曲线点、子群成员关系、签名取值范围和规范编码。
依赖秘密数据的运算应采用恒定时间技术。
协议应明确消息编码、链标识、应用上下文、随机数管理和重放保护。
测试应涵盖官方测试向量、格式错误的点、无效签名、边界值、随机数故障和跨网络重放尝试。
高价值系统应接受独立的密码学和实现审查。
加密货币用户如何保护 ECC 密钥?
用户应使用可信的软件或硬件,并通过安全熵生成钱包。
绝不能在网站、消息或客服表单中输入恢复短语和私钥。
签名前应在可信显示屏上核验重要交易详情。
高价值资金可以通过硬件隔离、多重签名策略、支出限额或分层存储进行保护。
用户应避免将同一助记词导入多个应用。
备份应经过测试,同时避免让秘密信息暴露给不受信任的设备。
钱包和协议更新应通过经过验证的官方渠道获取。
ECC 签名的加密货币交易示例
假设 Alice 通过一个 ECC 私钥控制某个加密货币账户。
她的钱包会构建一笔将代币发送至 Bob 地址的交易。
钱包按照区块链规定的确切签名规则对交易进行序列化。
钱包会按照签名方案的要求,对序列化后的消息进行哈希或其他处理。
钱包使用 Alice 的私钥和安全签名随机数或确定性签名流程生成签名。
交易和签名随后会广播到网络。
每个验证节点都会获取或恢复 Alice 的公钥,并验证签名。
节点还会检查 Alice 的余额、随机数、费用和所有其他共识规则。
有效 ECC 签名能够证明所需密钥授权了交易,但不能取代其他交易有效性检查。
ECC 常见错误
一种常见错误是认为 ECC 会加密每笔加密货币交易。
另一种错误是将公钥与钱包地址视为同一事物。
第三种错误是重复使用 ECDSA 签名随机数。
第四种错误是使用普通随机数函数生成私钥。
第五种错误是接受攻击者提供的、未经验证的公钥点。
第六种错误是认为所有 256 位椭圆曲线都可以互换。
第七种错误是在没有专家审查的情况下,为生产资金托管编写自定义曲线运算代码。
第八种错误是在无关应用和网络中重复使用同一私钥。
第九种错误是认为有效签名就能证明签署的交易在财务上安全。
第十种错误是认为 ECC 在没有迁移计划的情况下可以抵御未来所有量子计算机。
常见问题
加密货币中的 ECC 是什么意思?
ECC 指椭圆曲线密码学,是一类用于加密货币密钥、签名、密钥协商和高级证明的公钥方法。
ECC 在加密货币中的主要用途是什么?
其主要用途是生成和验证授权区块链交易的数字签名。
ECC 会加密加密货币交易吗?
通常不会。大多数公有区块链交易会进行签名并公开读取,而非加密。
什么是 ECC 私钥?
它是用于生成公钥和授权签名的秘密标量。
什么是 ECC 公钥?
它是由私钥通过椭圆曲线算法推导得出的曲线点,可用于验证数字签名。
公钥能泄露私钥吗?
如果使用安全曲线并正确实现,在现有经典计算能力下,无法实际通过公钥恢复私钥。
什么是椭圆曲线离散对数问题?
这是一个难题:已知生成点和结果公钥点时,需要恢复私有标量。
什么是 ECDSA?
ECDSA 是一种椭圆曲线数字签名算法,广泛用于授权加密货币交易。
什么是 secp256k1?
secp256k1 是一种标准化的 256 位椭圆曲线,Bitcoin、Ethereum 执行层账户和其他一些加密货币系统都在使用。
Bitcoin 使用 ECC 吗?
使用。Bitcoin 使用 secp256k1 上的 ECDSA,并在 Taproot 支出中使用 secp256k1 Schnorr 签名。
Ethereum 使用 ECC 吗?
使用。Ethereum 执行层账户使用 secp256k1 ECDSA,权益证明验证者则使用 BLS12-381 上的 BLS 签名。
Solana 使用 ECC 吗?
使用。Solana 交易签名者使用 Ed25519 签名。
什么是 Ed25519?
Ed25519 是一种 EdDSA 签名方案,使用与 Curve25519 有关的 Edwards 曲线数学结构。
什么是 Schnorr 签名?
这是一种签名构造,在通过安全协议实现时具有线性和聚合方面的优点。
什么是 ECDH?
ECDH 是一种椭圆曲线密钥协商方法,可以让双方计算出共享密钥。
什么是压缩公钥?
这是一种紧凑的曲线点编码,存储一个坐标以及足以重建另一个坐标的信息。
ECDSA 为什么必须使用唯一的随机数?
重复使用或预测随机数可能让攻击者计算出私钥。
私钥可以被猜中吗?
安全生成的密钥具有极大的搜索空间,但由人类自行生成或随机性不足的密钥可能被猜中。
所有 ECC 曲线的安全性都相同吗?
不相同。安全性取决于曲线参数、算法设计、密钥长度、实现、验证方法和已知数学攻击。
ECC 签名可以被复制吗?
签名数据可以被复制,但重放保护和消息绑定决定了该签名是否能够授权其他操作。
有效签名能保证交易安全吗?
不能。它只能证明某个密钥授权了操作,不能证明目标地址、合约、价格或财务决策安全。
硬件钱包能保护 ECC 密钥吗?
硬件钱包可以隔离密钥和签名操作,但用户仍需核验交易详情并保护恢复备份。
多重签名钱包可以使用 ECC 吗?
可以。它们可以验证多个 ECC 签名,也可以使用经过审查的聚合和门限签名协议。
量子计算机能破解 ECC 吗?
足够强大的容错量子计算机可以使用 Shor 算法破解 ECC,但目前没有已知的公开机器能够在加密货币规模上执行这种攻击。
什么技术会取代 ECC?
未来系统可能使用标准化的格基、哈希基或其他后量子签名方案,迁移期间也可能与 ECC 并用。
ECC 目前安全吗?
如果曲线选择和实现都正确,ECC 目前仍可抵御已知的实际经典攻击;运行周期较长的系统则应为后量子迁移做好准备。
总结
椭圆曲线密码学是保护加密货币所有权和交易授权的核心技术之一。
它在秘密私钥和可公开分享的公钥之间建立单向数学关系。
数字签名方案利用这种关系,在不泄露私钥的情况下证明授权。
Bitcoin 使用 secp256k1 上的 ECDSA 和 Schnorr 签名;Ethereum 执行层账户使用 secp256k1,验证者使用 BLS12-381;Solana 则使用 Ed25519 进行交易签名。
ECC 还可支持密钥协商、多重签名协议、门限签名、承诺和零知识证明系统。
ECC 的安全性不只取决于曲线数学本身。
安全随机数、唯一签名随机数、公钥验证、恒定时间实现、域分离、安全密钥存储和经过审查的库都至关重要。
有效的 ECC 签名可以证明所需密钥授权了特定数据,但不会加密公开交易,也不能保证该操作在财务上安全。
如果实现正确,ECC 目前仍能抵御已知的实际经典攻击;但能力足够强大的量子计算机会威胁其离散对数基础。
因此,加密货币开发者既要保护当前密钥,也要制定可信的迁移路径,逐步转向后量子密码学。
您可能也喜欢
反恐融资(CTF)
框架
波动性爆发
热门
目前热门备受市场关注的加密货币
最高成交量
按交易量计算交易量最大的加密货币

