密码学 | 椭圆曲线密码学 ECC 入门(四)

目录

正文

1  曲线方程

2  点的运算

3  求解过程

4  补充:有限域


⚠️ 知乎:【密码专栏】动手计算双线性对(中) - 知乎

⚠️ 写在前面:本文属搬运博客,自己留着学习。注意,这篇博客与前三篇博客来源于不同网站,因此没有逻辑联系。在本文中,你将看到一个椭圆曲线的循环群是如何诞生的。


正文

上一篇分享了 “模运算” 相关的知识,并且计算了一些有限域的例子,这一篇我们讨论在通用零知识证明中经常提到的椭圆曲线和双线性配对。

很遗憾,尚未找到所谓的 “上一篇” 文章。此外,这篇文章也没有讲双线性对。

椭圆曲线作为双线性对的基础和前置知识,我们首先介绍一下其在实数域上的表现形式,然后通过计算的方法列出 “F_{101}” 上的全部元素的列表。

有限域一般用 “F_P” 来表示,其大小是大素数 P 。在这个有限域中,包含了 P 个元素,包括数字 0 到 P-1 。这里的 “F_{101}”(Latex 写法)表示素数为 101 的有限域。

1  曲线方程

椭圆曲线的一般形式的方程其实比较复杂,称为 Weierstrass 方程,形如下面的形式:

y^2+axy+by=x^3+cx^2+dx+e

区块链中的椭圆曲线用的不是一般形式,而是后文提到的简化形式。

我们先将 a, b, c, d, e 随意的取值为 1, 2, 3, 4, 5,并通过画图来查看曲线在直角坐标系上的表现形式。根据二次方程求根公式(假设求根公式可用),我们将其变换为 x 关于 y 的函数:

y=\frac{1\pm \sqrt{4x^3+12x^2+16x+20}}{2}

二次方程求根公式就是我们在初中会学习的那个求根公式。

根据方程作图如下:

用几何画板画的图。

根据上面的方程和作图过程了解到,曲线由上下两个半支组成,关于 y=0.5 对称。

求解 f(x) = g(x) 时的 (x, y) 就能得到 y=0.5,可惜我已经不是高中生。

对称的总是美的,但是这个曲线却有一点瑕疵,它的对称轴并不是 x 轴而是 y=0.5。考虑到 Weierstrass 太过复杂,人们更经常使用的是在 Weierstrass 方程的基础上进行一些坐标变换(平移和缩放)和参数化简后的形式。该形式关于 x 轴对称:

y^2=x^3+ax+b

当取 a=0,b=3 时,画出曲线如下图,容易验证 (1, 2) 是曲线上一点,对称的 (1, -2) 也是。

通过方程我们画出了曲线的图像,但是说这就是椭圆曲线的图像其实并不准确。

准确地说,我们画的是在实数域上这个方程的图像。在复数域上当然有更多的点也满足曲线方程但是我们的图像中并没有体现,例如 (-2, √5i) 。如果把曲线看作点的集合,那数域的扩张直接影响到我们要讨论的这个集合的大小,这在本文后半部分我们还会看到。

不懂复数也没关系,后面不会再提到。

另外为了让其拥有更多的性质,我们认为椭圆曲线其实还包括一个 “无穷远” 点。这个点在图中并不能体现出来,我们也不能以直角坐标的形式写出这个点的坐标,但是当我们说椭圆曲线时默认其点的集合中包含这个点。“无穷远” 点一般用 “O” 表示。

所谓的 “无穷远” 点更多是一个服务于概念的点,我们不能也不需要用坐标表示出来。

2  点的运算

有了 “元素的集合” 还需要有 “在集合上的运算”

椭圆曲线上的点(有无穷个)就是椭圆曲线 “元素的集合”,但是为了构建密码算法还需要定义点的运算。这里我们只需要定义一种特殊的基本运算就可以,不妨将这种运算称作 “加法”,用 “+” 表示。

个人理解:把这里的 “定义一个运算” 理解为小学做的定义新运算就行了。

通过几何意义可以清楚地理解这种运算的定义,例如我们选取了曲线上的两个点 A 和 B 计算加法,把 A+B 的结果记为 C,过程如下:

  1. 过 A 点、B 点做直线,交曲线于 T 点;
  2. 过 T 点做 x 轴的垂线,交曲线于 C 点,C 点即为所求;

如下图所示:

回忆:密码学 | 椭圆曲线 ECC 密码学入门(二)中作者比喻的台球运动。

需要说明的是:

① 当两个 “加数” 位置的点(即 A 点和 B 点)为同一个点时,上述步骤 1 中所做的,其实是过该点的 切线

② 当 A 点、B 点的连线垂直于 x 轴时,我们规定直线 AB 和曲线的第三个交点(即除 A 点、B 点外的第三个交点)是 无穷远点 “O”

在这样的规则下容易发现:

  • 任何 P 点都有一个对应的 P’ 点,使得 P+P’=O;
  • 任何 A 点和 O 点的运算的结果都是 A 点本身;
  • 由于连线 AB 和连线 BA 其实是同一条直线,因此这里定义的点的加法满足交换率。

针对第一条,P 和 P' 本质上说的就是 P 点和自己的对称点,即任何点及其对称点做 “加法” 都等于 O;针对第二条,将 A 点和 O 点连线,一定交曲线于 O 点本身,再过 O 点作垂线,又交于 A 点本身;针对第三条,也就是说 A+B=B+A=C 。

3  求解过程

根据定义再结合一些解析几何的知识,就可以求出 “点加法” 的坐标计算公式。

很遗憾,以我上大学后的知识水平是解不出来的。

假设椭圆曲线的方程为:

y^2=x^3+3

需要计算 A+B=C 这一过程中的坐标公式。

假设 A 点和 B 点的坐标分别为 (x_a, y_a) 和 (x_b, y_b),则 C 点的坐标如下:

\left\{\begin{matrix} x_c=\lambda ^2-x_a-x_b\\ y_c=\lambda(x_a-x_c)-y_a \end{matrix}\right.

其中 λ 是直线 AB 的斜率:

\lambda =\frac{y_b-y_a}{x_b-x_a}

特别地,当 A、B 重合时,λ 是过 A 点的切线斜率:

\lambda =\frac{3x_a^2}{2y_a}

就是椭圆曲线方程的等号两边同时求导再相除。

上述公式是没有问题的,的确是要代入 x_c 的值来求 y_c 的值。

现在我们将转而讨论 有限域 上的椭圆曲线,其上的椭圆曲线表现为一些散布的点。在有限域上,A+B 虽然已经没有明确的几何意义,但是有同样的计算公式。

我们已经验证过 (1, 2) 是椭圆曲线上的点,那么我们就把该点记为 G,并且从该点开始,计算 G、G+G、G+G+G…… 看看会有怎样的规律。

G+G 为例,我们进行演算,首先计算 λ,也就是 G 点(切线)的斜率:

\lambda =\frac{3x_a^2}{2y_a}=\frac{3\times 1^2}{2\times 2}\ \mathrm{mod}\ 101=3\times 4^{-1}\ \mathrm{mod}\ 101=3\times 76\ \mathrm{mod}\ 101=26

为什么是 G 点切线的斜率?答:G+G 就等价于 A 点和 B 点重合的情况,因为 A 点是 G 点,B 点也是 G 点。为什么 4^{-1} 一下子变成了 76?答:因为这里使用了 “模乘法逆元”,属于是一个数学知识😇

然后计算 C 点坐标:

\left\{\begin{matrix} x_c=(26^2-1-1)\ \mathrm{mod}\ 101=68 \\ y_c=(26\times (1-68)-2)\ \mathrm{mod}\ 101=74\end{matrix}\right.

因此 G+G 的坐标为 (68, 74)。

就是把 G 点的坐标 (1, 2) 和斜率 λ 代入进去。

2G+G 稍稍有不同,主要是 λ 需要从切线斜率修改为直线 AB 的斜率:

\lambda =\frac{y_b-y_a}{x_b-x_a}=\frac{74-2}{68-1}\ \mathrm{mod}\ 101=(72\times98)\ \mathrm{mod}\ 101=87

同样地,代入公式计算 2G+G 的坐标:

 \left\{\begin{matrix} x_c=(87^2-1-68)\ \mathrm{mod}\ 101=26 \\ y_c=(87\times (1-26)-2)\ \mathrm{mod}\ 101=45\end{matrix}\right.

因此我们也计算出 2G+G=3G 的坐标 (26, 45),以此类推进行计算,我们得到下表:

0O1(1, 2)2(68, 74)3(26, 45)4(65, 98)
5(12, 32)6(32, 42)7(91, 35)8(18, 49)9(18, 52)
10(91, 66)11(32, 59)12(12, 69)13(65, 3)14(26, 56)
15(68, 27)16(1, 99)17O

读者可以选择表中的点,例如 (32, 42),来验证其是否在曲线上,相关演算我们不在本文赘述。

接着,我们展示 17 个点在直角坐标系中的分布(无法展现 O),读者可以体会其中的对称之美:

可能会好奇 16G+G 的结果到底是多少,以至于能称之为无穷点 O 点。个人认为,无穷点就是一个服务于 “模” 和 “循环” 这一概念的点,不能也不需要用坐标表示出来。

经过计算和验证可以发现,这一系列点构成了一个周期为 17 的循环。如果我们将 k 个 G 相加记为kG,并且将 O 看作 0G,同时定义 17G=O 。这像极了模 17 加法的规律,并且在模 17 加法和为 0 的两个数(即 0 和 17)对应的两个椭圆曲线点的和正好是 O 。

个人理解:“模 17 加法” 就是指,从 0 一直加一加到 17,再加一的话又回到 0 。

我们说这样的 17 个点和加法一起构成一个 有 17 个元素的循环群

因为这只是一篇科普性质的文章,我们不给出 循环群 的严格定义,但是正如它的名字中强调的 “循环”,循环群 最突出的性质就是能够由某个元素不断运算从而得到全部。

需要强调的是这 17 个点并不是 F_{101} 上椭圆曲线的全部,但仅利用这 17 个元素组成的集合我们已经能够在其中完成点的加法运算,也就是说任意选择集合中两个点进行加法,其结果不会跳出到集合之外。

4  补充:有限域

域(Field)的定义是有如下特性的集合:

  • 定义了加法和乘法;
  • 集合里的元素经过加法和乘法计算,结果仍然在集合内;
  • 计算符合交换率、结合率、分配率;
  • 加法和乘法都有单位元素(集合里的值都有负数,集合里的非零值都有倒数);

举个例子,我们常见的实数集是域,但整数值不是域,这是因为除了 1,其它数的倒数都不是整数。特别地,具有有限个元素的域就是 有限域

个人理解:不严格地来说,上述 17 个点构成的集合是一个有限域,因为集合里的元素经过 “加法” 计算,结果仍然在集合内。同时,“加法” 计算满足交换律。前文讲述的循环群只是一个加法循环群,事实上应该还有乘法循环群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/558906.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode in Python 200. Number of islands (岛屿数量)

岛屿数量既可以用深度优先搜索也可以用广度优先搜索解决,本文给出两种方法的代码实现。 示例: 图1 岛屿数量输入输出示意图 方法一:广度优先搜索(bfs) 代码: class Solution:def numIslands(self, grid):if not grid:return 0…

【WSL报错】执行:wsl --list --online;错误:0x80072ee7

【WSL报错】执行:wsl --list --online;错误:0x80072ee7 问题情况解决方法详细过程 问题情况 C:\Users\17569>wsl --list --online 错误: 0x80072ee7 解决方法 开系统代理,到外网即可修复!!!!&#x…

Yolov8项目实践——基于yolov8与OpenCV实现目标物体运动热力图

概述 在数据驱动和定位的世界中,对数据进行解释、可视化和决策的能力变得日益重要。这表明,使用正确的工具和技术可能是项目成功的关键。在计算机视觉领域,存在许多技术来解释从视频(包括录像、流媒体或实时视频)中获…

「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到技术原理再到业界常用检测工具推荐

软件成分分析(Software Composition Analysis,SCA)是一种用于识别和分析软件内部组件及其关系的技术,旨在帮助开发人员更好地了解和管理其软件的构建过程,同时可帮助安全人员揭秘软件内部结构的神秘面纱。SCA技术的发展…

递归、搜索与回溯算法:回溯,决策树

回溯算法是⼀种经典的递归算法,通常⽤于解决组合问题、排列问题和搜索问题等。 回溯算法的基本思想:从⼀个初始状态开始,按照⼀定的规则向前搜索,当搜索到某个状态⽆法前进时,回退到前⼀个状态,再按照其他…

【计算机组成原理】运算方法和运算器

数据与文字的表示方法 1. 数据格式1.1 定点数表示方法1.1.1 定点小数1.1.2 定点整数 1.2 浮点数表示方法1.2.1 浮点数表示1.2.2 浮点数的规格化1.2.2.1 尾数为原码表示的规格化1.2.2.2 尾数为补码表示的规格化 1.2.3 IEEE754标准⭐ 1.3 十进制数串的表示方法1.3.1 字符串形式1.…

网盘——私聊

在私聊这个功能实现中,具体步骤如下: 1、实现步骤: A、客户端A发送私聊信息请求(发送的信息包括双方的用户名,聊天信息) B、如果双方在线则直接转发给B,不在线则回复私聊失败,对方…

ProgressFlowmon的confluence接口存在任意命令执行漏洞(CVE-2024-2389)

声明: 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 简介 ProgressFlowmon是一整套用于网络映射、应用程序性能…

客户端动态降级系统

本文字数:4576字 预计阅读时间:20分钟 01 背景 无论是iOS还是Android系统的设备,在线上运行时受硬件、网络环境、代码质量等多方面因素影响,可能会导致性能问题,这一类问题有些在开发阶段是发现不了的。如何在线上始终…

大气的免费wordpress模板

国产的wordpress模板,更适合中国人使用习惯,更符合中国老板的审美的大气wordpress企业官网建站模板。 WordPress模板,也称为主题,是用于定义WordPress网站或博客外观和功能的预设计文件集。这些模板使用HTML、CSS和PHP代码构建&a…

上传文件到HDFS

1.创建文件夹 hdfs -dfs -mkdir -p /opt/mydoc 2.查看创建的文件夹 hdfs -dfs -ls /opt 注意改文件夹是创建在hdfs中的,不是本地,查看本地/opt,并没有该文件夹。 3.上传文件 hdfs dfs -put -f file:///usr/local/testspark.txt hdfs://m…

【深度学习】Vision Transformer

一、Vision Transformer Vision Transformer (ViT)将Transformer应用在了CV领域。在学习它之前,需要了解ResNet、LayerNorm、Multi-Head Self-Attention。 ViT的结构图如下: 如图所示,ViT主要包括Embedding、Encoder、Head三大部分。Class …

Docker in Docker的原理与实战

Docker in Docker(简称DinD)是一种在Docker容器内部运行另一个Docker实例的技术。这种技术允许用户在一个隔离的Docker容器中创建、管理和运行其他Docker容器,从而提供了更灵活和可控的部署选项。以下是DinD的主要特点: 隔离性&am…

力扣打卡第一天

101. 对称二叉树 C: class Solution { public:bool isSymmetric(TreeNode* root) {return check(root->left,root->right);}bool check(TreeNode *p,TreeNode *q){ /**定义check方法用来检查两棵树是否是镜像的*/if (!p && !q) return true; /* 如…

基于SSM的物流快递管理系统(含源码+sql+视频导入教程+文档+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的物流快递管理系统2拥有三个角色: 管理员:用户管理、管理员管理、新闻公告管理、留言管理、取件预约管理、收件管理、货物分类管理、发件信息管理等 用户…

如何安全、高速、有效地利用IP代理爬取数据

陈老老老板🧙‍♂️ 👮‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🤴本文简述:如何安全、高速、有效地利用IP代理爬取数据 &#x1f473…

【数据结构-串-数组-广义表】

目录 1 串-理解1.1 串的抽象定义:-理解1.2 串的存储结构-不断掌握1.2.1 顺序存储结构:1.2.2 链式存储结构: 1.3 串的模式匹配算法:-掌握1.3.1 BF暴力求解算法-代码 -掌握1.3.2 KMP求解算法-代码--掌握 2 数组-不断掌握2.1 顺序存储…

WWW ‘24 | EarnMore: 如何利用强化学习来处理可定制股票池中的投资组合管理问题

WWW 24 | EarnMore: 如何利用强化学习来处理可定制股票池中的投资组合管理问题 原创 QuantML QuantML 2024-04-16 09:04 上海 Content 本文主要探讨了如何利用强化学习(Reinforcement Learning, RL)来处理可定制股票池(Customizable Stock …

Golang | Leetcode Golang题解之第40题组合总和II

题目: 题解: func combinationSum2(candidates []int, target int) (ans [][]int) {sort.Ints(candidates)var freq [][2]intfor _, num : range candidates {if freq nil || num ! freq[len(freq)-1][0] {freq append(freq, [2]int{num, 1})} else {…

LabVIEW卡尔曼滤波技术

LabVIEW卡尔曼滤波技术 在现代航空导航中,高精度和快速响应的方位解算对于航空安全至关重要。通过LabVIEW平台实现一种卡尔曼滤波方位解算修正技术,以改善传统导航设备在方位解算中的噪声干扰问题,从而提高其解算精度和效率。通过LabVIEW的强…
最新文章