You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSSL中add()函数定义位置查询及射影坐标点加法实现问询

OpenSSL中EC_POINT_add关联的add()函数定义与射影坐标系点加法实现

一、add()函数的定义位置

EC_POINT_add里调用的add()是椭圆曲线方法结构体EC_METHOD中的函数指针,具体实现依赖曲线类型和使用的坐标系:

  • 通用射影坐标系下的加法实现核心代码在crypto/ec/ecp_add.c中,ecp_add_proj是最基础的射影点加法实现函数,多数曲线的add指针会指向这个函数或其优化版本。
  • 针对特定曲线(如NIST P-256、secp256k1)的优化实现,会放在crypto/ec/ecp_nistp256.c、crypto/ec/ecp_secp256k1.c这类曲线专属文件中,这些文件里的加法函数会利用曲线特性做性能优化。
  • 函数指针的绑定逻辑在曲线方法初始化函数中完成,比如ec_GFp_simple_method()会将add字段指向通用射影加法实现,而特定曲线的方法初始化函数会替换为优化后的版本。

二、射影坐标系下点加法的实现逻辑

OpenSSL主要采用雅各比射影坐标系(比常规射影坐标系更少除法操作)来实现点加法,核心流程如下:

  1. 特殊点判断:先检查输入点是否为无穷远点,若其中一个是无穷远点,直接返回另一个点作为结果。
  2. 中间值预计算:
    • 计算U1 = X1 * Z2²,U2 = X2 * Z1²
    • 计算S1 = Y1 * Z2³,S2 = Y2 * Z1³
  3. 分支处理同点/异点:
    • 同点(倍点)场景:若U1 == U2且S1 == S2,执行倍点运算:
      • 计算M = 3*X1² + a*Z1⁴(a为椭圆曲线的参数)
      • 推导新坐标:X3 = M² - 8*X1*Y1²,Y3 = M*(4*X1² - X3) - 8*Y1⁴,Z3 = 2*Y1*Z1
    • 异点场景:若两点不同,计算H = U2 - U1,R = S2 - S1:
      • 推导新坐标:X3 = R² - H³ - 2*U1*H²,Y3 = R*(U1*H² - X3) - S1*H³,Z3 = H*Z1*Z2
  4. 有限域模运算:所有计算步骤都在曲线对应的有限域内完成,OpenSSL会针对不同CPU架构实现硬件加速的模运算,大幅提升计算速度。
  5. 坐标保留策略:射影坐标系下运算完成后,默认保留射影坐标以避免昂贵的模逆运算,只有当需要转换为仿射坐标时,才会执行归一化操作。

内容的提问来源于stack exchange,提问作者Nikhil Srinivas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:16:16