密码学 | 椭圆曲线密码学 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

相关文章

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1

C++入门01

1、.h和.cpp 源文件 (.cpp)源文件是C++程序的实际实现代码文件,其中包含了具体的函数和类的定义、实现以及其他相关的代码。主要特点如下:实现代码: 源文件中包含了函数、类的具体实现代码,用于实现程序的功能。编译单元: 源文件通常是一个编译单元,即单独编译的基本单位。每个源文件都会经过编译器的处理,生成对应的目标文件。包含头文件: 源文件可以通过#include指令引入头文件,以使

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

打造坚固的SSH防护网:端口敲门入门指南

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 打造坚固的SSH防护网:端口敲门入门指南 前言什么是端口敲门端口敲门的优点1. 增强安全性2. 动态防火墙规则3. 隐匿服务4. 改善日志管理5. 灵活性和兼容性6. 低资源消耗7. 防御暴力破解和扫描8. 便于合法用户访问9. 适用于不同类型的服务 端口敲

好书推荐《深度学习入门 基于Python的理论与实现》

如果你对Python有一定的了解,想对深度学习的基本概念和工作原理有一个透彻的理解,想利用Python编写出简单的深度学习程序,那么这本书绝对是最佳的入门教程,理由如下:     (1)撰写者是一名日本普通的AI工作者,主要记录了他在深度学习中的笔记,这本书站在学习者的角度考虑,秉承“解剖”深度学习的底层技术,不使用任何现有的深度学习框架、尽可能仅使用基本的数学知识和Python库。从零创建一个

手把手教你入门vue+springboot开发(五)--docker部署

文章目录 前言一、前端打包二、后端打包三、docker运行总结 前言 前面我们重点介绍了vue+springboot前后端分离开发的过程,本篇我们结合docker容器来研究一下打包部署过程。 一、前端打包 在VSCode的命令行中输入npm run build可以打包前端代码,出现下图提示表示打包完成。 打包成功后会在前端工程目录生成dist目录,如下图所示: 把

CALayer入门

iOS开发UI篇—CALayer简介 一、简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView。 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可