首页 经济 产业 金融 市场 商业 个股 图片 关于

观察

首页 头条 国际 国内 观察

飞猪币:公有链,挖矿机制(核心算法)和加密算法

观察 | 发布时间:2018-06-21 | 人气: | #评论#
摘要:Flypigcoin(飞猪币):公有链,挖矿机制(核心算法)和加密算法 Flypigcoin,是一个神奇的数字货币,从诞生之日起,就充满了神奇,首先,它是一个真正的加密数字货币,flypigcoin(飞猪币

Flypigcoin(飞猪币):公有链,挖矿机制(核心算法)和加密算法

Flypigcoin,是一个神奇的数字货币,从诞生之日起,就充满了神奇,首先,它是一个真正的加密数字货币,flypigcoin(飞猪币)的挖矿机制是采用的POW+POS核心算法,从密码学的角度来说是采用的SHA256算法和ECC非对称加密算法;同时,flypigcoin(飞猪币)是一个真正的区块链公有链,那什么是公有链?

在区块链领域,我们经常会听到这些与链有关的名词:

公有链、私有链、联盟链、跨链、侧链

这些区块链有着各自的特点和不同场景应用。

1.png 

公有链

公有链是指全世界任何人都可以随时进入到系统中读取数据、发送可确认交易、竞争记账的区块链。

公有链通常被认为是“完全去中心化”的,因为没有任何个人或者机构可以控制或篡改其中数据的读写。

公有链一般会通过代币机制来鼓励参与者竞争记账,来确保数据的安全性。比特币、以太坊、飞猪币都是典型的公有链。

2.jpg 

飞猪币flypigcoin目前的区块高度和区块生成时间戳

私有链

私有链是指其写入权限由某个组织和机构控制的区块链,参与节点的资格会被严格限制。

由于参与节点是有限和可控的,因此私有链往往可以有极快的交易速度、更好的隐私保护、更低的交易成本、不容易被恶意攻击,并且能做到身份认证等金融行业必需的要求。

3.jpg 

联盟链

联盟链是指有若干个机构共同参与管理的区块链,每个机构都运行着一个或多个节点,其中的数据只允许系统内不同的机构进行读写和发送交易,并且共同来记录交易数据。

私有链和联盟链之间的设计隐私权限会有不同,联盟链中的权限设计要求往往会更为复杂。

4.jpg 

 

跨链

跨链,顾名思义,就是通过一个技术,能让价值跨过链和链之间的障碍,进行直接的流通。

区块链是分布式总账的一种。一条区块链就是一个独立的账本,两条不同的链,就是两个不同的独立的账本,两个账本没有关联。本质上价值没有办法在账本间转移,但是对于具体的某个用户,用户在一条区块链上存储的价值,能够变成另一条链上的价值,这就是价值的流通。

如果说共识机制是区块链的灵魂核心,那么对于区块链特别是联盟链及私链来看,跨链技术就是实现价值网络的关键,它是把联盟链从分散单独的孤岛中拯救出来的良药,是区块链向外拓展和连接的桥梁。

5.jpg 

侧链

那什么又是侧链呢?这个概念来自比特币社区,2013 年 12 月提出。

侧链的诞生是由于比特币本身或者某一区块链本身的机制存在一些问题。但是直接在比特协议或者比特币链条上进行修改的话,又容易出错。而且比特币区块在一直不断运行,万一出错了涉及的资金量太大了。这个是不被允许的。

这种情况下,诞生了侧链。

本质上来说,侧链机制,就是一种使货币在两条区块链间移动的机制,它允许资产在比特币区块链和其它链之间互转。降低核心的区块链上发生交易的次数。

侧链(sidechains)实质上不是特指某个区块链,而是指遵守侧链协议的所有区块链,该名词是相对与比特币主链来说的。

那么什么又是POW+POS探矿机制或者核心算法呢?

POW:全称Proof of Work,工作证明。这就是说你的收益取决于你对区块链做出的贡献,也就是我们在挖矿时的有效工作,换句话来说,你的工作效率和效力越高,你的收益就越高。应用于挖矿的区块链技术来说,挖矿时的工作效率越高,所获得的数字货币就越多,不少的主流数字货币都是采用这种模式的。

POS:全称Proof of Stake,股权证明。这种模式就相当于你持有数字货币的量和时间,分配给你相应的利息。给大家举个例子来说,比如你每个币每天产生1币龄,假设你持有100个币,共持续了30天,那么你的币龄就是3000,这个时候,如果你发现了一个POS区块,那么你的币龄就会被清空为0,每清空一次就会获得相应的利息,当你打开钱包的时候,利息就会近日你的账户,但是当你离线的时候,不管你存入多少币,都不会获得相应的利息

相比而言,POW是一个在比特币出现之前就有了的东西,而因为比特币的成功,POW基本上特指比特币的POW。但相反,POS是个新东西,目前并没有成熟的POS应用,所以,当提到POS的时候,并不是指某一个算法,而是一类。

那为什么飞猪币为什么会选择一套pos+pow核心算法呢?

我们从飞猪币的创始团队中了解到:PoW机制转变到PoW+PoS交易混合机制,这样做的转变很小,能够更快捷,更安全,相比较而言对用户更有利。因为我们要避免机制转变带来的危险性,等到整个系统更安全以后,才能进行更大的投入。

 

6.jpg 

进一步,我们了解到飞猪币所采用的区块链的加密算法有两种:

SHA256算法和ECC非对称加密算法。

比特币算法——SHA256算法介绍

SHA256是安全散列算法SHASecure Hash Algorithm)系列算法之一,其摘要长度为256bits,即32个字节,故称SHA256SHA系列算法是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1SHA-224SHA-256SHA-384 和 SHA-512 等变体。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。下面介绍该算法计算消息摘要的原理。

对于任意长度(按bit计算)的消息,SHA256都会产生一个32个字节长度数据,称作消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据是否发生改变,即验证其完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。

  SHA算法有如下特性:1.不可以从消息摘要中复原信息;2.两个不同的消息不会产生同样的消息摘要。

  一、术语和概念

  (一)位(Bit),字节(Byte)和字(Word

  SHA始终把消息当成一个位(bit)字符串来处理。本文中,一个Word)是32位,而一个字节Byte)是8位。比如,字符串“abc”可以被转换成一个位字符串:01100001 01100010 01100011。它也可以被表示成16进制字符串:0x616263.

   二、SHA256算法描述

  (一)补位

  信息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补位后的消息长度)Q2 = 448。即使长度已经满足对512取模后余数是448,补位也必须要进行。

  补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位。以信息“abc”为例显示补位的过程。

  原始信息:01100001 01100010 01100011

  补位第一步:0110000101100010 01100011 1

  首先补一个“1”

  补位第二步:0110000101100010 01100011 10…..0

  然后补423“0”

  我们可以把最后补位完成后的数据用16进制写成下面的样子

  61626380 0000000000000000 00000000

  00000000 0000000000000000 00000000

  00000000 0000000000000000 00000000

  00000000 00000000

  现在,数据的长度是448了,我们可以进行下一步操作。

  (二)补长度

  所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常用一个64位的数据来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0。在进行了补长度的操作以后,整个消息就变成下面这样了(16进制格式)

  61626380 0000000000000000 00000000

  00000000 0000000000000000 00000000

  00000000 0000000000000000 00000000

  00000000 0000000000000000 00000018

  如果原始的消息长度超过了512,我们需要将它补成512的倍数。然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。

  (三)使用的常量

  在SHA256算法中,用到64个常量,这些常量是对自然数中前64个质数的立方根的小数部分取前32bit而来。这64个常量如下:

    428a2f98 71374491 b5c0fbcf e9b5dba5 
        3956c25b 59f111f1 923f82a4 ab1c5ed5 
        d807aa98 12835b01 243185be 550c7dc3 
        72be5d74 80deb1fe 9bdc06a7 c19bf174 
        e49b69c1 efbe4786 0fc19dc6 240ca1cc 
        2de92c6f 4a7484aa 5cb0a9dc 76f988da 
        983e5152 a831c66d b00327c8 bf597fc7 
        c6e00bf3 d5a79147 06ca6351 14292967 
        27b70a85 2e1b2138 4d2c6dfc 53380d13 
        650a7354 766a0abb 81c2c92e 92722c85 
        a2bfe8a1 a81a664b c24b8b70 c76c51a3 
        d192e819 d6990624 f40e3585 106aa070 
        19a4c116 1e376c08 2748774c 34b0bcb5  
        391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3 
        748f82ee 78a5636f 84c87814 8cc70208 
        90befffa a4506ceb bef9a3f7 c67178f2
 
  (四)需要使用的函数

   CHx, y, z) = (x AND y) XOR ( (NOT x) AND z)  
        MAJ( x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)  
        BSIG0(x) = ROTR^2(x) XOR ROTR^13(x) XOR ROTR^22(x)  
        BSIG1(x) = ROTR^6(x) XOR ROTR^11(x) XOR ROTR^25(x)  
        SSIG0(x) = ROTR^7(x) XOR ROTR^18(x) XOR SHR^3(x)  
        SSIG1(x) = ROTR^17(x) XOR ROTR^19(x) XOR SHR^10(x) 
        其中xyz皆为32bit的字。
        ROTR^2(x)是对x进行循环右移2

  (五)计算消息摘要

        基本思想:就是将消息分成N512bit的数据块,哈希初值H(0)经过第一个数据块得到H1),H1)经过第二个数据块得到H2),......,依次处理,最后得到HN),然后将HN)的832bit连接成256bit消息摘要

        I、哈希初值H0

        SHA256算法中用到的哈希初值H0)如下:
        H(0)0 = 6a09e667 
        H(0)1 = bb67ae85  
        H(0)2 = 3c6ef372 
        H(0)3 = a54ff53a 
        H(0)4 = 510e527f 
        H(0)5 = 9b05688c 
        H(0)6 = 1f83d9ab 
        H(0)7 = 5be0cd19
注:这些初值是对自然数中前8个质数35711等的平方根的小数部分取前32bit而来

        II、 计算过程中用到的三种中间值:
        16432bit字的message schedule标记为w0w1w63
        2832bit字的工作变量标记为abcdefgh
        3、包括832bit字的哈希值标记为H(i)0H(i)7
       

        III、 工作流程:
        原始消息分为N512bit的消息块。每个消息块分成1632bit的字标记为M(i)0M(i)1M(i)2M(i)15然后对这N个消息块依次进行如下处理
        For i=1 to N
         1   For t = 0 to 15 
                     Wt = M(i)t 
                 For t = 16 to 63 

                     Wt = SSIG1(W(t-2)) + W(t-7) + SSIG0(t-15) + W(t-16) 
         2  a = H(i-1)0 
                b = H(i-1)1 
                c = H(i-1)2 
                d = H(i-1)3 
                e = H(i-1)4 
                f = H(i-1)5 
                g = H(i-1)6 
                h = H(i-1)7
         3For t = 0 to 63 
                    T1 = h + BSIG1(e) + CH(e,f,g) + Kt + Wt 
                    T2 = BSIG0(a) + MAJ(a,b,c) 
                    h = g
                    g = f 
                    f = e 
                    e = d + T1 
                    d = c 
                    c = b 
                    b = a 
                    a = T1 + T2
 
           4H(i)0 = a + H(i-1)0 
                 H(i)1 = b + H(i-1)1 
                 H(i)2 = c + H(i-1)2 
                 H(i)3 = d + H(i-1)3 
                 H(i)4 = e + H(i-1)4 
                 H(i)5 = f + H(i-1)5  
                 H(i)6 = g + H(i-1)6 
                 H(i)7 = h + H(i-1)7
N个消息块依次进行以上四步操作后将最后得到的H(N)0H(N)1H(N)2H(N)7串联起来即可得到最后的256bit消息摘要。
 

    SHA算法安全吗?

        2013910日美国约翰霍普金斯大学的计算机科学教授,知名的加密算法专家,Matthew GreenNSA要求删除他的一份关于破解加密算法的与NSA有关的博客。 同时约翰霍普金斯大学服务器上的该博客镜像也被要求删除。但当记者向该大学求证时,该校称从未收到来自NSA的要求要删除博客或镜像的资料,但记者却无法在原网址再找到该博客。幸运的是,从谷歌的缓存可以找到该博客。该博客提到NSA每年花费2.5亿美元来为自己在解密信息方面获取优势,并列举了NSA的一系列见不得人的做法。在BitcoinTalk上,已经掀起了一轮争论:到底SHA256是否安全?

部分认为不安全的观点包括:

NSA制造了sha256, 我们不相信NSA,他们不可能不留后门

棱镜事件已经明白的告诉我们,政府会用一切可能的手段来监视与解密

虽然有很多人会研究SHA-2,且目前没有公开的证据表明有漏洞。但没有公开这并不能代表就没有,因为发现漏洞的人一定更倾向于保留这个秘密来自己利用,而不是公布。

部分认为安全的观点包括:

SHA-2是应用广泛的算法,应该已经经历了实践的检验。

美国的对头中国和俄国都有很多杰出的数学家,如果有问题的话,他们肯定已经发现了。

如果真的不安全,世界上安全的东西就太少了,我不能生活在提心吊胆里,所以我选择相信安全

ECC非对称加密算法介绍:

在这篇文章中:

椭圆曲线

椭圆曲线有一些很有用的特征

坐标,得到一个非常美的结果

有限域

算法原理

椭圆曲线

椭圆曲线在代数上的表示是下面这个方程: y2 = x3 + ax + b 其中,a = 0, b = 7 (比特币系统所使用的版本),它的图形如下:

7.png 

椭圆曲线有一些很有用的特征

一条非垂直的直线与椭圆曲线相交于两点,若这两点均不是切点,则曲线上必有第三点与那条直线相交

过曲线上任意一点的非垂直切线与该曲线必有且仅有另一个交点。

利用这些特征,我们可以定义两种运算:“异点相加”和“同点加倍”。

“异点相加”, P + Q = r, 定义为:r为r’基于x轴的反射点(对称点)。其中,R’为包含P和Q的直线与曲线的第三个交点,如图上所示。

同样,“同点加倍”,P + P = r, 定义为:作一条过P点的切线,先求出该切线与曲线的另一交点R’,再计算r‘基于x轴的反射点r。

8.png 

r 坐标,得到一个非常美的结果

p!=q

9.jpg 

p=q

10.png 

有限域

同时,并不是所有的椭圆曲线都适合加密。y2=x3+ax+b是一类可以用来加密的椭圆曲线,也是最为简单的一类。下面我们就把y2=x3+ax+b 这条曲线定义在Fp(模p剩余类构成的域)上: 选择两个满足下列条件的小于p(p为素数)的非负整数a、b 4a3+27b2≠0 (mod p) 则满足下列方程的所有点(x,y),再加上 无穷远点O∞ ,构成一条椭圆曲线。 y2=x3+ax+b (mod p) 其中 x,y属于0到p-1间的整数,准确的说是模素数p剩余类,并将这条椭圆曲线记为Ep(a,b)。

这里为什么要加上无穷远点呢,无穷远点来自于射影平面,射影平面比欧式平面多了无穷远点,所有无穷远点构成无穷远直线,射影平面有一个重要假设:

平行线在无穷远处相较于一个点,即无穷远点O点,并且每条直线只有一个无穷远点

11.png 

在椭圆曲线Ep(a,b)中

p1+r1=O,p1+O=p1,p2+r2=O,p2+O=p2 所有椭圆线点按照P+Q=r算法构成加群 O为单元零元,p1,r1互为逆元,p2,r2互为逆元。

举个例子

p = 71,a=0,b=7,曲线点已经离散了,但还是对称的,对称点互为逆元。

12.png 

加群有72个元素(加一个无穷远点)每个元素阶如下。

13.jpg p = 79,a=0,b=7,加群元素个数67(素数),素数阶群,每个元素的阶(除了单位元)都是67,都是群的生成元,计算出来结果:

14.jpg 

算法原理

考虑如下等式:K=kG [其中 K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数],不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。这就是椭圆曲线加密算法采用的难题,我们把点G称为基点(base point)。

加解密流程: 1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。 2、用户A选择一个私有密钥k,并生成公开密钥K=kG。 3、用户A将Ep(a,b)和点K,G传给用户B。 4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r。 5、用户B计算点C1=M+rK;C2=rG。 6、用户B将C1、C2传给用户A。 7、用户A接到信息后,计算C1-kC2,结果就是点M。因为 C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M, 再对点M进行解码就可以得到明文。

G = (1,18)prikey = 40pubkey = get_add(G, prikey)r = 16M = (34,24)C1 = get_r(M,get_add(pubkey, r))C2 = get_add(G, r)temp = get_add(C2,prikey)get_r(C1,(temp[0], MOD-temp[1]))]))

最后一步解密结果和原文一样

[34, 24]

签名过程如下:

1、选择一条椭圆曲线Ep(a,b),和基点G; 2、选择私有密钥k(k

验证过程如下: 1、接受方在收到消息(m)和签名值(r,s)后,进行以下运算 2、计算:sG+H(m)K=(x1,y1), r1≡ x1 mod p。 3、验证等式:r1 ≡ r mod p。 4、如果等式成立,接受签名,否则签名无效。

import numpy as npimport  sys  
import matplotlib.pyplot as plt
def ecc_equation(a, b):
    def ecc(x):
        return x**3+a*x+7
    return ecc

# 求平方根
def get_square_root_mod(mod):
    def get_square_root(n):
        lr = []
        if n >= mod:
            n = n%mod        for el in xrange(0, mod):
            if el**2%mod == n:
                return el    return get_square_root
# y
def get_y(x):
    return [x,get_square_root(ecc(x))]# 检查点是否在曲线上
def check_point(p, mod=MOD):
    if p[1]**2%mod == (ecc(p[0]))%mod:
        return True    else:
        return False
# 求element在模mod剩余类群逆元
def invert(element, mod):
    if element >= mod:
        element = element%mod    if element == 0:
        return None    for index in xrange(1, mod):
        if element*index%mod == 1:
            return index
# 给出p,q求r=p+q
# if p != q
# c = (py-qy)/(px-qx)# rx = c^2 - px-qx
# ry = c(px-rx)-py
# if p ==q
# c = (3px^2+a)/2py,rx = c^2-2px,ry=c(px-rx)-py
def get_r(p, q,mod=MOD, a=A):
    p = map(lambda x: x % mod, p)
    q = map(lambda x: x % mod, q)
    if p[0] == q[0] and (p[1]+q[1])%mod==0:
        #互为逆元点和为无穷远点,方便处理 记为[np.infty,np.infty]
        return [np.infty,np.infty]
    if p != q:
        c = (p[1]-q[1])*invert(p[0]-q[0], mod)%mod    else:
        c = (3*p[0]**2+a)*invert(2*p[1],mod)%mod
    rx = (c**2-p[0]-q[0])%mod
    ry = (c*(p[0]-rx)-p[1])%mod    return [rx,ry]# 构建循环群
def cycle_group(generate_el):
    power = [generate_el]
    lr = generate_el    while True:
        lr = get_r(generate_el, lr)
        power.append(lr)
        if lr == [np.infty, np.infty]:
            return power
# 求倍点
def get_add(G, multiple):
    lr = G    for index in xrange(1, multiple):
        lr = get_r(lr, G)
    return lr
# 功能同上,利用同点加倍,性能更高
def get_multiple(G, multiple):
    if multiple%2 == 0:
        temp = get_multiple(G, multiple/2)
        return get_r(temp,temp)
    else:
        if multiple > 1:
            temp = get_multiple(G, multiple-1)
            return get_r(G, temp)
        else:
            return Gimport numpy as npimport  sys  
import matplotlib.pyplot as plt

A = 0B = 7MOD = 79#79ecc = ecc_equation(A,B)get_square_root = get_square_root_mod(MOD)x = xrange(0,MOD)y = map(get_y, x)y = np.array(y)total = y[np.where(y[:,1]>-1)]total_inverse =map(lambda x:[x[0], MOD-x[1]],filter(filtery , total))total = np.concatenate((total, total_inverse),axis=0)#print total

plt.scatter(total[:,0], total[:,1])plt.show()print len(total)print total[np.where(total[:,1]==0)]print map(lambda x:len(x), map(cycle_group, total))

以上就是关于神奇飞猪币flypigcoin的区块链的所有最专业的介绍,飞猪币flypigcoin将成立大型的综合性网站:flypig.io预计一个星期就完全开通并运行,这是一个专门面向全世界推介飞猪币flypigcoin的网站;在这个网站上,将公布飞猪币flypigcoin的挖矿方式,所有人都可以利用自己的算力来挖矿,试试运气!在适当的时候,飞猪币flypigcoin将公布它独立的区块浏览器,也将在GITHUP上开放源代码,目前,有些内容属于保密性,等区块节点足够强大时,将一一呈现在所有粉丝的面前!

15.jpg 

飞猪币的粉丝们,点赞吧!

责任编辑:王慧
首页 | 经济 | 产业 | 金融 | 市场 | 商业 | 个股 | 图片 | 关于