怎么样理解椭圆曲线加密并对其进行编码

当前位置:首页 > 币圈百科 > 怎么样理解椭圆曲线加密并对其进行编码

怎么样理解椭圆曲线加密并对其进行编码

2022-11-07币圈百科214

在我上一篇关于如何构建一个简单的区块链的文章中,我介绍了区块链技术的基础知识,并一步一步地指导您如何在您的区块链上构建一个简单的区块链。现在我想向你们展示加密货币和区块链的密码学部分。因为你上次可能用过,所以我们先从一点理论开始,然后直接编程。我们开始吧!

引言

由于大多数人可能都拥有一些加密货币资产,所以你可能听说过“公钥”和“私钥”这两个词。在区块链网络中,公钥相当于你的地址。如果网络中的其他人想给你汇钱,他或她会把钱发到你的公钥上。你的私钥可以视为你的签名——无论何时你要进行资金交易,你都需要证明你拥有属于你公钥的私钥,而不需要向网络中的任何人展示。网络参与者检查你的交易,你可以证明你用你的公钥作为私钥的拥有者,连私钥是什么都不知道。非常酷!但是这在更基本的层面上是如何工作的呢?让我们深入研究一下这个理论。

椭圆曲线密码学

在这一部分,我将简单介绍一下所使用的加密系统背后的魔力。因为背后的数学是相当复杂的,没必要去理解它的每一个方面。这种密码系统主要用于区块链网络,它是基于椭圆曲线的数学原理。但是这条椭圆曲线到底是什么呢?用数学术语来说,就是满足方程的所有点(x,y)的集合。y2=x3ax b

这样的曲线蓑衣网小编2022可能是这样的:

如果将这条曲线上的任意一点P=(x,y)加到曲线上的另一点Q上,就会得到这条椭圆曲线上的点。您可以在下图中看到这一点的视觉添加。

你也可以选择曲线上的一个点p,加上x乘以——。你仍然会在椭圆曲线上得到一个点。

p p … p=xp=r在这种情况下,x只是一个任意的自然数。在椭圆曲线密码中,人们利用了仅通过已知点P和r计算数X在计算上不可行的事实,这通常被描述为求解离散对数的问题。对于密码学来说,在椭圆曲线上选择一个合适的点P,会产生一个足够高的随机自然数X,这个自然数就是所谓的私钥。用选定的点P和私钥计算曲线上的点R,然后定义为公钥。所以公钥和私钥是紧密相连的!使用这种方法,您可以“签署”任何想要的消息。设置m为任意消息,pub为发送者的公钥,priv为发送者的私钥。然后根据m和priv两个参数计算签名:signature=signature (m,priv)。在上面的公式中,函数符号()生成签名。任何收到消息M的人都可以验证签名3354,证明发送者的公钥确实持有私钥:verification=Ver (signature,M,pub)接收者只需要签名本身、消息和发送者的公钥。这是椭圆曲线密码的基本原理。现在让我们写一些代码!

编码密码术

在python中,可以使用fastecdsa库实现上述方法。然而,还有更多为椭圆曲线加密技术编写的库。首先,您需要在终端中使用“蓑衣网小编2022pip install”命令。安装pip fastecdsa后,我们就可以打开python IDE开始编码了。从fastecdsa导入密钥、曲线、ecdsapriv_key、pub _ key=keys.gen _ key对(curve.p256) print (priv _ key)。首先,我们从fastecdsa库中导入一些类。CLASS key包含一个使用椭圆曲线数学来生成密钥对的函数。CLASS curve包含了很多不同的椭圆曲线,你可以选择其中的一个来生成密钥。CLASSecdsa稍后用于生成和验证签名。在第二行中,曲线P256用于生成一对公钥和一个私钥。然后,我们打印私钥和公钥。 私钥的结果应该如下:200530206086492303317234420894312924159770780030920588496491961204729412316。你看,私钥是一个相当大的数字,数字很多!我们来看看公钥是什么样子的:X:0 xf 8781 FC 1967637 b 0 e 3 e 43 CBD 750051672 fad 09d 0 FD 8 f 18d 49 ed 1 f 84 ebb 59y:0x 26a 617 F3 FC 7 B1 c 34 BF 0 b 21445201299 f 9730 BC 7838994751 e ad 5 ddff 511我们继续生成并验证一些只需在上面的代码中添加以下几行:message='我是消息'(r,s)=ecdsa.sign (message,priv_key)print((r,s))。我们将一些字符串定义为消息,然后使用导入的类ecdsato来生成签名(r,s)。在此之后,我们打印它,应该会得到类似如下的结果:(505179630464036358980032162772006,89512817,3352473再次,只需添加以下几行代码:valid=ecdsa.verify((r,s),message,pub_key)print(valid)。我们再次使用ecdsa类,并从该类调用verify()函数,该函数依赖于三个参数的签名、消息和生成消息的参数的公钥。然后,我们打印有效的变量。如果一切正常,我们应该得到以下输出:真的恭喜!您刚刚学习了区块链网络中使用的公钥加密的基础知识。你可以进一步创造你自己的加密货币。

怎么样理解椭圆曲线加密并对其进行编码 | 分享给朋友: