当前位置: 首页 > news >正文

椭圆曲线里标量乘法

这张图在讲椭圆曲线里标量乘法(scalar multiplication):给定一个点 P 和整数 n,要算 nP(把点 P 在群里“加”自己 n次)。核心技巧就是Double-and-Add(倍加法)

  • Double(倍点):Q←2Q(等价于 Q+Q)

  • Add(加点):若某一位需要,就把当前的 Q 加进结果:R←R+Q


1)原理一句话

把整数 n 写成二进制:

那么

所以你只需要从 P,2P,4P,8P,…这些“2 的幂倍”里,把二进制位为 1 的那些挑出来加起来即可。
正好可以用“不断倍点”得到:P→2P→4P→8P→⋯

2)图里的例子:n=151

图上写 “Imagine, n=151, we want to compute nP”
先把 151 写成二进制:

  • 也就是

因此:

图中气泡也在强调这点:已经算到的中间结果

16P+4P+2P+P

“离最终结果很近”,只差再把 128P 加上去。


3)图中步骤在做什么(从低位到高位的做法)

图里的流程是典型的“从最低位开始(LSB-first)”:

  • 一开始当前倍数 Q=P,结果 R=0

  • 看二进制最低位是 1,就把 Q 加进 R

  • 然后把 Q倍点(变成下一档:2P,4P,8P,…)

  • 下一位是 1 就加,不是 1 就跳过

对照图里列出的动作:

  1. 取 P(此时 Q=P)

  2. 加 P:R=P(因为最低位

  3. 倍点:Q=2P

  4. 加 2P:R=2P+P(

  5. 倍点:Q=4P

  6. 加 4P:R=4P+2P+P(

  7. 倍点:Q=8P

  8. 不加 8P:R不变(因为

  9. 倍点:Q=16P

  10. 加 16:R=16P+4P+2P+P(

后面继续倍点到 32P,64P,128P,对应位是 0、0、1,最终再把 128P 加进去,就得到 151P。


4)为什么它快?

如果你用“朴素加法”算 151P,要加 150 次点加法。
Double-and-Add 用二进制只需要:

  • 倍点次数:大约是位数(这里 151 是 8 位,倍点约 7 次)

  • 加点次数:大约是二进制里 1 的个数(popcount)减 1(这里有 5 个 1,加点约 5 次)

所以复杂度从 O(n)变成 O(log⁡n),这就是椭圆曲线能高效做签名/密钥交换的关键之一。


5)一个非常直观的类比

把 nP 想成“用很多张面额为 1,2,4,8,16,… 的钞票凑钱”:

  • 倍点:相当于把面额翻倍(1→2→4→8…)

  • 加点:相当于某一位是 1,就把这张钞票放进钱包(累加到结果)

这张图是在用几何方式把椭圆曲线的“标量乘法”拆成一连串倍点(doubling)来做——也就是把

变成“不断翻倍”的过程:G→2G→4G→8G→⋯

图里每种颜色其实在表达固定含义:

  • 红色曲线:椭圆曲线 E

  • 蓝色线段:用于群运算的直线(这里主要是“切线”)

    • 做倍点时,用的是“过该点的切线”

  • 绿色竖箭头:关于 x 轴的镜像(取负号)

    • 若点是 (x,y),那么 −P=(x,−y)(在有限域里是


1) 图中一步步在算什么:G→2G→4G→8G

A. 从 G 得到 2G

  1. 在点G处画切线(图中上方那条蓝线的方向)。

  2. 这条切线会再次交椭圆曲线于一个点,图上标成−2G(注意是负号)。

  3. 再沿绿色竖箭头把 −2G关于 x 轴翻到对称点,就得到2G

这就是倍点公式的几何版本:


B. 从 2G 得到 4G

同样套路:

  1. 2G处画切线(图中那条斜着的大蓝线)。

  2. 切线再次交曲线于−4G(图上标的 −4G)。

  3. 绿色竖箭头把 −4G翻过去得到4G


C. 从 4G 得到 8G

  1. 4G处画切线(图下方较短的蓝线)。

  2. 得到交点−8G(图上标的 −8G)。

  3. 绿色竖箭头翻过去得到8G


2) 这就是“标量乘法”的核心:用二进制不断倍点

你现在已经在图里“预计算”出了:

它们对应二进制权重:

1,2,4,8

所以任意 kkk 都能写成二进制:

算法上就是Double-and-Add

  • 从最高位往低位扫:每一位都做一次Double(结果翻倍)

  • 如果该位是 1,再做一次Add(把对应的加进去)

举个直接用图里点的例子:
如果,那

13G=8G+4G+G

你先用倍点得到 8G,再把 4G 和 G依次加进去就行。


3) 图里“负号”为啥这么重要?

因为椭圆曲线的加法规则是:

  • 直线与曲线的第三个交点,得到的是“和的相反数”

  • 所以最后要做一次关于 x 轴的翻转(绿色箭头)才能得到真正的和

这就是图里每次都会出现 −2G,−4G,−8,然后再翻成 2G,4G,8G 的原因。

下面我用一个**玩具椭圆曲线(小素数域)**把图里的 Double-and-Add 真正算一遍,让你看到每一步的点坐标怎么变。


0)我们要算什么?

椭圆曲线里的标量乘法:给定点 P 和整数 n,计算

直接加 n−1 次太慢,所以用Double-and-Add(倍加法)

  • Double:倍点 Q←2Q

  • Add:如果该二进制位是 1,就累加 R←R+Q


1)点加/倍点公式(在有限域上)

设曲线:

单位元是无穷远点 O(相当于“0”)。

点加

(当​,且不是互为相反点)

除法在模 p下就是乘以逆元:

倍点

然后同样算 x3,y3​。


2)选一个“玩具曲线”和点

我们选素数 p=211,曲线:

取点:

P=(152,176)

它确实在曲线上,因为:

  • 左边

  • 右边


3)按照图里的例子:算 151P

先把 151 写成二进制:

所以:

这正对应图里气泡说的:中间结果像 16P+4P+2P+P,最后再补一个 128P。


4)先用“不断倍点”得到 P,2P,4P,…,128P

从 P 一直倍点(每次Double)得到:

  • P=(152,176)

  • 2P=(167,141)

  • 4P=(73,120)

  • 8P=(102,101)

  • 16P=(50,24)

  • 32P=(44,48)

  • 64P=(90,12)

  • 128P=(83,203)

(这些都是真按上面的模逆+公式算出来的。)


5)真正执行 Double-and-Add(从低位到高位,和图的风格一致)

151 的二进制从最低位到最高位是:

[1,1,1,0,1,0,0,1]

流程:初始化 R=O,当前倍数点 Q=P。每处理一位:

  • 若 bit=1:R←R+Q

  • 然后 Q←2Q(准备下一位)

下面是每一步的实际点坐标

位ibit当前是否加进 R新的 R
01P=(152,176)R=(152,176)
112P=(167,141)R=(85,160)
214P=(73,120)R=(111,105)
308P=(102,101)不加R=(111,105)
4116P=(50,24)R=(47,63)
5032P=(44,48)不加R=(47,63)
6064P=(90,12)不加R=(47,63)
71128P=(83,203)R=(31,93)

因此最终:

顺带一提:图里气泡的“中间结果”

在这个玩具曲线上确实就是:

然后最后再加 128P 得到 151P。

http://www.cnnetsun.cn/news/145136.html

相关文章:

  • AI如何自动生成JSON可视化工具?快马平台实战
  • HyperDown:解决Markdown解析混乱的PHP利器,让内容创作更高效!
  • FaceFusion无缝融合算法详解:从特征点提取到纹理合成
  • CUT3R:终极实时三维感知模型完整指南
  • 极速上手 Oxigraph:高性能 SPARQL 图数据库完全指南
  • 27、Windows PowerShell 错误处理与调试指南
  • 从“做13休1”到“做6休1”:外贸企业如何跨越ESG合规的生死线?
  • 基于深度学习的二维码检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 给小白看的LLM科普:从“鹦鹉学舌”到“举一反三”,AI的大脑到底发生了什么?
  • AI如何帮你快速实现Java MQTT物联网开发?
  • 最适合新手的vite-plugin-html入门指南,手把手教你配置项目HTML模板。
  • 用AI生成二次元角色:快马平台实战指南
  • 1小时打造无光标Markdown编辑器原型
  • 5分钟快速上手:用gumbo-parser构建专业级HTML5解析工具
  • FaceFusion实战教程:如何利用大模型Token实现高效推理
  • FaceFusion能否用于古代帝王复原?基于史料画像生成
  • 企业如何落地持续学习文化:3个成功案例
  • AI智能棋盘结合STC89C52驱动蜂鸣器提示落子
  • FaceFusion在游戏开发中的潜在用途探索
  • PanguSync说明书
  • 对比评测:传统vsAI增强的MyBatis-Plus生成效率
  • MySQL小白必看:metadata lock问题入门指南
  • 前端js获取UUID的三种方式,零基础入门到精通,收藏这篇就够了
  • web前端开发常用工具有哪些?零基础入门到精通,收藏这篇就够了
  • 银行核心系统备库“降本增效”探索:超融合承载Oracle ADG备库的测试验证
  • Mender OTA 嵌入式设备快速部署终极指南
  • PostHog容器化部署实战:从零到一的完整指南
  • 如何快速将SVG完美渲染到Canvas:开发者的终极解决方案
  • 基于SpringBoot的学生成绩综合评价方案设计与实现(源码+lw+部署文档+讲解等)
  • Linux面部识别终极指南:如何快速配置Howdy-GTK图形界面