Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

[TOC]

# IPFS

## 简介

**IPFS**(**InterPlanetary File System**)——星际文件系统,一种基于 P2P 协定的档案系统,其


主要目的便是为了最终取代 HTTP 协议。

**HTTP**采用的是“**地址寻址**”,依靠 ip 或者域名进行文件寻址;而**IPFS**采用的是“**内容寻址*
*”

## 底层基础

### DHT(分布式哈希表)

**主要思想:**全网维护一个文件索引哈希表,key 通常是文件的哈希值(文件名或者文件内容描述),value
则是存储文件的 IP 地址。哈希表会被分割成小块,按照一定算法和规则分布到全网各个节点上,每个节点只需要
存储一小块哈希表。

### BitTorrent(P2P 块文件传输)

文件切片下载,使用 Merkle-Tree 进行数据完整性检验。

### Git 版本控制

文件快照机制,保存某一时刻的全部文件状态(没有修改的文件只存储一个指向之前文件的引用)

### SFS(self-certifying file system)

解决 client 认证 server 有效性的问题,核心思想是在文件路径中隐含验证身份的密钥。

### Merkle-Tree & Merkle-DAG

前者常用于数据验证,后者常用于文件存储。

Merkle-DAG 的目的有 3 个:内容寻址、防篡改、防止重复存储。

# Filecoin

**Filecoin 和 IPFS 并不是等同的。**

- Filecoin 是一个基于区块链的分布式存储协议,用来解决数据的存储问题,降低数据存储和使用成本。
- IPFS 主要是解决数据分发和定位问题,类似于 HTTP 协议。

Filecoin 的共识机制——**期望共识(Expected Consensus,EC)**。

Filecoin 选举新区块矿工是根据它当前**已用存储空间占全网存储空间的比值**决定的,类似于权益证明的方
式。每个存储矿工为网络提供的有效存储空间占比定义为**存储算力**。这样可以激励矿工投入更多资源在存储
空间上而不是算力上。

Filecoin 选举打包矿工的大致过程为:在每个产生新区块的周期内,**矿工利用这一周期内生成的存储证明生
成选票**,每个矿工会检查自己的选票的哈希值是否小于该矿工的存储算力,如果满足,则说明该矿工当选本轮
的领导节点,下一个区块可以由该矿工创建并发送给全网其他节点进行验证。

### 复制证明(PoRep)

核心思想是:确保证明者保存了承诺数量的独立备份。

------

为了应对**女巫攻击**、**外源攻击**(可以理解成“找外援”)、**生成攻击**【*IPFS 原理与实践*,
p236】,复制证明使用**可验证时延加密算法**(Verifiable Time-Delay Encoding
Function,VDF)。

该类算法理想条件下满足:

1. **加密时间长,解密时间短**;【解密时间短为了更方便地提取这些被加密的文件;加密时间长是保证恶意
矿工无法通过临时生成加密文件完成随机挑战】

<img src="C:\Users\82621\Desktop\笔记\IPFS&Filecoin\VDF.jpg"
style="zoom:80%;" />

2. **使用加密后的文件生成存储证明的复杂度低**。【这是因为每隔一段时间就要提交一次存储证明,通过加
密文件生成存储证明应当高效快速】

目前主要使用的是通过**BLS2-381**(Zcash 中使用的一种椭圆曲线)加密算法,多次迭代完成。

------

$$定义:PoRep 证明是验证者 V 向证明者 P 提供一段独特的数据证明\pi^c,以说服 P 自己存储了数据 D 的一个


特定备份 D_i,这一证明是专为 P 生成的挑战 C 的应答。$$
$$
PoRep_{Algorithm} =\{Setup, Prove, Verify\}
$$
PoRep 协议一共包括 3 个部分:创建备份$$Setup$$,生成存储证明$$Prove$$,验证存储证明$$Verify$
$。
- $$Setup$$

$$PoRep.Setup(1^\lambda,D,id)\rarr R,S_p,S_v$$

$$\lambda$$是安全参数,$$\lambda$$越大时延越长;$$id$$是生成副本的唯一序号;$$D$$是原文件;
$$R$$是生成的副本;$$S_P$$是验证$$R$$的必要信息;$$S_V$$是调用$$PoRep.Prove$$和$
$PoRep.Verify$$的参数之一。

- $$Prove$$

$$PoRep.Prove(S_P,R,C)\rarr\pi^C$$

$$C$$是验证人$$V$$发出的随即挑战,$$\pi^C$$是证明者$$P$$生成数据$$D$$的特定副本$$R$$的存储
证明。

- $$Verify$$

$$PoRep.Verify(S_V,C,\pi^C)\rarr{0,1}$$

验证者$$V$$检测证明是否正确,结果正确说明证明者$$P$$已经存储了$$R$$。证明者$$P$$只需要提供一
条从随即片段$$C$$到整个文件的默克尔根的路径即可。

------

### 时空证明(PoSt)

PoRep 是**时间点证明**,证明该时刻存储矿工存储了该文件。PoSt 是**时间区间证明**,证明该时间段内存


储矿工实际存储了该文件。

**PoSt 本质上就是一系列不同时间点 PoRep 的重复请求。**

You might also like