IPFS七层协议栈之对象层

2018-09-13  本文已影响0人  建怀

IPFS七层协议栈之对象层

对象层(Objects)

  基于分布式哈希表DHT和BitSwap技术,IPFS期望构造一个庞大的点对点系统,用于快速、稳健地存储和分发数据块。IPFS使用Merkle DAG技术构建了一个有向无环图数据结构,用于存储对象数据。这也是Git使用的数据结构,Merkle DAG为IPFS提供了很多有用的属性,包括:

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

type IPFSLink struct {
    Name string     //此link的别名
    Hash Multihash  //目标的加密hash
    Size int        //目标总大小
}

type IPFSObject struct {
    links []IPFSLink    //links数组
    data []byte         //不透明内容数据
}

路径

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

# format
/ipfs/<hash-of-object>/<name-path-to-object>
# example
/ipfs/XLYkgq61DyaQ8Nhkcqyu7rcnSa7dSHQ16x/foo.txt

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

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

本地对象

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

对象锁定

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

发布对象

  IPFS是全球分布的文件系统,DHT使用内容哈希寻址技术,使发布对象是公平的,安全的,完全分布式的。任何人都可以发布对象,只需要将对象的Key加入到DHT中,并且对象是通过P2P传输的方式加入进去,然后把访问路径给其他的用户。

对象级别的加密

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

type EncryptedObject struct {
    Object []bytes              //已加密的原始对象数据
    Tag []bytes                 //可选择的加密标识
    type SignedObject struct {
        Object []bytes          //已签名的原始对象数据
        Signature []bytes       //HMAC签名
        PublicKey   []multihash //多重哈希身份键值
    }
}

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

文章借鉴《IPFS与区块链:原理与实战》推荐大家购买正版书籍。

上一篇下一篇

猜你喜欢

热点阅读