Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request:支持钱包加密和解密消息 #1

Open
0xashu opened this issue Mar 18, 2021 · 6 comments
Open

Feature Request:支持钱包加密和解密消息 #1

0xashu opened this issue Mar 18, 2021 · 6 comments
Assignees
Labels
enhancement New feature or request

Comments

@0xashu
Copy link

0xashu commented Mar 18, 2021

背景

  • Alice 希望让 Bob 使用私钥签名特定信息,以便 Alice 验证 Bob 确认授权特定信息内容。
  • Alice 希望给 Bob 传递密码,但是不信任社交渠道,所以希望使用 Bob 的公钥签名「密码」给他,然后 Bob 使用公钥对应的私钥解密。

思路

借助 Crypto Wallet 常见的私钥功能,不必另外维护管理私钥,即可让区块链用户可以在钱包中完成加密和解密消息工作。

signMessage
参考 ether.js 的 Signing 方法,我们可以考虑使用 signMessage or signTypeData 让 Bob 签署特定信息,以便 Alice 验证。

参考:The Magic of Digital Signatures on Ethereum

非对称加密
常见 RSA 签名处理,但我不确定是否有更好的方法。

@0xashu 0xashu changed the title Feature Request:支持钱包 signMessage Feature Request:支持钱包私钥 signMessage 和非对称加密 Mar 18, 2021
@0xashu 0xashu changed the title Feature Request:支持钱包私钥 signMessage 和非对称加密 Feature Request:支持钱包加密和解密消息 Mar 18, 2021
@0xashu
Copy link
Author

0xashu commented Mar 18, 2021

如果 https://secret.gl 作为主流加密消息工具,是否存在容易被第三方嗅探的问题,一当被恶意第三方应用嗅探即可访问密文信息,而真正应该访问该信息的人无法访问,信息也被窃取。

@unix
Copy link
Owner

unix commented Mar 18, 2021

关于内容安全

是否存在容易被第三方嗅探的问题

有可能。但 secret.gl 是以社会工程学的方式绕开此问题:

  • 如果 url 传输期间没有被嗅探,那么用户可以按预期查看密码,这是安全的。
  • 分发的 url 被嗅探,密文被成功索取,由于 url 只能索取一次密文,被分发的阅读者将无法查看,此时用户已知密码泄露,可以更改密码或是采取其他措施。
  • 分发的 url 被嗅探,密文没有被成功索取,被分发的阅读者消费了 url 查看密文,url 就已销毁,此后再被劫持或泄露 url 均无安全风险。

实际上分发出的 url 本身即携带了足够的信息,是不安全的,但密文只能被 url 索取单次与自动过期从行为上保护了它。

关于非对称加密

非常不错的想法。可以在创建 secret 时选填公钥,但在产品上有一些困难点:

  • 由于不知道是否为二次加密的密文,所以在非对称加密后还需要增加标识,如 source -> ciphertext -> prefix + ciphertext,或是再进行其他转换。用户无法判断当前索取的信息是否添加了非对称加密,前缀或者其他转换是 secret.gl 应用识别当前是否需要二次解密的关键,但这导致用户只能在 secret.gl 上进行解密,也就是要把自己的私钥拷贝进输入框进行运算,这是一个安全风险。
  • 不同的链使用的加解密方法不同,会有额外的补位等操作,所以无法在内容二次加密上兼容所有的链,如果仅把用户的钱包密钥对当做普通的非对称密钥对使用,那么实际上和发送密文,让指定用户去在线 RSA 解密网站输入私钥查看是相同的道理,有些损失产品「易用」的优势。

我前段时间也考虑过一些想法,比如一些链支持通过地址在链上获取上链的公钥,secret.gl 可以设计成向指定地址发送一条消息 (钱包地址相对于公钥比较易于填写和索取),但在查看时,钱包只能支持连接签名,签名本身是不携带信息体的,还是需要手动填写私钥进行查看。(让用户填写私钥查看原文的操作有些麻烦。)


对所有人:
现在我还没有更好的想法,后续我会尝试写一些 demo 来验证可行性,如果有新的想法,请随意评论。

@unix unix added the enhancement New feature or request label Mar 18, 2021
@unix unix self-assigned this Mar 18, 2021
@0xashu
Copy link
Author

0xashu commented Mar 19, 2021

关于非对称加密部分的回复

  • 我们希望使用当下 Crypto Wallet 作为基础设施,所以用户不必手动输入私钥 / 公钥。
  • 不同链的加密解密方法不一样,的确如此。但是大多数公链(比如 Bitcoin like)交互性很低,多数加密解密的交互发生在以太坊钱包(拥有足够数量的用户基础),所以可以考虑面向以太坊钱包用户。
  • 如何传输公钥,可以考虑以下操作:
    • Alice 请求 Bob 密码,然后将自己的公钥和密码请求作为链接发送给 Bob
    • Bob 接收链接后,将其密码和 Alice 公钥进行签名,然后发送链接给 Alice
    • Alice 使用自己的私钥解密密文信息
    • Note:解决嗅探攻击问题,不过存在 3 步交互步骤,没有原来那么优雅,可以考虑作为一个 Pro 方案。因为对于资深用户会考虑当下这么传递密文的安全性,我们不怕麻烦,但想更安全一些。

@unix
Copy link
Owner

unix commented Apr 7, 2021

调研了一会,类似 eth sign 的方法只能生成签名,本质上是信息摘要,eth 相关的 SDK 或者 EIP 规范都是签名与验证签名,并不能隐匿消息的来源或者加密消息。
MetaMask 支持 eth_decrypt (来源 EIP1024) 是个很不错的方案,或许可以借助这个规范实现 (至少在 Web 可用)。但大多数钱包并不支持 eth_decrypt 方法 😿

如果不能通过 eth_* 方法调用本地的私钥进行解密,私钥的安全性就不能得到保证 (比如粘贴私钥行为就非常不安全),如果采用这种方案,未来只能支持 MetaMask 了。

@ghost
Copy link

ghost commented May 10, 2021

Try Time[4].

@ghost
Copy link

ghost commented May 10, 2021

Try Time[4].

I'm Ōnō.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants