位置:丁香财经网 >> okx

Ecdsa算法[ECD sa算法安全吗]

2023年06月16日 07:55

欧易okx交易所下载

欧易交易所又称欧易OKX,是世界领先的数字资产交易所,主要面向全球用户提供比特币、莱特币、以太币等数字资产的现货和衍生品交易服务,通过使用区块链技术为全球交易者提供高级金融服务。

APP下载   官网注册

最近,一位去过Dadaqq.Com的用户在边肖问了我们一个问题。相信这也是很多币圈朋友经常疑惑的问题:ecdsa算法的相关问题,ecdsa算法是否安全的相关问题,带着这个问题,让专业的编辑来告诉你为什么。

大家可能都听说过某种形式的ECDSA。当我说"数字签名",有些哥们会更好的认识到这一点。当然,有些哥们不知道我';我说的是。

我试图了解ECDSA是如何工作的,但很难搞清楚,因为大多数在线参考资料都不够。他们要么太基础了——他们只是解释了算法的基础,要么他们太牛逼了-";它是如何工作的?"。所以你在问"它是如何工作的"和"我们是怎么到这里的?"在之间挣扎。所以,如果你不';我没有数学或密码学学位,但仍然想知道它是如何工作的(除非"奇迹发生了,或者你是个天才"),恭喜你,你来对地方了。

ECDSA的全称是"椭圆曲线数字签名算法",用于创建数据(如文件)的数字签名。以便在不影响安全性的情况下验证其真实性。把它当成真正的签名,你就能认出某人';的签名,但你可以';如果没有人知道,就不要伪造。ECDSA签名与真实签名的区别在于无法伪造ECDSA签名。

要理解ECDSA,要注意和用来加密数据的AES(高级加密标准)区分开来。ECDSA不会加密或防止他人查看或访问您的数据,但它可以防止数据被篡改。

在"ECDSA",即"曲线"和"算法",因为这意味着ECDSA基本上是关于数学的。所以我认为首先要说的是:"哎,兄弟们,你们还在学的那些高数是不是完全没用了?"!"ECDSA涉及的数学相当复杂,所以我尽量把它庸俗化,让非技术人员也能理解,但你可能还是需要一些数学知识才能正确理解。下面,我分两部分来处理。一部分是对其工作原理的高层次解释。另一部分是深入了解其内部工作原理。

其实原理很简单。你拿出纸,画一个数学曲线方程。然后你在曲线上随机选择一个点作为你的起点,然后你生成一个随机数,这个随机数就是你的私钥。你用这个随机数和"起点"做一些神奇的数学方程式,得到曲线上的第二个点,也就是你的公钥。当您想要签署文件时,您将使用这个私钥(随机数)和一个散列文件(代表文件的唯一数字)作为一个神奇的等式,它将为您提供您的签名。签名本身分为两部分,称为R和s。为了验证签名是否正确,你只需要公钥(用私钥生成的曲线上的点),然后把它放入另一个魔术等式和签名的一部分。如果用私钥正确签名,它会给你另一部分(R)的签名。所以为了简洁起见,一个签名由两个数字R和s组成。您使用私钥来生成R和S。如果使用公钥和S的数学等式得出R,则签名有效。没有办法知道私钥或仅使用公钥创建签名。

好吧,你目前只知道一点点基础知识,但你可能没有意识到。ECDSA很复杂。公钥和私钥是什么鬼?唐';别担心,你';我很快就会明白,但是首先,解释一下为什么要使用ECDSA以及它可能做什么。

除了上述"我需要签署合同/文件"这里有一些其他的用例:例如,我们不';我不希望它的数据被用户破坏或修改。例如,用户只允许加载官方地图但不允许进入国防部或电话或其他类型的设备,只允许安装官方应用程序。在这种情况下,,文件(应用程序、游戏地图、数据)将使用ECDSA进行签名,公钥将与应用程序/游戏/设备绑定并验证签名以确保数据未被修改,私钥将被锁定在安全的地方。虽然您可以使用公钥来验证签名但是你可以';不要用它来创建/伪造一个新的签名,所以这个公钥可以毫无顾虑地与应用程序/游戏/设备一起分发。

这和AES加密系统不同,AES加密系统允许你加密数据,但是你需要一个密钥来解密。而这样的应用需要绑定你的密钥。

一个很好的例子就是PlayStation3游戏机开机,所有文件都可以解密,PS3文件中的所有密钥都可以提取,但是还有一个东西需要破解。ECDSA签名可以防止任何人在最新的固件上运行应用程序。

用更通俗的说法,http和https的区别在于我们有SA认证机构,私钥在自己手里,公钥是广播的。我用私钥来验证公钥(这只是用来了解公钥和私钥,到目前为止)。

好的,建议你准备一个垃圾桶,可能会让你觉得恶心或者不舒服。

让';让我们从最基础的开始(对于知道这些知识的人来说可能很无聊,但是对于不知道的人来说是必要的';t):ECDSA只使用整数数学,没有浮点数(也就是说可能的值是1,2,3等。而不是1.5,2.5等。).并且数字的范围受到签名中使用多少位的限制(更多位意味着更大的数字和更高的安全性,因为它变得更难猜测(这个等式中使用的密钥数)。计算机使用"比特"来表示数据,一位是"数字"用二进制符号(0和1)表示。,8位代表一个字节。每增加一位,所能表示的最大数字就增加一倍。四位可以表示0到15(总共16个可能值),五位可以表示32位值,六位可以表示64个值,依此类推。一个字节(8位)可以代表256个值。32位可以表示4294967296个值(4gb)。通常ECDSA总共会用到160位,嗯嗯,49位的一个大数目.[XY002][XY001]你需要知道的另一个数学结构是模数。你可以把模数简化为一个整数的余数。例如,xmod10表示x除以10的余数,该余数将始终是0到9之间的一个数,因此142mod10给出2,例如。再比如xmod2。,其中偶数和0分别是0和1。

ECDSA与要签名的消息的SHA1加密哈希一起使用(文件)。哈希是适用于每个数据字节的另一个数学等式,它将为数据赋予一个唯一的编号。例如所有字节的值的总和可以被认为是一个非常低的散列函数。所以如果消息(文件)有任何变化,哈希就会完全不同。在SHA1散列算法的情况下,它总是20字节(160位)。。这对于验证文件未被修改或损坏非常有用。对于任何大小的文件,您将获得20字节的哈希值,并且您可以轻松地重新计算哈希值以确保匹配。ECDSA标记的实际上是一个哈希,所以如果数据发生变化,,哈希发生变化,签名不再有效。

要理解,让';让我们举个例子。我们将使用最简单的(也是最低的)哈希函数,其中我们将所有数据的总和作为10的结果的模。

首先,你要明白,世界上的一切都会用一个数字来表示。文本文件是一系列字节。正如我们前面解释的,它代表8位,这意味着它可以代表0到255之间的一个数。因此如果我们把每个字节都当成一个数,把文件的每个字节相加,那么我们的结果就是一个10的模,我们会用0到9之间的数散列这个结果。对于相同的数据,我们将总是得到相同的哈希值。如果文件中的一个字节被改变。,结果可能不一样。当然,你也会明白,为了得到相同的哈希值而改变文件会非常容易,因为只有10种可能(0到9),所以有十分之一的机会通过改变文件的内容得到相同的哈希值。

这就是SHA1发挥作用的地方。SHA1算法比我们简单的"模数10"哈希函数,它会给出一个非常大的数(160位,所以是一个十进制的49位)。它的特殊性使得如果我们修改文件中的一点数据,结果就会完全改变。

这使得SHA1成为一个非常好的哈希算法,它是不可预测的,非常安全。而且它';几乎不可能得到一个"冲突"(当两个不同的文件有相同的散列),而且它';伪造数据来获得特定的散列是不可能的。如果你没事,就别';不要听我的。我建议你参加超级大脑。

那么,它是如何工作的??ECDSA基于以下等式:

y^2=(x^3a*x^b)modp

首先你需要注意的是有一个模块(mod)。还有';y'是方形的(唐';别忘了这是图上曲线的方程式。这意味着对于任何x坐标(don't忘了,我们只用整数),你会有两个y值,曲线在x轴上是对称的。该模块是一个质数,并确保所有值都在160位的范围内。,它允许使用"模平方根"和"模多重逆"

数学,让事情更容易计算。因为我们有一个模块(P),也就是说y2的可能值在0和p-1之间,都是可能值。因为ECDSA规定只能是整数,只有那些值更小的子集才能组成一个"完美广场"(两个整数的平方值)。这给出了N个可能的点,其中N^p(N是数字0和p之间的完美平方)。到目前为止,你确定能跟上我的思路吗?哈哈,唐';不要担心。it’这才刚刚开始。)

由于每个x会产生两个点(y^2的平方根的正值和负值),这意味着有N/2个可能的"x"坐标有效,曲线上有一个点。由于整数计算和模数的限制所以满足这些条件的点限定在椭圆曲线上。

在继续之前做一个总结。ECDSA方程为我们提供了有限数量(n)的有效点曲线,因为Y轴受模数(p)的约束。,而且需要是在x轴上对称的完美正方形(y^2)。我们总共有N/2个可能有效的x坐标,don'关于椭圆曲线,你需要知道的另一件事是"点加法"。。定义了将一个点P加到另一个点Q上会产生一个点S,这样如果你从P到Q画一条线,它会在第三个点R处与曲线相交,这个点就是S的负值(记住曲线在X轴上是对称的)。在这种情况下我们定义R=-S来表示R在x轴上的对称点。看上图就明白了。

所以你可以看到一条y2=x3axb形式的曲线(其中a=-4,b=0)。它在x轴上是对称的,其中PQ是对称点,R点是P到Q的直线的第三个交点

同样,如果你做P,它将是R的对称点,是与P点相切的直线的交点。。PPP是得到的点之间的加法点。由于PPP可以写成(Ppp)p,这就定义了"点乘",其中k*P是点P到点k的加法点,看上面两个像点相乘的例子。

这里可以看到两条椭圆曲线和一个点P,切线就是从这个点画的。它与曲线相交于第三点,它的对称点是2P。然后你从2P和p画一条直线,这条直线会和曲线相交,对称点是3P。。等待.可以继续做一些乘法。现在你明白为什么加法时需要取R的对称点了吧,因为同一点的多次加法总会给出相同的直线和相同的三个交点。

点乘的一个特点是如果你有一个点R=k*P,那么你知道R,也知道P,但是没有办法找出什么值';k'是。既然没有点减法和点除法,那就不可能只解k=r/p.另外,因为你可能做了几百万次加法。你只能在曲线上的另一个点,你不';我不知道你是怎么到那里的。你可以';不要逆转这个操作,你可以';找不到值"k"乘以你的点P,所以给你的结果点r

即使知道原点和终点,也可以';t找到被乘数,这是ECDSA算法背后的安全基础。这个原理叫做"陷阱门功能"。

以上是ECDSA的铺垫。让';让我们了解一下ECDSA签名算法的真实面目。

对于ECDSA,首先要知道曲线参数,分别是A,B,p。,n和g.你已经知道A和B是曲线函数的参数(y^2=x^3AXB),也就是';p'是质量模数,';N'是曲线的点数,但也有';g'这是ECDSA所需要的。它代表了';参考点';或者你可以理解为一个起点。参考点可以是曲线上的任何点。

曲线上的参数非常重要。不了解他们,你显然可以';不要签名或验证签名。是的,验证签名不仅仅是知道公钥。您还需要知道公钥的派生参数。NIST(国家标准和技术研究所)和SECG(高效加密标准组织)提供预制的标准化曲线参数,这些参数被认为是安全有效的。

所以首先,你会有一个私钥和一个公钥。。私钥是一个随机数(也是160位),公钥是G和私钥点乘生成的曲线上的一个点。我们用';达';作为私钥(随机数)和';Qa'作为公钥(一个点)。,所以我们有:Qa=dA*G(其中G是曲线参数中的参考点)。

那么,如何对文档/消息进行签名呢?

首先你要知道签名是40个字节,用两个20字节的值来表示。第一个叫做R,第二个叫做S,所以这对(R,S)合起来就是你的ECDSA签名.下面是如何创建这两个值来签署文件.首先,你必须生成一个随机值';k'(20).,并利用点乘计算出点p=k*g,该点的x值将表示';r'。由于曲线P上的点由它们的坐标(x,y)表示(每个坐标有20个字节长),所以只有带符号的"x"值(20字节)是必需的。,这将被称为"r"。你现在需要的是"s"价值。

为了计算S,您必须对消息进行SHA1散列值计算,这将为您提供20个字节的值。你会认为它是一个非常大的整数,我们称之为';z'。。现在你可以用下面的公式来计算S:

S=K-1(ZDA*R)MODP

这里要注意的是K-1是"模乘逆"也就是K的倒数。但是因为我们处理的是整数,这是不可能的,所以它是一个数,使得(k-1*k)modp等于1。同样,k是用于生成r的随机数,z是要签名的消息的散列,dA是私钥。,r是k*G的x坐标(其中G是曲线参数的原点)。

现在您已经签名,您想要验证它。也很简单。你只需要公钥(当然是曲线参数)就可以做到这一点。你用这个公式计算一个点p:

p=s-1*z*gs-1*r*QA

如果点p的x坐标等于r,则签名有效,否则无效。

It';很简单,不是吗?不是吗??现在让';让我们看看为什么.这就需要一些数学来验证:

我们有:

p=s-1*z*gs-1*r*QA

但是Qa=dA*G,所以:

p=s^-1*z*gs^-1*r*da*g=s^-1(zda*r)*g

但是p的x坐标必须匹配r,r是k*G的x坐标,意思是:

k*G=s-1(zda*r)*G

我们可以通过删除G来简化:

k=s^-1(zda*r]

通过反转K和s,我们得到:

s=k^-1(zda*r)

这是用于生成签名的公式。所以它匹配,这就是为什么你可以用上面的第一个等式来验证签名。

您可以注意到,为了计算S,您需要';k'(随机数)和';达';(私钥)。,但是只需要r和Qa(公钥)来验证签名。因为R=k*G和Qa=dA*G,并且因为ECDSA点乘中的陷阱门功能(在步骤9中解释)。因此,我们可以';t通过知道Qa和R来计算dA或k,这使得ECDSA算法是安全的,在不知道私钥的情况下,无法找到私钥,也无法伪造签名。

你还记得生成签名所需的等式,对吗?。R=k*G和s=k-1(zdA*r)模p这个方程的强大之处在于,实际上你有一个未知方程(k和dA),所以你可以';我无法确定他们中的任何一个。

然而算法的安全性基于它,确保"k"是随机生成的,并且没有办法让某人猜测、计算或使用定时攻击或任何其他类型的攻击来找到随机值"k"。但是索尼在执行上犯了一个巨大的错误。他们使用相同的"K"值无处不在,这意味着如果你有两个相同的K'S,它们将有相同的R值,这意味着你可以使用两个文件的两个S签名(hashZ和z'还有签名S和S')来计算K:[XY002]。

ss';=k^-1(z达*r)-k^-1(z';da*r)=k^-1(zda*rz';-da*r)=k^-1(zz';)

所以:k=(z-z';)/(s-s';)

一旦知道了k,那么S的方程就变成了一个方程,有一个未知数,然后就很容易分解成da:

dA=(s*k-z)/r

一旦你知道了私钥dA,你现在就可以给你的文档签名了,PS3会识别它是索尼签名的真实文档。。这就是为什么要确保用于生成签名的随机数实际上是"密码随机"。这就是为什么不可能有高于3.56的自定义固件,只是因为从3.56版开始。索尼已经修复了他们的ECDSA算法实现,并使用了一个现在不可能找到私钥的新密钥。这个问题的另一个例子是当一些比特币客户端使用非密码随机数生成器(在一些浏览器和一些Android客户端上)使它们使用相同的"k"价值来签署交易,恶意的人可以找到他们的比特币钱包的私钥,窃取他们的资金。

这说明了每次签名时使用真随机数的重要性,因为如果(R,s)签名对的R值在两个不同的签名上是相同的,那么你就会泄露私钥。

关于这个的一个笑话,在xkcd漫画221里有展示(见上图)。这就成了解释这个问题的前景。每当该算法出现执行错误时,通常会重用该图像。

ECDSA算法非常安全,不可能找到私钥.只要正确完成即可。如果有办法找到私钥,那么每台计算机网站和系统的安全性可能会受到影响,因为很多系统依靠ECDSA来保证安全,这是不可能的。

希望这能帮助你理解ECDSA算法,也希望对你有帮助。

originallink:LearnhowECDSAprotectsyourdata

y2=(x3a*xb)modp

上述曲线可以在一个整数和一定位数(假设160位)内表示,p是一个可以在160位内表示的大整数。

为什么要定义这条曲线?个人认为有三个原因:

在椭圆曲线上随机选取两点a和b,连接两点a和b的直线与曲线的新交点称为C,C关于x对称的-C点记为ab

乘法可以用加法表示,但算法复杂度为log(n)。

其实为什么要选择上面的椭圆曲线,其实是这个加法法则选择的,总是要求更简单的求解这个新的交点。

R=k*P的性质,R和P的值已知。无法推导出k的值,但知道k的值低于p的值,就很容易计算出r(log(n))的值,这就是ECDSA签名算法的理论基础。

如何用这个阈值函数做一个签名算法?

一个逻辑思路是:如果给验证者一个R和P,那么只有签名者可以提供K,K可以作为签名指纹吗?

好了,我们老师是公私钥对。,Qa=dA*G,Qa是公钥,dA是随机数,就当是私钥吧。当然,这条椭圆曲线的A,B,P,G的值是要公开的。。这个G是椭圆曲线上随机选取的一个节点,我们称之为原点,也是要公开的。

每签一条数据,随机生成一个随机数k,p=k*g。。让';s取p的x轴坐标r作为签名的一部分。签名数据的另一部分称为S.

显然,这个S应该与dA和签名信息z都相关.Let'假设:

S=Sig(dA,G,z,R,K),那么这个函数就是一个签名函数。

而验证函数应该只有s和r,没有k和dA

p=h(s,g,z,r),h是签名函数。

密码学家想到了一个实现:

s=k-1(zda*r)modp

k-1表示关于p的模逆元(k^-1*kmodp=1)。

初始验证功能可以下推:

==k=s^-1(zda*r)modp

==k*g=s^-1(zda*r)*g

==p=s^-1*z*gs^-1*da*r*g

==p=s^-1*z*gs^-1*r*qa

对于验证者来说,你需要计算s-1*z*gs-1*r*QA的x坐标是否为r,

go的椭圆曲线a固定在-3,而b可以自由选择。p224、p256曲线实际上意味着曲线的位数是224和256。

算法实现了为了更快地对曲线进行加法和乘法运算,将笛卡尔坐标投影到(x,y,z)的雅可比坐标中,投影关系为:

可以在雅可比坐标系中加快运算速度,然后在需要的时候将最终结果投影回笛卡尔坐标系。

曲线的表示:

公钥和私钥对的表示:

可以看到曲线,公钥私钥包含越来越多的信息。

公钥是曲线信息DA*G的信息

私钥是公钥信息DA信息。

美国国安局公布的曲线其实是secp256k1。其实对于它的参数也没有很好的解释。据推测,国安局发现这是一条弱化的椭圆曲线,所以BTC在设计之初没有使用这条曲线,而是使用了Koblitz曲线,其中B为7,A为0。在btcsuit的包装里,KoblitzCurve是golang'scurvparam(主要针对加速度),但是因为A、B等参数是预置的,所以参数更多。添加更多参数以加快计算速度。至于公私法,基本和golang一样。

Ed25519在某种意义上也属于椭圆曲线密码学,但它使用扭曲的Edwards曲线作为椭圆曲线。同时,采用的签名机制不同于ECDSA算法。EdDSA的重要实现ED25519是DanielJ.Bernstein等人设计的EdDSA算法,采用的曲线参数是完全开放的。解释了参数选择的意义,以确保曲线中没有内置后门。

曲线:

y^2=(x^3x^2{一个非常大的随机数}x)modp

他生成公钥和私钥的过程有些不同。seed是私钥,seed计算的哈希值乘以G得到公钥。为了防止多次计算,这部分公钥被扩展到私钥的后面,作为完整的私钥。当计算签名时普通ecdsa会生成一个随机数k,而ec25519为了避免伪随机数被猜中,将私钥和msg的哈希值作为随机数。

?让';先放一张以太坊的架构图:

?在学习的过程中,我们主要是用单一的模块来学习和理解,包括P2P、密码学、网络、协议等等。直接开始总结:

??密钥分发问题也是密钥传输问题。如果密钥是对称的,那么密钥只能离线交换。如果密钥在线传输,可能会被截获。所以采用非对称加密,两个密钥,一个私钥保留,一个公钥公开。公钥可以在互联网上传输。没有线下交易。确保数据的安全性。

?如上图,节点A向节点B发送数据,此时采用公钥加密。节点A获得节点B';的公钥对明文数据进行加密,得到密文发送给节点B.并且节点B使用其自己的私钥来解密。

?2.消息篡改无法解决。

?如上所示,节点A使用B';的公钥进行加密,然后将密文发送到节点B.节点b用节点a的公钥解密密文

?1.自从一';的公钥是公开的,一旦网络黑客截获消息,密文就没用了。说白了,这种加密方式只要截获消息就能解锁。

?2.还有就是消息来源无法确定的问题。以及消息篡改的问题。

?如上图所示,发送数据前,节点A用B'加密;的公钥得到密文1,然后用一个';的私钥来获得密文2。节点B得到密文后,用A的公钥解密得到密文1。然后用b'的私钥来获取明文。

?1.当数据密文2在网络上被截获时,因为A'的公钥是公开的,它可以用来解密密文2,得到密文1。所以看起来像是双重加密。事实上,最后一层的私钥签名是无效的。一般来说,我们都希望签名签在最原始的资料上。如果把签名放在后面,因为公钥是公开的,签名缺乏安全性。

?2.存在性能问题。非对称加密本身效率不高,加密过程进行了两次。

?如上图,节点A先用A的私钥加密,再用B的公钥加密,节点B收到消息后,先用B'解密;的私钥,然后用一个';的公钥。

?1.当密文数据2被黑客截获时,因为密文2只能被B'解密;的私钥,和B';的私钥只有nodeB拥有,其他人可以';不要保守秘密。所以安全性最高。

?2.当节点B解密得到密文1时,只有A的公钥可以用来解密。只有被加密的数据才被A'的私钥可以被一个';的公钥和一个';的私钥仅由一个节点拥有,因此可以确定数据是由一个节点传输的。

?经过两次非对称加密后,性能问题更加严重。

?基于上述篡改数据的问题,我们引入消息认证。消息认证后的加密过程如下:

?在节点A发送消息之前,明文数据被散列一次。得到一个汇总,然后和原始数据同时发送给nodeB。当节点B接收到消息时,它解密该消息。解析哈希摘要和原始数据。,然后对原始数据再次进行相同的哈希计算得到摘要1,并与摘要1进行比较。如果是一样的,说明没有被篡改;如果不一样,说明被篡改了。

?在传输过程中,只要密文2被篡改。产生的哈希和哈希1将是不同的。

?无法解决签名问题,就是双方互相攻击。a总是否认他发出的信息。比如A给B发错误信息,导致B亏损。。但是否认并没有';不要单独发送。

?在(3)的过程中,没有办法解决双方的相互攻击。你什么意思?可能是因为A发的消息对节点A不利,后来A否认没有发消息。

?为了解决这个问题,引入了签名。这里,我们将(2)-4中的加密方法与消息签名相结合。

?上图中。我们用节点A的私钥对它发送的摘要信息进行签名,然后对原文进行签名,再用节点B的公钥进行加密.得到密文后,B用B'解密;的私钥,然后用一个';的公钥,只有通过比较两个摘要的内容是否相同。。这样既避免了防篡改问题,又避免了来自两边的攻击。因为A签署了信息,它可以';不可否认。

?为了解决非对称加密数据的性能问题,常采用混合加密。这里我们需要引入对称加密。,如下图:

?当我们加密数据时,我们使用双方共享的对称密钥进行加密。对称密钥尽量不要在网络上传输,以免丢失。这里的共享对称密钥是根据自己的私钥和对方计算的';的公钥。,然后用对称密钥加密数据。当另一方收到数据时,它也计算对称密钥并解密密文。

?上面的对称密钥是不安全的,因为A的私钥和B的公钥一般在很短的时间内是固定的。所以共享对称密钥也是固定的。为了增强安全性,最好的方法是为每次交互生成一个临时共享对称密钥。那么如何在每次交互中生成一个随机的对称密钥而不传输呢?

?那么如何生成一个随机的共享密钥进行加密呢?

?对于发送方节点A,每次发送时都会生成一个临时非对称密钥对。然后,根据节点B的公钥和临时非对称私钥,可以计算出一个对称密钥(KA算法-密钥协商)。然后使用对称密钥加密数据。对于共享密钥,这里的流程如下:

?对于节点B,当接收到传输的数据时,解析出节点A的随机公钥,然后利用节点A的随机公钥和节点B的私钥计算出对称密钥(KA算法).然后使用对称密钥对数据进行加密。

?对于上述加密方法,还存在很多问题,比如如何避免重放攻击(在消息中加入Nonce)和彩虹表(参考KDF机制)。由于时间和能力有限,暂时忽略。

?那么我们应该使用什么样的加密方法呢?

?主要基于要传输的数据的安全级别。事实上,不重要的数据可以被认证和签名。但是,非常重要的数据需要以更高的安全级别进行加密。

?密码系统是网络协议的一个概念。主要包括身份认证、加密、消息认证(MAC)和密钥交换算法。

?在全网传输过程中,根据密码套件,主要有以下几类算法:

?密钥交换算法:如ECDHE,RSA。主要用于客户端和服务器握手时的认证。

?消息认证算法:如SHA1、SHA2和SHA3。主要用于消息摘要。

?批量加密算法:比如AES,主要用来加密信息流。

?伪随机数算法:比如TLS1.2的伪随机函数,利用MAC算法的哈希函数,创建一个主密钥——和一个双方共享的48字节私钥。。当创建会话密钥(例如,创建MAC)时,主密钥充当熵源。

?在网络中,一条消息的传输一般需要在以下四个阶段进行加密,以保证消息的安全可靠传输。

?握手/网络协商阶段:

?在握手阶段,双方需要协商链接。主要的加密算法有RSA,DH和ECDH

?认证阶段:

?在身份验证阶段,有必要确定发送消息的来源。主要的加密方法有RSA,DSA,ECDSA(ECC加密,DSA签名)等。

?消息加密阶段:

?消息加密是指对发送的信息流进行加密。主要的加密方法包括DES、RC4和AES。

?消息认证阶段/防篡改阶段:

?主要是为了确保消息在传输过程中没有被篡改。主要的加密方法包括MD5、SHA1、SHA2、SHA3等。

?椭圆曲线密码,椭圆曲线密码。它是根据椭圆上的点的乘积来生成公钥和私钥的算法。用于生成公钥和私钥。

?ECDSA:用于数字签名,这是一种数字签名算法。有效的数字签名使接收方有理由相信消息是由已知的发送方创建的,这样发送方就不能否认消息已经发出(认证和不可否认)。,并且消息在传输过程中没有改变。ECDSA签名算法是ECC和DSA的结合。整个签名过程类似于DSA,不同的是签名中采用的算法是ECC,最后签名的值也分为R和s,主要用于身份认证阶段。

?ECDH:基于ECC算法的霍夫曼树密钥。通过ECDH,双方可以在不共享任何秘密的情况下协商一个共享秘密,这个共享秘密是为当前通信临时随机生成的。一旦通信中断,密钥就消失了。主要用于握手协商阶段。

?ECIES:是一种集成加密方案,也可以称为混合加密方案。它提供了语义安全性来抵御选择明文和选择密文攻击。。ECIES可以使用不同类型的函数:密钥协商函数(KA)、密钥导出函数(KDF)、对称加密方案(ENC)、哈希函数(hash)和H-MAC函数(MAC)。

?ECC是一种椭圆加密算法,主要描述如何根据公钥和私钥生成一个椭圆,并且是不可逆的。ECDSA主要使用ECC算法生成签名,而ECDH使用ECC算法生成对称密钥。。以上三者都是ECC加密算法的应用。在现实场景中,我们经常使用混合加密(对称加密、非对称加密、签名技术等。).ECIES是由底层的ECC算法提供的集成(混合)加密方案。。它包括非对称加密、对称加密和签名功能。

?什么是ECC?椭圆曲线密码的缩写。那么什么是椭圆加密曲线呢??WolframMathWorld给出了一个非常标准的定义:一条椭圆曲线就是一套被子?定义和满足?的点集。

这个前提条件是确保曲线不包含奇点。

因此,随着曲线参数A和B的不断变化,曲线也呈现出不同的形状。比如:

?非对称加密的所有基本原理基本上都是基于一个公式k=k*g.其中k代表公钥,k代表私钥。g代表选定的基点。非对称加密的算法就是为了保证这个公式?你可以';t做逆运算(也就是G/K可以';不可计算)。

?ECC如何计算公钥和私钥??这里我根据自己的理解描述一下。

?我理解ECC的核心思想是在曲线上选择一个基点G,然后在ECC曲线上随机选择一个点K(作为私钥),然后根据K*G计算出我们的公钥K。。并确保公钥k也在曲线上。

?那么如何计算k*G呢?如何计算k*G才能保证最终结果不可逆?这就是ECC算法要解决的问题。

?第一让';s随机选择一条ECC曲线,a=-3,b=7,得到如下曲线:

?在这条曲线上,我随机选择两个点。这两点相乘怎么算?我们可以简化这个问题。乘法可以用加法来表示,比如2*2=2^2,3*5=5^5。那么只要能算出曲线上的加法,理论上就能算出乘法。所以只要在这条曲线上可以计算加法,理论上就可以计算乘法。理论上可以算出表达式k*g的值

?曲线上加两个点怎么样?这里为了保证不可逆,ECC定制了曲线上的加法系统。

?实际上11=2,22=4,但是在ECC算法中,我们理解的这个加法系统是不可能的。所以需要定制一套适合这条曲线的加法系统。

?ECC定义,在图中随机找一条直线。,与ECC曲线相交于三个点(也可能是两个点),分别是P、Q和R。

?那么PQR=0。其中0不是坐标轴上的一个点,而是ECC中的一个无穷远的点。。也就是说,无穷远点定义为0点。

?同样,我们可以得到PQ=-Rr,由于R和-R是关于X轴对称的,所以我们可以求出它们在曲线上的坐标。

?PRQ=0,所以PR=-Q,如上图。

以上描述了在ECC曲线世界中如何执行加法运算。

?从上图可以看出直线和曲线只有两个交点,也就是说直线就是曲线的切线。在这一点上,p和r重合。

?也就是说,根据上述ECC加法系统,P=R。,PRQ=0,可以得到PRQ=2PQ=2RQ=0

?所以我们得到2*P=-Q(是不是越来越接近我们非对称算法的公式K=k*G)。

?于是我们得出一个结论,可以算乘法,但是只能算切点的乘法,只能算2的乘法。

?如果2可以变成任意数相乘。那么就可以表示乘法可以在ECC曲线中进行,那么ECC算法就可以满足非对称加密算法的要求。

?那么我们可以随机计算任意数的乘法吗?答案是肯定的。。即点积计算法。

?选一个随机数k,那么k*P等于什么?

?我们知道在计算机世界里,一切都是二进制的。既然ECC可以计算2的乘法,我们就可以把随机数k描述成二进制,然后再计算。假设k=151=10010111

?由于2*P=-Q,k*P就这样算出来了。。这就是点乘算法。因此,在ECC的曲线系统下可以计算乘法,因此认为这种非对称加密方法是可行的。

?至于为什么这个计算是不可逆的。这需要大量的推导,而我不';我不明白。。但我觉得可以这样理解:

?在我们的手表上,通常有一个时间刻度。现在,如果我们以1990年1月1日0:00:00为起点,如果我们告诉你,从起点算起已经过去了整整一年。然后我们就可以计算出出现的时间,也就是我们可以将时针、分针、秒针指向手表上的00:00:00。但另一方面,我说我手表上的时针现在指向00:00:00。你能告诉我从起点到现在已经过去多少年了吗?

?ECDSA签名算法与其他DSA和RSA基本相似,都采用私钥签名和公钥验证。只是算法系统采用了ECC算法。交互的双方应该采用同一套参数系统。签名的原理如下:

?选择曲线上的一个无穷远点作为基点?G=(x,y).随机取曲线上的一点K作为私钥,K=k*G计算公钥。

?签名流程:

?生成随机数r,计算RG。

?根据随机数R、消息M的哈希值H和私钥K,计算签名S=(Hkx)/R

?向接收者发送消息M、RG、S。

?签名验证流程:

?消息M,RG,S

已收到。

?根据消息计算哈希值H

?据寄件人';S公钥K,计算HG/SxK/S,并将计算结果与RG进行比较。如果它们相等,则验证成功。

?公式推论:

?HG/SxK/S=HG/Sx(kG)/S=(HxK)/GS=RG

?在介绍原理之前,先说明ECC满足结合律和交换律,即ABC=ABC=(AC)B.

?下面是WIKI上的一个例子,说明如何生成共享密钥,也可以作为参考。爱丽丝和鲍勃?的例子。

?爱丽丝和鲍勃将要交流。双方的前提是ECC基于相同的参数体系生成的公钥和私钥。所以所有ECC都有一个公共基点g.

?密钥生成阶段:

?Alice使用公钥算法ka=ka*G生成公钥KA和私钥KA,并将公钥KA公之于众。

?Bob使用公钥算法KB=KB*G。,生成公钥kb和私钥KB,并将公钥KB公开。

?计算ECDH阶段:

?爱丽丝用公式Q=ka*KB?计算一个密钥q.

?鲍勃使用公式Q'=kb*KA来计算密钥Q'。

?共享秘钥验证:

?Q=ka?KB=KA*KB*G=KA*G*KB=KA*KB=KB*KA=Q';

?因此,双方计算的共享密钥可以被Q加密而不被泄露。我们称q为共享密钥。

?以太坊采用的ECIEC加密套件中的其他内容:

?1.哈希算法中使用了最安全的SHA3算法Keccak。

?2.签名算法是ECDSA

?3.认证方式是什么?H-MAC

?4.ECC的参数系统采用secp256k1。其他参数系统参见此处

?ThewholeprocessofH-MACiscalledhash-basedmessageverificationcode.Itsmodelisasfollows:

在以太坊的UDP通信中(RPC通信的加密方式不同),采用并扩展了上述实现方式。

首先以太坊的UDP通信结构如下:

?在…之中,sig是用私钥加密的签名信息。Mac可以理解为整个报文的总结,ptype是报文的事件类型,data是RLP编码的传输数据。

?UDP的整体加密和认证。签名模型如下:

椭圆曲线密码,简称ECC,是一种基于椭圆曲线数学理论的非对称加密算法。与RSA相比ECC的优势在于,它可以使用更短的密钥来实现等同于或高于RSA的安全性。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。

一般椭圆曲线方程表示为:(其中a,b,c,d为系数)

y2=ax3bx2cxd

y2=x3等典型椭圆曲线?4216

先放个栗子:

小米难以计算的数是公钥密码算法中的私钥(一个公钥密码算法安全的必要条件(不充分)是"私钥不能从公钥推导出来).公钥密码算法最根本的原理就是利用信息的不对称性:即持有私钥的人在整个通信过程中掌握了最多的信息。

椭圆曲线加密算法是基于加法阶难求问题的一种密码方案。对于椭圆曲线,椭圆曲线的基点在例子中是5,而私钥是基点的加阶(例子中是11),公钥是基点(5)加相应阶(11次)得到的结果(55)。

简单描述为:G*k=K(G,K是公开的,K是秘密的)

上面的例子比较简单,椭圆曲线加密算法中的加法是基于"有限域上二元三次曲线上的点形成一个"有限加成循环群"。。具体来说,这个加法的几何定义如下。两点的相加结果是指这两点的连线与绕X轴的曲线相交的镜像。

如果我们从某一点出发(所谓单位元,比如正整数字段中的1,代表一个空间中最基本的单位)做自增运算(比如所谓的群运算),枚举整个空间的集合元素。如图:

因此,给定椭圆曲线的某一点G,从G开始,保持切线,寻找对称点,依次得到-2G,2G,-4G,4G,-8G。,8G….即当g点已知,X已知时,求xG点并不困难。相反,在已知xG点的情况下,求x是非常困难的。也就是Q=NG,n是我们的私钥,Q是我们的公钥。

现在我们知道了公钥(Q)和私钥(N)的生成原理,我们来看椭圆曲线数字签名算法(ECDSA)的过程,它是利用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。。ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准。

私钥主要用于签名和解密;公钥主要用于签名验证和加密,公钥可以从私钥计算出来,反之则不行。

公钥加密:用公钥加密的内容可以用私钥解密。

私钥签名:私钥签名的内容可以通过公钥验证。任何其公钥可以被验证的签名都可以被认为是由私钥持有者签署的。

通常需要六个参数来描述一条特定的椭圆曲线:T=(p,a,b,G,n,h)。

p:表示有限域Fp的素数a,b:椭圆方程的参数G:椭圆曲线上的一个基点G=(xG,yG)n:G:g,Fp中指定的一个素数。h:辅因子一个,它控制选定点的密度。h=#E(Fp)/n.

这里以secp256k1曲线(用于比特币签名的曲线)为例,介绍生成公私钥对的过程。

secp256k1的参数为:

本质上ECDSA的私钥是一个满足曲线G和k(0,n)的n阶的随机数。根据Q=kG可以计算出公钥,生成的私钥大小一般为32字节。公钥的大小通常是64字节。比如

ECDSA签名算法的输入是数据的哈希值,而不是数据本身。我们假设用户';的密钥对是(d,q);(d是私钥。q是公钥)要签名的信息:m;e=哈希(M);签名:签名(e)=(r,s)。

签名界面:

验证界面:

示例:

RSA目前应用最普遍,也是最经典的数字签名加密算法,但是签名长,

生成密钥很麻烦,素数生成技术有限,很难做到一次一密。

ECDSA发展势头强劲,呈上升趋势。ECDSA算法是ECCDSA的组合。与RSA数字签名算法相比,它具有速度快、强度高、签名短、前景乐观等优点。

ECDSA只能用于签名,但是有一种基于ECC实现公钥加密的方法

首先选择曲线Ep(a,b,G,n,h),随机选择私钥K,计算公钥:K=kG,信息在点M上编码

加密:随机选择r,密文为(rG,MrK)

解密:计算(MrK)-k(rG)因为它等于(mrk)-r(kg)=mrk-rK=M

感谢您阅读本文';详细介绍了ecdsa算法。如果你不';我对ecdsa算法的安全性知之甚少。想了解更多关于ecdsa算法的知识,可以在Dadaqq.coM网站首页搜索你想要的!

推荐阅读

Ecdsa算法[ECD sa算法安全吗]
比特币中消息加密和验证技术_影响比特币的消息
文章来源: Demi
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至405936398@qq.com 举报,一经查实,本站将立刻删除。
相关资讯
国际虚拟货币投资人(国家对虚拟币从业人员怎么定罪)
国际虚拟货币投资人(国家对虚拟币从业人员怎么定罪) 1970-01-01

现在我们知道了公钥(Q)和私钥(N)的生成原理,我们来看椭圆曲线数字签名算法(ECDSA)的过程,它是利用椭圆曲线密码(...

虚拟币平台怎么下载的 虚拟币平台怎么下载的啊
虚拟币平台怎么下载的 虚拟币平台怎么下载的啊 1970-01-01

现在我们知道了公钥(Q)和私钥(N)的生成原理,我们来看椭圆曲线数字签名算法(ECDSA)的过程,它是利用椭圆曲线密码(...

花火虚拟货币?神机花火泽丽炫彩如何获得
花火虚拟货币?神机花火泽丽炫彩如何获得 1970-01-01

现在我们知道了公钥(Q)和私钥(N)的生成原理,我们来看椭圆曲线数字签名算法(ECDSA)的过程,它是利用椭圆曲线密码(...

虚拟数字货币内容有哪些(虚拟数字货币内容有哪些呢)
虚拟数字货币内容有哪些(虚拟数字货币内容有哪些呢) 1970-01-01

现在我们知道了公钥(Q)和私钥(N)的生成原理,我们来看椭圆曲线数字签名算法(ECDSA)的过程,它是利用椭圆曲线密码(...

虚拟货币网站建设(正规的虚拟币交易平台怎么判断)
虚拟货币网站建设(正规的虚拟币交易平台怎么判断) 1970-01-01

现在我们知道了公钥(Q)和私钥(N)的生成原理,我们来看椭圆曲线数字签名算法(ECDSA)的过程,它是利用椭圆曲线密码(...

虚拟数字货币2022(虚拟数字货币)
虚拟数字货币2022(虚拟数字货币) 1970-01-01

现在我们知道了公钥(Q)和私钥(N)的生成原理,我们来看椭圆曲线数字签名算法(ECDSA)的过程,它是利用椭圆曲线密码(...