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

2024-04-18 21:12

本文主要是介绍密码学 | 椭圆曲线密码学 ECC 入门(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

4  椭圆曲线:更好的陷门函数

5  奇异的对称性

6  让我们变得奇特


⚠️ 原文地址:A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography

⚠️ 写在前面:本文属搬运博客,自己留着学习。如果你和我一样是小白,那么看完本文我们将仍然不能理解下图具体是在干什么,但能够对 RSA 和椭圆曲线加密的初衷有所了解。


密码学 | 椭圆曲线 ECC 密码学入门(一)文章浏览阅读273次,点赞4次,收藏8次。1 公共密钥密码学的兴起2 玩具版 RSA 算法2.1 RSA 基本原理2.2 RSA 举例说明1 加密2 解密3 不是完美的陷门函数https://blog.csdn.net/m0_64140451/article/details/137672818?spm=1001.2014.3001.5502

4  椭圆曲线:更好的陷门函数

在 RSA 和 Diffie-Hellman 算法被提出之后,研究人员开始探索其他基于数学的密码学解决方案,寻找超越因式分解的其他算法,这些算法可以作为良好的陷门函数。1985 年,基于一种深奥的数学分支 —— 椭圆曲线的密码学算法被提出。

但椭圆曲线究竟是什么,以及其背后的陷门函数是如何工作的呢?不幸的是,与因式分解不同 —— 我们中学生在初中第一次接触到 —— 大多数人对椭圆曲线的数学并不熟悉。数学并不简单,解释起来也不容易,但我会尝试在接下来的几部分中解释。

如果您的眼睛开始变得模糊,您可以跳到最后一部分:“这一切意味着什么?”

椭圆曲线是满足特定数学方程的点的集合。椭圆曲线的方程看起来像这样:

y^2=x^3+ax+b

这个方程定义了一个椭圆曲线,而椭圆曲线具有一系列独特的数学性质,这些性质对密码学家来说非常有兴趣。这个方程的图像如下:

椭圆曲线的其他表示方法有很多,但技术上讲,椭圆曲线是满足两个变量中一个变量的二次方程和另一个变量的三次方程的点的集合。椭圆曲线不仅仅是一张漂亮的图片,它还有一些特性,使它成为密码学的一个良好环境。

5  奇异的对称性

仔细观察上面绘制的椭圆曲线。它有几个有趣的特性。

  • 其中之一是 水平对称性。曲线上的任何点都可以关于 x 轴反射而仍留在同一曲线上。
  • 更有趣的特性是,任何非垂直线将与曲线 最多相交三个点

让我们将这个曲线想象成一个奇怪的台球游戏的场景。

如上图所示,取曲线上任意两点并画一条通过它们的线,它会恰好再与曲线相交一个点。在这个台球游戏中,你在点 A 处取一个球,向点 B 射击。当球碰到曲线时,球会要么直接向上(如果它在 x 轴下方)要么直接向下(如果它在 x 轴上方)弹跳到曲线的另一侧。 

为什么比喻为台球?答:因为在台球运动中,台球撞击到桌子的边沿会反弹。不过现实中的台球反弹方向有无穷多种,而这里的台球只会向上或向下反弹。

我们可以称这种在两点上的台球移动为 “dot” 。曲线上的任何两点都可以 “dot” 在一起得到一个新点。比如:

  • A dot B = C

个人认为,这里把 “dot” 理解成一种自定义的运算就行了(可以按个人喜好起名),类似于小学做的定义新运算题。

我们也可以将台球的移动串联起来,即不断地用 “dot” 操作一个点与自己。

  • A dot A = B
  • A dot B = C
  • A dot C = D
  • ……

这里的意思是:假设初始点是 A,然后让 A 不断和自己做 “dot” 运算。

结果证明,如果你有两个点,一个初始点与自己点运算 n 次后到达一个最终点,而你只知道最终点和第一个点,要找出 n 是困难的。

这里的意思是:假设只告诉你初始点 A 和它最终到达的点 Z,那么你很难求出该过程中做了多少次 “dot” 运算,即求解 n 的值非常困难。

为了继续我们奇怪的台球比喻,想象有一个人在一个房间里独自玩我们的游戏一段时间。他很容易按照上述规则一次又一次地击球。如果稍后有人走进房间,看到球最终停在了哪里,即使他们知道所有的游戏规则和球开始的地点,他们也无法确定球被击打了多少次才能到达那里,除非他们再次重新经历整个游戏,直到球到达同一个点。容易做到,难以撤销:这就是一个非常好的陷门函数的基础。 

椭圆曲线算法也满足 “单向容易,逆向困难”,其中单向是做 “dot” 运算,逆向是求解 n 的值。套用台球的比喻就是,单向是击球,逆向是求解击了多少次球。

6  让我们变得奇特

这个翻译确实很奇特。。。

上面简化后的曲线非常适合观赏和解释椭圆曲线的概念,但它并不代表用于密码学的曲线的样子。为此,我们必须限制自己在一定范围内的数字,就像在 RSA 中那样。我们不是允许曲线上的点有任何值,而是限制自己在固定范围内的整数。

在计算椭圆曲线公式时,我们使用同样的技巧,当达到最大值时将数字循环。如果我们选择最大值为一个素数,那么椭圆曲线被称为 素数曲线,并具有优秀的密码学特性。

所谓 “数字循环” 也还是取模的意思。假设最大值是 8,当我们数到 8 后又回到 1 这个起点,形成原文所说的数字循环:1, 2, ..., 7, 8, 1, 2, ..., 7, 8, 1, 2, ... 。

下面是一个椭圆曲线对于所有数字的绘图示例:

下面是同一条曲线,但只用整数点表示,最大值为 97 的绘图:

这看起来一点也不像传统意义上的曲线,但实际上它就是。就像原始曲线在边缘被包裹起来,只有那些触及整数坐标的曲线部分被着色。你甚至仍然可以观察到水平的对称性。

竖着一列一列地看,这些点确实是关于 x 轴对称的。

事实上,你仍然可以在这条曲线上玩台球游戏,并且可以将点相互 “dot” 在一起。曲线上的直线方程仍然具有相同的性质。此外,这种 “dot” 操作可以有效地计算。

个人理解,简单来说:假设你选择了曲线上一点 A 作为初始点,并且让它不断和自己做 “dot” 运算,中途会到达 B、C、D 等点,最后你会发现 n 次运算后又会回到 A 点。由此可以认为,A 以及 B、C、D 等点的集合构成了这条椭圆曲线。因此原文说 “同一条曲线,但只用整数点(就可以)表示”。

你可以将两点之间的线想象成一条在边界处环绕直到触及一点的线。仿佛在我们的奇怪台球游戏中,当球击中桌子的边缘(最大值 max)时,它就会神奇地被传送到桌子的另一侧,并继续它的路径直到触及一个点。

在这种新的曲线表示方法中,你可以把一些消息表示为曲线上的若干个点。你可以想象取出一个消息并将其设置为 x 坐标,然后解出 y 以得到曲线上的一个点。在实际中,这个过程比这略微复杂一些,但这是大概的想法。

你会得到以下点:

(70,6), (76,48), ……, (82,6), (69,22)

这一小段讲得确实比较抽象,不知道是不是翻译的原因。

椭圆曲线密码系统可以通过选择一个素数作为最大值、一个曲线方程和曲线上的一个公共点来定义。私钥是一个数字 priv,公钥是公共点与自身相乘 priv 次的结果。在这种密码系统中,从公钥计算私钥的过程被称为 椭圆曲线离散对数函数。这最终是我们一直在寻找的 “陷门函数”。

个人理解:“公共点” 可以理解为前文中提到的起始点 A 点,“相乘” 实际上应该是指前文定义的 “dot” 运算。最后这段话应该算是本文的核心了🥳

这篇关于密码学 | 椭圆曲线密码学 ECC 入门(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/915847

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis