《IPFS原理与实践》 —3.5 对象层(Object)

2021-04-16 15:54:45 FIL1688 16754

3.5 对象层(Object)

基于分布式哈希表DHT和BitSwap技术,IPFS目标是构造一个庞大的点对点系统,用于快速、稳定的存储和分发数据块。除此之外,IPFS还使用Merkle DAG技术构建了一个有向无环图数据结构,用来存储对象数据。这也是著名的版本管理软件Git所使用的数据结构。Merkle DAG为IPFS提供了很多有用的属性,包括:

内容可寻址:所有内容由多重哈希校验并唯一标识。

防止篡改:所有内容都通过哈希验证,如果数据被篡改或损坏,在IPFS网络中将会被检测到。

重复数据删除:保存完全相同内容的所有对象都是相同的,并且只存储一次。这对于索引对象特别有用。

Merkle DAG的对象结构定义如下所示:

type IPFSLink struct {

            Name string    // 此link的别名

            Hash Multihash // 目标的加密Hash

            Size int       // 目标总大小

    }

type IPFSObject struct {

        links []IPFSLink   // links数组

        data []byte        // 不透明内容数据

}

1.路经

可以使用API遍历IPFS对象,路径与传统UNIX文件系统中的路径一样。Merkle DAG链接使遍历变得简单,完整路径如下所示:

# format

/ipfs/<hash-of-object>/<name-path-to-object>

# example

/ipfs/XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x/foo.txt

也支持多哈希指纹的多级路径访问:

/ipfs/<hash-of-foo>/bar/baz

/ipfs/<hash-of-bar>/baz

/ipfs/<hash-of-baz>

2.本地对象

IPFS客户端需要一个本地存储器,一个外部系统可以为IPFS管理的对象存储及检索本地原始数据。存储器的类型根据节点使用案例而异。在大多数情况下,这个存储器只是硬盘空间的一部分(不是被本地的leveldb来管理,就是直接被IPFS客户端管理),在其他情况下,例如非持久性缓存,存储器就是RAM的一部分。

3.对象锁定

希望对某个对象数据进行长期存储的节点可以执行锁定操作,以此保证此特定对象被保存在了该节点的本地存储器上,同时也可以递归地锁定所有相关的派生对象,这对长期存储完整的对象文件特别有用。

4.发布对象

IPFS旨在供成千上万用户同时使用。DHT使用内容哈希寻址技术,使发布对象是公平的、安全的、完全分布式的。任何人都可以发布对象,只需要将对象的key加入DHT中,并且对象通过P2P传输的方式加入进去,然后把访问路径传给其他的用户。

5.对象级别的加密

IPFS具备可以处理数据对象加密的操作。加密对象结构定义如下:

type EncryptedObject struct {

    Object []bytes        // 已加密的原始对象数据

    Tag []bytes           // 可选择的加密标识

    type SignedObject struct {

    Object []bytes        // 已签名的原始对象数据

    Signature []bytes     // HMAC签名

    PublicKey []multihash // 多重哈希身份键值

}

加密操作改变了对象的哈希值,定义了一个新的不同对象结构。IPFS自动的验证签名机制、用户自定义的用于加解密数据的私钥都为对象数据提供了安全保证。同时,加密数据的链式关系也同样被保护着,因为没有密钥就无法遍历整个链式对象结构。


首页
产品
新闻
联系