跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
大功率无感电阻捷比信 · 专业器件主题站

如何理解加密货币和区块链的密码学

引言由于大多数人自己可能拥有一些加密货币资产,因此您可能听说过术语“公钥”。和“私钥”。在区块链网络中,公钥等同于您的地址。如果网络中的其他人想向您发送一些资金,他或她将把它发送到您的公钥。您的私钥可被视为您的签名-每当您要进行资金交易时,都需要证明自己拥有公钥的私钥,而无需将其显示给网络中的任何人。网络中检查您的交易的参与者可以使用您的公钥证明您是私钥的所有者,甚至不知道什么是私钥。很酷!但是,这在更基本的层面上如何运作?让我们仔细看看这个理论。椭圆曲线密码学在这一部分中,我将简要介绍所使用的加密系统背后的魔力。因为它背后的数学非常复杂,所以不需要了解它的每个方面。密码系统主要用于区块链网络,它基于椭圆曲线的数学原理。但是这个椭圆曲线到底是什么?用数学术语来说,它是满足等式y²=x³+ ax + b的所有点(x,y)的集合。这样的曲线可能如下所示:如果将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)在上式中,函数symbol()生成签名。收到消息M的任何人都可以验证签名,并证明发送方的公钥确实持有私钥:Verification = Ver(签名,M,pub)接收方只需要签名本身,消息和发送者的公共密钥。这是椭圆曲线密码学的基本原理。现在让我们编写一些代码!编码加密是在python中进行的,上述方法可以使用fastecdsa库来实现。但是,有更多的库是为椭圆曲线密码学编写的。首先,您需要使用“ pip install”终端中的命令。在安装pip install fastecdsa之后,我们可以打开python IDE并开始编码。从fastecdsa导入关键点,曲线,ecdsapriv_key,pub_key = keys.gen_keypair(curve.P256)print(priv_key)首先,我们从fastecdsa库中导入一些类。 CLASS键包含一个使用椭圆曲线数学生成键对的函数。 CLASS曲线包含许多不同的椭圆曲线,您可以从中选择一种以生成关键点。 CLASSecdsa稍后用于生成和验证签名。在第二行中,使用曲线P256生成一对公共密钥和一个私有密钥。然后,我们打印私钥和公钥。私钥的结果应如下所示:20053020608649649230331723442089943129241597707800309205888496491961204729412316您会看到,私钥是一个非常大的数字,有很多数字!让我们看一下公钥的外观:X:0 xf8781fc1967637b0fe3e43cbd750051672fad09d0fd8f18d2d49ed1f84ebb5c9Y:0 x26a617f3fc7b1c34bf00b21445201299f9730bc783ff475e您可以在曲线上看到256点的坐标,而在曲线P和P上的公钥坐标是256 ddff511c622的坐标。让我们继续生成并验证某些消息的签名。只需在上面的代码中添加以下几行即可:message ='我是一条消息'(r,s)= ecdsa.sign(message,priv_key)print((r,s))我们将一些字符串定义为消息,然后使用导入的CLASS ecdsato生成签名(r,s)。在那之后,如果我们打印它,我们应该得到类似下面的内容:(5051796304674036363589800321627720065390968951281733524730,24429916353425477548863857007437472287804761347218109)现在我们可以继续验证签名。同样地,