首页 > Filecoin > 正文

高中生能够理解的Filecoin加密算法(1)

胡飞瞳  2019-09-08  IPFS/Filecoin栏目  

  本文是前文高中生如何理解比特币加密算法的续篇,希望通过前一篇文章的普及,这里进一步对具体算法进行阐述。同样本文不涉及高深的数学理论,希望高中生都能看懂。

  取名改为FILecoin加密算法,是因为最近专注于Filecoin相关代码和逻辑的研究,目前其账户地址和相关签名采用的椭圆曲线算法与比特币完全一样,都是?secp256k1,把标题改成这个也符合题意,同时,Filecoin所采用的密码体系更广,比如还包括BLS,希望之后有时间再写文普及。

预备知识

既然是高中生都能够读懂,就不需要太多的预备知识,但是你至少应该了解一些最基本的东西,比如:素数,因式分解,指数和对数,求模等。与此同时,为了看懂,你还需要有最为基础的数论和群论和有限域的知识。这几个点在高中时虽然没有单独列出来作为一个门类进行讲解,但也有涉猎。这里就这几个知识点简单解释一下。

数论:研究整数性质的一个数学分支。素数是其基本的研究对象,密码学的基础。你学过素数,因式分解,数列等, 你就了解数论的基础知识了;

群论:群是数学对事物的高度抽象,属于抽象代数的范畴。简单地说群就是在集合的基础上定义一系列运算,也运算的输入输出都在定义的集合之内的一种抽象,并满足一定的数学规律,则成为群。这么说,太抽象,但你想一想数学试卷中经常会给你出定义运算方法的题,然后让你做证明,这就是在让你了解群论的基础知识。如果要具体理解,你可以直接参考椭圆曲线算法的定义。

有限域:又名伽罗瓦域,以发明此概念的早逝的天才数学家伽罗瓦命名。域是一种可定义了四则运算的结构(想一下椭圆曲线算法的四则运算定义)。有限域则是定义了四则运算的一个有限集合,满足结合律交换律等。一个有限域在域的乘法下就是一个循环群。

特别说明:以上解释仅仅为了帮助高中生理解,并不是定义,也非常不准确。千万不要照搬。

更多的理解,再次敬请参阅?高中生如何理解比特币加密算法?及其他相关资料。

Filecoin 的椭圆曲线算法 secp256k1

Filecoin 的基本密码学算法与比特币一致,都是 Secp256k1。我们知道椭圆曲线算法有很多种,而且在比特币诞生之后,也有很多对椭圆曲线算法的研究,和新的算法的推出,其中不乏宣称性能和安全性都高于secp256k1的算法。那么,Filecoin仍然选择此算法,一个很重要的原因是这个算法已经被广泛采用,久经考验。这种思虑在安全领域,尤其是加密学领域非常重要,算法的弱点是在使用中发现的,一个没有被广泛使用的算法,很难被证明是安全的。

对于高中生而言,要理解椭圆曲线算法,有一定难度。其实,我们并不需要理解那么深入,就可以理解其加解密及签名过程。因为当你了解了有限域,及四则运算后,这些运算可以完全对应到高中生学的整数集合和加减乘除的运算上来。理解起来就容易多了。在详细讲述之前,我们来看看我们的有限域和四则运算的定义,主要有以下几点要掌握:

secp256k1 定义了一个很大的有限域,大小接近于 2^256。这有多大,简单地说,与宇宙中的所有原子的个数是一个级别。但无论有多大,仍然是一个有限域,即个数是固定的;

secp256k1 所定义的有限域在乘法下构成一个循环群,也就是说,任意选择一个数,乘以另一个数,不停地乘下去,会形成一个循环往复的效果。简单想一下模乘就可以理解了;

这个域中有一些神奇的元素(g),通过自身相加(或者相乘,看定义而定),也就是g, 2g,?3g, ... (g, g^2, g^3, ...,), 一直加(乘)下去,可以遍历整个域。

如果这个还不能理解,那么我们举另一个例子来帮助理解。

比如如下有限集合:{0,1,2,3,4,5,6},在其上定义我们熟知的加减乘除 mod 7 的运算。

但是,椭圆曲线所定义的有限域中的元素实际上是椭圆曲线上的一系列点(x, y)。但这不妨碍我们就认为是一个数。另外,需要注意的是前面第三点我们讲到的神奇元素,我们称为基点,一般表示为 G,对其在计算上的理解可以参考我上一篇文章中的原根。

  

secp256k1 如何加解密?

椭圆曲线加解密体系是双密钥体系。也就是说每一方都有一对密钥:公钥和私钥。公钥是公开的,任何人都可以知道,私钥必须保密,否则一切都可能泄漏。

注意,我们选定了secp256k1作为我们的椭圆曲线算法,也就是说,我们使用的参数固定了,其中一个参数基点G,这在我们系统中是一个常数。

  G = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8 (非压缩形式)

  G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 (压缩形式,仅包括X的值,Y值可以通过X计算出来)

基于此,就可以构建公私钥了。设私钥是 k (一个小于p的随机数),那么公钥? ?K = kG 。太简单了。就是一个乘法。

加解密的过程可以简单理解为:加密者获取解密者的公钥,用其公钥加密内容,解密者拥有私钥,使用私钥解密。

使用公钥加密:

已知要加密的内容为:M (一个数,加密的内容当然不一定是一个数,但是转换一下就是了)。加密步骤如下:

选择随机数 r (r 同样是小于p的一个数)

计算?C = {rG, M rK},其中G为基点,M为加密的内容,K为公钥

  这里的C就是加密好的密文。看看,就是最简单的数学运算。这里根据公钥的定义,C也可以写成:?{rG, M rkG}。特别提请注意,这里的 r 是保密的。

  使用私钥解密:

  前述密文包含两个部分,分别是 rG, M rK。解密很简单。

  直接做如下计算,使用密文的第二部分减去第一部分乘以公钥,因 K=kG,则:

  ????M rK?- k(rG) =?M rkG?- krG?= M (运算满足结合律)

  简单解出原文。

  但是,尽管看起来如此简单,无论是比特币还是Filecoin都没有使用secp256k1来加解密,而是仅仅用其来做签名。为何不做了?一个方面是基本不需要,另一个方面是,非对称密钥的加解密计算复杂度太高。对少量内容可行,对大量内容则太耗费资源。

  少量内容的加密的最广泛的应用就是签名了。

secp256k1?如何签名?

签名,就是对内容的hash值进行加密,但加密的方向与前文描述的是相反的。也即是用私钥加密,用公钥解密。注意,这在双密钥体系中两个方向都是没有问题的。

已知:?公钥 K = kG。k 为私钥,G为基点。

如何求HASH值这里不赘述,总之,知道任何内容都可以求出一个固定长度的一小段信息就好了。

  签名(使用私钥加密):

  已知要签名的内容为M。签名步骤如下:

求 内容的 hash 值 h = H(M) ;?H 为hash函数

选择随机数 r (r 同样是小于p的一个数),计算 rG;G(x, y)为基点?

计算?s =?(h ?kx) / r;? x?为G的横坐标

将消息 M,和签名?{rG, s}?发送给对方,或传送至链上

  验签(使用公钥解密):

  接收方或验证方收到消息 M,及签名 {rG, s}后。解签步骤如下:

求?内容的 hash 值?h = H(M) ;?H 为hash函数

使用发送方公钥 K 计算 hG/s xK/s == rG;相等即成功?

为什么呢?计算一下:

? ? ? ??hG/s xK/s = hG/s x(kG)/s?

?????????????????????????????= (h xk)G/s

? ? ? ? ? ? ? ? ? ? ?  = r(h xk)G / (h kx)?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?= rG

  注:椭圆曲线算法的签名统称为 ECDSA,其签名和解签的方式不止一种,但基本的计算方式一样。完全可以按照四则运算和高中数学知识进行理解。基本理论相同。

随机数 r 是怎么回事?

  上述文中提到的加解密以及签名中都涉及到随机数 r,这个数很重要。利用不好会带来大麻烦。本文篇幅有限,对此我将另开一文,详细讲解。剧透一下,会有彩蛋。

  参考:

  高中生如何理解比特币加密算法

  一文看懂钱包助记词和根私钥的关系

  玩转比特币之一:私钥/公钥/地址

  Filecoin共识机制的探索

  

版权信息
作者:胡飞瞳
来源:胡飞瞳

亚博88国际

yabo狗亚下载

亚博app官方下载安卓

手机版

Copyright ? 2013 比特巴 www.btb8.com
始建于2013年,提供比特币 亚博88国际链及数字货币新闻、技术教程、测评、项目周报、人物等资讯
本页面提供的是IPFS教程资讯,星际文件系统IPFS(Filecoin)目标是为了补充甚至是取代目前统治互联网的超文本传输协议(HTTP)。