好哥哥们,NFT中包含持有者才能看的加密数据是怎么实现的?
数据托管的,并没有存在链上
这个东西的实现方法真是好难想…
我琢么了一上午,只是确定了,加解密过程绝对不能发生在链上的事实…
我现在有一个去中心化的小思路,
称 NFT背面的数据 为 message
称 持有某个token_id的人 为 owner
我们使 NFT_cell 中包含 message
被 owner.pubkey
加密后的结果 Cipher
当发生NFT_Cell.Transfer时, 要求from
在链下使用自己的privkey 解密 Cipher
,并使用to.pubkey
加密message
得到新Cipher2
Cipher2
包含在NFT_cell的data中即可
但难点是,链上合约无法验证output.NFT_Cell
中的Cipher2
确实是使用 to.pubkey
加的密…
换句话说 from
在转让NFT_cell
的时候可以作恶,不使用to.pubkey
加密,从而使to
虽然持有NFT但无法获取 message
我把上述密码学问题 总结如下:
Alice 使用 Bob 的公钥 PubKey_Bob
对消息message
进行 Encrypt,得到密文Cipher
我作为中间人,如何在没有解密用的私钥PrivKey_Bob
的条件下验证 Cipher
确实是使用PubKey_Bob
加的密? 有什么密码学方案满足这个需求?
有一种密码学方案叫做代理重加密,简单描述,NFT发行方用公钥对NFT加密,然后转移的时候,可以授权重加密到一个新的密钥对,半可信中间人可以实施这个重加密。
不过用简单加密其实够了,因为这件事最重要的点在于,A转移NFT给B时重新加密,要验证A密钥加密前的内容=B密钥加密前的内容,我觉得这个应该也是有密码学方案可以做的。
可以搜 “zero knowledge contingent payment”,我觉得是类似的问题。