美文网首页
IPFS七层协议栈之对象层

IPFS七层协议栈之对象层

作者: 建怀 | 来源:发表于2018-09-13 17:00 被阅读0次

    IPFS七层协议栈之对象层

    对象层(Objects)

      基于分布式哈希表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         //不透明内容数据
    }
    

    路径

      可以使用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与区块链:原理与实战》推荐大家购买正版书籍。

    相关文章

      网友评论

          本文标题:IPFS七层协议栈之对象层

          本文链接:https://www.haomeiwen.com/subject/fdfggftx.html