继续探索python-bitshares的Memo类 / Pub(Alice) * Priv(Bob) = Pub(Bob) * Priv(Alice)
在昨天的帖子《python-bitshares 边学边记 (九) / Memo类》中,我学习了Memo类。
(图源 :pixabay)
Memo 类
Memo类提供了bitshares区块链Memo信息加密和解密的方法。其中,
encrypt方法用于加密Memodecrypt方法用于解密Memo- 加密Memo需要发送者账户(
from_account)的Memo/Active私钥 - 解密Memo需要接收者账户(
to_account)的Memo/Active私钥
发送者查看已发送的Memo的问题
一般情况,我们作为发送者,加密Memo,发送给接收者;或者我们作为接收者,解密Memo,查看明文信息,这些都没问题。
在上文中的例子中,我们从账户test2018发送Memo至oflyhigh-bts

然后从区块链浏览器中获取加密的Memo数据
然后使用如下代码解密Memo
from bitshares.memo import Memo
m = Memo("1.2.534782", "1.2.170436")
enc = {
"from": "BTS6Eq6kGgYRuujDpFtYduCAjdgMfvkHZ3f8SbHVmsjSC9HgCnxFt",
"message": "33b980c72e22f942454a8ae6b6740a54",
"nonce": "387853483215441",
"to": "BTS8HbXtZPbLACch1pvfrZEPH2xbt74VMPMD4ZSZwYeT96jwkpHFo"}
plaintext_msg = m.decrypt(enc)
print(plaintext_msg)

在这个例子中,我们假定自己是接收者(oflyhigh-bts),并且我们拥有oflyhigh-bts的私钥,所以上述例子没什么问题。
但是考虑这样一种情况,如果作为发送者,我们想查看自己已发送的Memo,并且我们没有接收者的Memo/Active私钥,这时会报如下错误:
raise MissingKeyError("Memo key for %s missing!" % self.to_account["name"])
bitshares.exceptions.MissingKeyError: Memo key for oflyhigh-bts missing!
也就是说使用python-bitshares库的Memo类,发送者无法解密已发送Memo.
如何解决
发送者无法查看自己已经发送的Memo,这听起来有点奇怪,我给别人写了一些信息,过几天想起来想看看我写的是啥,发现我看不了。如果实在想看,只能去问接收者了:“喂喂,我前两天给你发的消息说啥来着?” 这会不会有些尴尬?
还好,网页钱包中,我们可以通过解锁钱包来查看我们发送的Memo
避免了我们上述尴尬情景。
但是,作为程序员,遇到这种问题岂能善罢甘休。
我们来了解一下Memo实现的核心机制,除了加密解密等乱七八糟的东西以外,核心的内容就是: shared secret,具有如下特性:
Pub(Alice) * Priv(Bob) = Pub(Bob) * Priv(Alice)
也就是说,无论是用Pub(Alice)以及 Priv(Bob)或者是Pub(Bob)以及 Priv(Alice)都是可以生成的。换句话讲,无论是加密memo还是解密memo,并不存在谁是发送者谁是接收者的问题!
知道了这个原理,那么问题就好办了。
原本的解密代码如下:
基于上述代码,我们可以轻易实现一个简单解密代码,用于解密已发送Memo
假设我给abit发了一条消息,那么调用上述我实现的代码来解密Memo的示例如下:
请注意,我并没有abit的私钥,但是成功地解密了消息。
总结
- python-bitshares的Memo类 不支持解密已发送Memo
- Memo的实现机制核心为:
shared secret shared secret符合Pub(Alice) * Priv(Bob) = Pub(Bob) * Priv(Alice)- 根据上述原理和原本解密代码,实现了解密已发送信息的代码
参考链接
Leave 继续探索python-bitshares的Memo类 / Pub(Alice) * Priv(Bob) = Pub(Bob) * Priv(Alice) to:
Read more #python-bitshares posts
Best Posts From oflyhigh
We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.