谁能最简单的详解椭圆曲线算法,secp256k1 是若何生成公钥和私钥的?

刚刚阅读1回复0
kanwenda
kanwenda
  • 管理员
  • 注册排名1
  • 经验值167010
  • 级别管理员
  • 主题33402
  • 回复0
楼主

第二次发问难题,略亢奋。

------------------------------------------------------------>

题主的难题是“最简单的简述圆锥抛物线演算法”,我认知为用最根底的微积分来解释圆锥抛物线公钥。

现实上圆锥抛物线公钥是一种公钥公钥演算法,公钥公钥演算法最底子的原理是操纵重要信息的反之亦然:即掌控公钥的人在整个通信过程中掌控最多的重要信息【上(开)帝(图)视(可)角(耻)】,一切的演算对他而言都是没有奥秘的。为的是让他人能给本身发送加密的重要信息,公钥持有者把重要信息的一部门公开公布,公布的重要信息记为公钥。显而易见,三个公钥公钥演算法平安的需要前提(非充实)是“由公钥不克不及反推出公钥”。

/* 先看三个栗子:

小华就读于小学二年级,会排序乘法,但不克不及排序乘法。你是小华的怪蜀黍大强,你想出一道题给他做,让他固然能认知标题问题意思但做起来有难度:

强:“小华小华,过来,舅舅问你,1+1等同于几?”

明:“舅舅的大学从征了吧,我幼儿园就会了,等同于2。”

强:“那考你个难的,7+7等同于几?”

明:“切,你当人家上课啃铅笔头,下课帮小周写功课都是螺科鹑的是吧。手指都不消数,等 于14呗。”

强:“行,有舅舅昔时的风度,那舅舅再问你,两个7相乘等同于56?”

明:“……”,默默地掏出纸片、铅笔、手指头、眼皮,停止了10分钟的深度排序:2个7等同于14,3个7等同于21,4个7等同于28……。“舅舅,我算出来了,是8个,对不合错误?”

强:“好小子,舅舅就不信考不倒你。两个7相乘等同于864192?” 你心中默念,以小华的排序才能,要算到阿谁数更何况得一年半载的。

明:“舅舅好凶猛呀,我算不出来。”

//明天去Kozhikode小周看她会不克不及算两个7等同于56,不克不及算我就交她,嘿嘿。”

*/

与前述规范完全不异的是,圆锥抛物线公钥也是三个基于乘法特征值乏人问津难题的公钥计划。 关于圆锥抛物线公钥来讲,圆锥抛物线的百分点就是规范里头的7,而公钥就是百分点的乘法特征值(规范里头的8),公钥是百分点(7)停止对应特征值的乘法(8次)得到的成果(56)。

与前述规范差别的是,圆锥抛物线公钥里的乘法成立在 “十分有限域上的二元三次抛物线上的点”上 ,构成三个“十分有限乘法内积”。(好貌似的一句话。。)详细的说,阿谁乘法的几何表述如下面三个图,三个点的乘法成果是指那点的连线和抛物线的交点关于x轴的镜像。

图1:三个差别的点相乘

图二:三个完全不异的点相乘

看完那两幅图,默默地思虑1秒钟,你可能要问(炸)了(毛):为啥要那么表述乘法?我仍是厌恶小华的阿谁乘法题,不厌恶阿谁。

之所以那么表述,原因有三个:

(1)给你求逆向演算(由公钥排序公钥)的时候造造好不容易。就算像小华一样在整数伴侣圈做乘法,更何况那公钥体系体例只能用以给小周写信。

(2)为的是构造三个封锁的“优良的”代数构造,简化萨德基演算(由公钥排序公钥的演算)。就算单纯为的是求解好不容易,那能够表述梦幻般的乘法,但乘法表述的潇洒将招致了演算的复杂。为的是能用一些最根本的演算:好比说交换律、好比说加法,才那么表述让那些点构成三个群。

行了,有了乘法以后,我们只需要考虑两件事:

(1)若何萨德基排序(由公钥排序公钥):

确定圆锥抛物线三个点做为百分点P,因为所有的点构成三个十分有限群,那么百分点P一定能够做为三个聚合元聚合三个子集。记阿谁子集的特征值为n,也就是说P点加总n次得到群的下层单元元(下层单元向量点),记做nP=0。(留意此处0只是三个代号,指代下层单元向量点,因为我们习惯了用0来暗示乘法下层单元元。)

萨德基排序的表述很简单,公钥为K∈[0,n)K\in [0,n); 百分点为点PP;公钥点Q表述为KK个PP相乘:Q=P+P+⋯+P)⏟^KQ=\underset{K}{\widehat{\underbrace{P+P+\cdots +P)}}}(原谅我公式写欠好)。

先说相乘,最不济的演算法就是间接相乘K次,求解完毕,好一点的办法是利用二进造梯子来加,如许需要停止t次倍点(完全不异点相乘)和t/2次点加(差别点相乘),此中t=log2Kt=log_{2}K:

当然还有更好的演算法,好比说说非相邻暗示法(NAF)、窗口法等,此处不多说。

再说第二个难题,怎么用代数的办法求出两点相乘。那更何况得用一点高中数学了,此处间接上公式:

以域特征不等同于2或3的表述在素数域GF(p)上抛物线为例,抛物线方程为:y2=x3+ax2+by^{2}=x^{3}+ax^{2}+b

从那两公式能够看到,要求点相乘,只需要停止一些十分有限域的加减乘除即可。

事实上,加减乘除复杂度的关系如下:乘法>乘法>加减。为的是进步演算效率,往往在演算中把三个点的坐标保留分数的形式如:(xz,yz)(\frac{x}{z},\frac{y}{z})。演算过程中不断保留分数,曲到演算完毕再做一次乘法,回到十分有限域,那种演算法叫做投影坐标。

有了投影坐标以后,一次萨德基排序(公钥求公钥)其实就是一系列的乘法、乘法、加法。当然,此处的乘法、乘法、加法都是素数域上的演算。为的是快速排序素数域乘法(现实上就是模乘),又降生了一系列演算法:蒙哥马利模乘演算法,Barrett模乘演算法等,都是通过预排序加快求模速度的演算法。

(2)逆向排序(公钥反推公钥)有多灾:

公钥学家都既是大强也是小华,大强给小华出了题,必需让他算不出来,小华东的工具一天天变多、排序速度一天天变快,大强的题也得一天天变复杂。

据本人的领会,目前由圆锥抛物线公钥求解公钥的最有效演算法复杂度为O(p)O(\sqrt{p}),此中pp是特征值nn的更大素因子。当参数选的足够好让2^{160}">p>2160p>2^{160}时,以目前的排序才能,攻破圆锥抛物线是不现实的。

但,小华哪天长大,谁晓得呢?小华哪天有了(量子)排序器,怎么难倒他呢?

嗯,对,欢送来到公钥学。。

0
回帖 返回游戏

谁能最简单的详解椭圆曲线算法,secp256k1 是若何生成公钥和私钥的? 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息