DAFEX达菲官网|小菲达人3.0AIT智能投顾|跟单|托管|SKR托底保本的理财|达菲VIP系统
每一次时代浪花都能造就一批富翁,不玩信仰,不做韭菜。适可而止,有本有利。前瞻性布局,抢占财富风口。不推倒重来就是快。一年做三个项目远不如三年做一个项目。
文章1022浏览97626本站已运行2528

什么是LTG币?怎么挖LTG币?

LTG 是 Living the grace 的英文缩写,释义为活出恩典。LTG 是由吉尔吉斯斯坦 LTG

基金会斥巨资,由美国硅谷知名区块链团队,历时一年多成功研发一条开源公链。采用

HDDMining(存储挖矿)技术,Proof-of-Storoage 和 PoRep 存储数据和时空证明,产生区块“最快解”,赢得区块记账权获得挖矿奖励 LTG。

LTG 是全球首个兼容 IPFS\Filecoin 智能硬盘挖矿协议的、基于硬盘挖矿而构建的大规模在现实商业社会中应用的公链。

吉比特和 LTG 基金会是战略合作伙伴,吉比特公司是一家在国内外拥有高知名度的新型科技公司,有丰富电力资源(吉尔吉斯斯坦两家电力公司),十几家比特币矿场和吉比特矿池,专业的技术核心团体,在项目创建和团队运营方面有独特优势。吉比特是 BTC 矿池,鱼池,蚂蚁矿池等多家矿池的 VIP 客户。LTG 基金会授权吉比特开发出吉比特 LTG 矿池,支持 Solo 和 Poc 去中心化挖矿。加微信咨询:jinixiaoyan1990

LTG核心技术

4.1加密DSN

加密的 DSN 方案协议:

在 Put 数据之前的处理,随机产生文件的存储密钥(St k ),通过存储密钥 St k 对文件进行加密,生成加密文件,以用户的加密公钥来加密存储密钥,分别计算数据明文的Hash 值和密文的 Hash 值,然后将密文、加密后的存储密钥、明文 Hash 和密文 Hash都保存起来。

  1. Hash(Data) →H data 计算明文 Hash
  2. RandomSym()→St k 随机生成对称密钥作为文件的存储密钥
  3. Enc(St k , Data)→EncData 用存储密钥加密文件
  4. Hash(EncData) →H enc 计算密文 Hash
  5. Enc(S pub , St k ) →EncSt k 以用户的加密公钥加密存储密钥
  6. PutStatic(EncData) 将加密数据存入到持久化静态存储中
  7. PutPri(H data ,H enc , EncSt k ) 将加密后的存储密钥,密文 Hash 存入到用户权限列表,记录在明文 Hash 项下在 Get 数据的时候,从明文 Hash 取出对应的密文

Hash,通过密文 Hash 从持久化静态存储中取出密文和加密后的存储密钥,以用户的加密私钥对加密后的存储密钥进行解密获得存储密钥,用存储密钥对加密数据进行解密,获得数据明文。

1.GetPri(H data )→H enc ,EncSt k 从权限列表中通过明文 Hash 获取到密文 Hash和加密的存储密钥

2.GetStatic(H enc )→EncData 用密文 Hash 从持久化静态存储中取出密文

3.Dec(S prv , EncSt k )→St k 以用户的加密私钥对加密后的存储密钥进行解密获得存储密钥

4.Dec(St k , EncData)→Data 解密获得文件数据优化的 DSN 方案有效地保证了数据的安全性。安全性:在数据源之外只以密文出现,只有利用用户的加密私钥才能获取到数据明文,用户只要保管好自己的加密私钥就不用担心数据被泄密。完整性:Hash 对应的数据 D,不会存在通过 Get(hash)获取到 D1,其中 D1≠D。数据可恢复性:Put 成功的数据 D,一定存在一个成功的 Get 请求获取到数据。以上方案不能解决数据去重问题。传统上行业内都公认加密后不能去重,服务器端要想零知识加密的话,重复的数据就只能重复保存,这是因为相同的数据在加密后就变得不一样了。这就是所有的大型云存储服务商都不提供零知识加密存储的原因,IPFS 为此干脆都不提供加密机制。LTG 提供了一种特殊的机制,既能防止存储重复数据,同时还能保证同样的安全性,打破行业“公知常识”实现鱼与熊掌兼得。采用这种机制时,除了用户权限表外,还要维护一个全局的元数据表,记录明文 Hash 和密文 Hash 的对应关系,在写入数据时要先查询。是否存在相同 Hash 的数据,如果没有该项再存:

1.Hash(Data) →H data 计算明文 Hash

2.If CheckDup(H data ) = TRUE goto 11 如果已经存在相同的数据,转到第 11 步

3.RandomSym()→St k 随机生成对称密钥作为文件的存储密钥

4.Enc(St k , Data)→EncData 用存储密钥加密文件

5.Hash(EncData) →H enc 计算密文 Hash

6.GenKey(Data) →S data 从数据明文生成对称密钥,可以用数据明文加盐之后计算Hash 值的方式生成。之所以要加盐是因为明文 Hash 是一个公开的值,不加盐的话不拥有数据明文的人也能获得该密钥。为了保证一致性,盐值可以是一个固定的算法生成,例如先做第一次 Hash 作为盐值,然后加盐后再计算第二次 Hash 作为对称密钥,两次 Hash可以采用不同的算法。

7.Enc(S data , St k ) →EncSt k ’ 以数据明文生成的对称密钥来加密存储密钥。

这是非常“诡异”的一步,以明文作为密钥,密钥作为明文来加密,大多数人看这个算法的时候都以为写反了,实际上就是专门这么设计的,而且这一步可是 TruPrivacy 的核心步骤。

8.PutStatic(EncData) 将加密数据存入到持久化静态存储

9PutMeta(H data , H enc ,EncSt k ’) 将密文 Hash 和明文加密的存储密钥记录在全局元数据表中,记录在明文 Hash 项下

10.Goto 14

11.GetMeta(H data ) →H enc ,EncSt k ’ 从全局元数据表中取出密文 Hash 和明文加密后的存储密钥

12.GenKey(Data) →S data 以同样算法从数据明文生成对称密钥

13.Dec(S data , EncSt k ’) →St k 用该对称密钥解密出存储密钥

14.Enc(S pub , St k ) →EncSt k 以用户的加密公钥加密存储密钥

15.PutPri(H data ,EncSt k ) 将加密公钥加密后的存储密钥存入到用户权限列表,记录在明文 Hash 项下在 Get 数据的时候,从全局元数据表中从明文 Hash 取出对应的密文 Hash,通过密文 Hash 中从持久化静态存储中取出密文,从权限列表中取出加密后的存储密钥,以用户的加密私钥对加密后的存储密钥进行解密获得存储密钥,用存储密钥对加密数据进行解密,获得数据明文。

1.GetMeta(H data )→H enc 从全局元数据表中通过明文 Hash 获取到密文 Hash

2.GetPri(H data )→EncSt k 从权限列表中通过明文 Hash 获取到加密公钥加密的存储密钥

3.GetStatic(H enc )→EncData 用密文 Hash 从持久化静态存储中取出密文

4.Dec(S prv , EncSt k )→St k 以用户的加密私玥对用户加密公钥加密后的存储密钥进行解密获得存储密钥

5.Dec(St k , EncData)→Data 解密获得文件数据优化的 DSN 方案不仅有效地保证了数据的安全性,而且还能实现加密去重。为了更好地实现去重效果,可以将数据按固定长度分块,每块分别去重。上述方案只能用于存储静态数据。当存储动态数据时,不仅要用不随内容变化的 ID 代替 Hash 作为数据的标识,而且还要加上写权限的验证以防止数据被其它人覆盖篡改。这时创建流程如下:

1.RandomAsym()→Sw pub ,Sw prv 随机生成非对称密钥作为写权限密钥

2.Create(Sw pub ) →ID 创建一个动态数据,获得一个唯一的 ID,并记录该 ID 对

应的写权限公钥

3.RandomSym()→St k 随机生成对称密钥作为存储密钥

4.Enc(S pub , St k ) →EncSt k 以用户的加密公钥加密存储密钥

5.PutPri(ID,EncSt k ) 将加密公钥加密后的存储密钥存入到用户权限列表,记录在 ID项下

每次写数据时的流程如下:

1.GetPri(ID) →EncSt k 从用户权限表中取出加密公钥加密后的存储密钥

2.Dec(S prv , EncSt k )→St k 以用户的加密私钥对用户加密公钥加密后的存储密钥进行解密获得存储密钥

3.Enc(St k , Data)→EncData 用存储密钥加密文件

4.Hash(EncData) →H enc 计算密文 Hash

5.Enc(Sw prv , H enc ) →EncH enc 用该 ID 的写权限私钥对密文 Hash 进行签名

6.PutDyn(ID, EncData, EncH enc ) 写入加密后的动态数据,以签名数据代表写授权。存储动态数据各碎片的节点在写入动态数据时,需要先验证写权限:

7.GetKey(ID) →Sw pub 取出该 ID 对应的写权限公钥

8.Hash(EncData) →H enc 计算密文 Hash

9.If Dec(Sw pub , EncH enc )= H enc Write(EncData) 如果签名验证通过,写入数据

动态数据的读流程如下:

1.GetPri(ID)→EncSt k 从权限列表中获取 ID 对应的用加密公钥加密的存储密钥

2.GetDyn (ID)→EncData 用 ID 从动态数据存储区读出密文

3.Dec(S prv , EncSt k )→St k 以用户的加密私钥对用户加密公钥加密后的存储密钥进行解密获得存储密钥

4.Dec(St k , EncData)→Data 解密获得文件数据

 拜占庭容错

拜占庭将军问题出现的主要背景是:拜占庭罗马帝国地域广阔,各个军队相隔很远,军队之间的通讯只能通过信差,任何的战略部署都需达成统一后才能展开行动。如果军队中将军或者信差有不可信的人存在就会扰乱作战计划,无法达成共识。因此在已知有叛军存在的情况下,如何意见达成统一就成为了拜占庭将军问题。存储故障即称为拜占庭故障,即有不诚实不可信的矿工丢失了他们的数据,从而让文件无法获取成功。拜占庭容错方案:Put(D,n,m),当数据上传的时候使用冗余编码将数据分为 n 个碎片,并允许最多 m 个碎片失效(即只要能任意获取 n-m 个碎片即可完整读取数据)指定 n 个存储节点来存储这部分数据,每个节点存储一个碎片,这样可以容忍 m 个节点故障。当故障节点节点存储数据。节点 n 的选择,以及容错节点 m 的选择用户可以自己选择,系统会默认设定一个值,其中 n>3m+1。

4.3 标准格式文件 STDFILE

具备自我描述功能,通过获取文件的头信息即可获得文件的相关信息。什么是文件头信息(HeadHash),先简单了解一下默克尔树(Merkle Tree)它是装载 Hash 列表的一个树形结构。在树的最底层是已经被切割的具有固定大小的数据小块(除去最右侧小块), 有相应的 Hash 与其对应,相邻两个小块合并再做 Hash,以此上推,至最上层的 Top Hash 也就是默克尔根。文件索引:通过获取文件的 Hash(top Hash),来获取到叶 Hash,获取到叶子 Hash,最后获取到最小的数据小块。

Merkle Tree 插入通过插入一个具有固定格式固定大小的数据块 0 (Data Block)来改变 Merkle Tree,但是基本不改变结构关系。因为 1,2,3,4,5 的数据块内容未发生改变。经过插入后的

Merkle Tree 变为:

这里要研究的就是数据块 0 的内容。因为在获取文件数据的时候,可以将 0 作为文件头 Head,>0 的数据块作为文件内容 Data,而数据块 0 就是文件的自我描述,它可能会包含类似文件编码格式、创建时间、文件格式、文件名的元数据。以固定的格式表述这些元数据并通过特定的转换方法 Convert(HeadInfo)将其转换为固定数据块大小的文件头信息(HeadBlock),连同文件内容(Data)一并被存储。SFILE :Hash(HeadBlock(Finalsize)+Data)-->Top HashHeadBlock(Finalsize),不会影响到数据在 Merkle Tree 中的整体结构,如果最底层数据块是偶数个,那个当 0 被插入的时候,会产生孤儿,但是孤儿永远是最右边(end)的一个。

SFILE 文件索引:从 Top Hash 开始查询叶节点,当查询到最底层数据块 Hash 时,你永远都知道第一个块儿是头信息块,它用来描述文件,并非文件内容的一部分,所以在组织数据时可以忽略掉。SFILE 旨在创建一种具有自我描述功能的标准格式文件,从而实现文件的一些信息交换。

基于安全的复制证明和时空证明

这里主要参考了 FileCoin 的复制证明(PoRep)和时空证明(Post),PoRep 改善了 PDP 和 PoR 方案,有效的防止了三种攻击。

1.SEAL 封箱操作

存储矿工存储数据时通过 SealτAES-256 方法存储数据并生成副本,目的是让存储矿工可以诚实的存储数据 D 独立的 N 份副本数据,并保证有足够的时间允许验证者 V 生成随机验证挑战 RC。

2.复制证明

定义:复制证明(PoRep)允许存储提供商通过提供副本证明(π)来说服验证者,在验证者发出随机挑战时,提供证明,证明数据 D 相对于证明者的特定副本 R 已经存储在唯一的专用物理存储区了。该方案是一种交互式协议。

复制证明(PoRep)的三个构建阶段:

PoRep.setup() -->副本 R,副本 Hash 树根 Merkel root of R,封装证明πSEAL

PoRep.prove() -->存储证明πPOS

PoRep.Verify() -->bit b (存储有效性证明 b1(πPOS)^封装有效性证明 b2(πSEAL))

3.具体构建实践

PoRep.setup()

inputs:

--proverkey pair (pkP , skP)

--proverSEAL key (pkSEAL)

--data D

outputs:R,Merkel root of R,πSEAL

处理过程:

1.计算 hD=CHR(D)

2.封装计算生成副本 R=SEALτ(D,skP)

3.通过散列函数输出树根 rt=MerkelCRH(R)

4.设置参数 x

=(pkP,hD,rt)

*设置参数 w

=(skP,D)

*计算副本封装证明πSEAL=SCIP.Prove(pkSEAL, x, w)

*输出 R,rt,πSEAL

PoRep.Prove()

inputs:

--proverProof-Of-Storage key pkPOS

--replica R

--random challenge c

outputs: a proof πPOS

处理过程:

 

1.计算 Merkel 树根 rt=MerkelCRH(R)

2.计算从根 rt 到叶子 Rc 的路径path

3.设置 x

=(rt, c)

*设置 w

=(path, Rc)

*计算存储证明πPOS=SCIP.Prove(pkPOS, x, w)

*输出存储证明πPOS

PoRep.Verfy()

inputs:

--proverpublic key ,pkP

--verifier SEAL and POS keys vkSEAL , vkPOS

--hash of data D, hD

--Merkel root of R, rt

--random challenge ,c

--tuple of proofs,(πSEAL,πPOS)

outputs: bit b =1 表示有效

处理过程

*设置 x

=(pkP,hD,rt)

*计算 b1=SCIP.Verify(vkSEAL, x,πSEAL)

*设置

w=(rt,c)

*计算 b2=SCIP.Verify(vkPOS, w,πPOS)

*计算 b1^b2

时空证明

允许存储提供商能够提供证明在某一时间段(t)内,都有效的存储了数据。采用时空证明(PoSt)审核存储提供商提供的存储,没有指定的验证者,任何的网络成员(有权限的网络成员)都能够进行验证,该方案是非交互式的协议。Post 的构建方案:

PoRep.setup() -->副本 R,副本 R 的 Merkel 树根 R,封装证明πSEAL

PoRep.prove() -->t 时间内生成顺序的存储证明πPOST

PoRep.Verify() -->bit b (存储有效性证明 b1(πPOS)^封装有效性证明 b2(πSEAL))

在 Post 的构建方案中,setup()和 Verify()跟 PoRep 复制证明一样,在 Prove()中,证明人接受验证者的随机挑战生成复制证明,并将复制证明作为输入迭代 t 次后输出顺序的存储证明πPOST

蒲公英技术

对于 LTG 的隐私性而言,最大的威胁是区块链节点可以在打包并广播交易记录前记录交易的信息。在核销之前,交易输出在要在节点本地内存池(mempool)(未经验证的交易池)中保存一些时间。这使得恶意节点可以在构建交易图(transaction graph)并可能发现发送方的 IP 地址。蒲公英试图降低恶意节点创建交易图的机会,方法是“在交易被确认之前先悄悄地在网络中转发它,从而延迟交易在网络上出现的时间(Andreas Antonopoulos[1])。通常,当有人向区块链发起交易时,交易信息会向所有的区块链节点广播。蒲公英将交易的广播划分为两个阶段,从“阀杆(stem)”或“匿名(anonymity)”阶段开始,在这一阶段,交易信息将其被随机广播到某一个节点,然后再由这个节点将交易信息发送到另一个随机挑选的节点,依此类推,直到收到交易信息的节点数目满足一定要求,则进入第二阶段。第二阶段称为绒毛阶段(fluff phase),在这一阶段交易信息会被广播到所有的节点。这样做可以防止观察节点将交易映射回原始地址。一种蒲公英技术的改进(Dandelion++)使得创建交易图变得更加困难。在 LTG 中,交易也可以在匿名阶段之前进行混币,从而使将交易输入与交易映射关联更加困难。 Beam 通过增加占位空输出使得在没有足够的输出也可以进行上述混币操作蒲公英技术的一个问题是,在匿名阶段,如果交易被传递到某一随机节点后,这个节点掉线,那么这笔交易将永远不会被传播到区块链网络。Grin 和 Beam 解决了这一问题——如果某交易没有在合理的时间内达到“绒毛阶段(fluff phase)”,则这个交易将被自动广播到更广泛的网络中。

上一篇:
下一篇:

添加新评论

隐藏边栏