utopian.io 如何取得你的发文权限? --- steemconnect 的底层机制steemCreated with Sketch.

in #utopian-io9 years ago

在阅读下面内容之前, 你应该了解公钥加密体系以及 steem 的身份验证机制, 最少你得知道 steem 的四个密钥 (主密钥, 发文密钥, 活动密钥, 附言密钥) 的区别. steem 这多密钥设计能够很好的实现权限分离与多重签名.

首先我们来想一想这一切在 steemit.com 是怎么发生的.

如何登录 steemit.com?

你可能会毫不犹豫的回答: 输入用户名和密码, 然后就登陆了嘛. 那么我要问你两个问题:

  1. 你用来登录的密码是上面那四个密钥之一吗?
  2. steemit.com 会保存你的登录密码或者你那四个密钥吗?

我打赌很多人答不上来 :P, 下面我来告诉你.

你在 steemit.com 上登录用的密码, 是你在注册账号时随机生成的那串密语, 另外四个密钥是根据你的用户名和密钥经过确定性的计算生成的. 而这计算过程是只发生在你的浏览器中, 你的密语以及生成的四个密钥都不会被上传.

我们相信 steemit.com 不会上传我们的密钥信息, 因为它是 steem 的全方权威应用, 它的代码公开受所有人审查, 我们也能够很容易的使用浏览器的审查功能侦测是否有数据被上传.

在 steemit.com 上文章是如何被发布的

首先让我们更深入一些解释一下上述的四个密钥. 这四个密钥, 确切的说应该是四个密钥对, 每个蜜月对包含一个公钥和一个私钥, 涉及发文章时, 发文密钥对会被使用.

假设 @cifer --- 也就是我, 想要通过 steemit.com 发文, 既然 steemit.com 持有我的四个密钥对 (如前所说, 本地持有). 那么当我按下 "Post" 按钮是, steemit.com 就会以我的名义 (用我的发文公钥) 创建一个 comment 类型的交易, 并使用我的发文私钥签名此交易, 广播给所有见证人.

收到此交易广播的见证人将会查询 @cifer 的账户信息, 从中取得发文公钥并校验此交易确实由 @cifer 所发.

如何登陆 utopian.io?

实际上我们没有登陆 utopian.io, 我们登陆的是 steemconnect.com, steemconnect.com 会在取得我们许可的情况下给 utopian.io 发布一个令牌, 之后你就可以用 utopian.io 发文章了. 好吧, 让我说的更准确一点, 是: utopian.io 能够以你的名义发文章了!

那么 steemconnect 是什么? 为什么需要用它来登录 utopian.io 呢?

简短的回答是, 因为 utopian.io 是一个不作恶的好服务! utopian.io 当然可以向你请求获取你的发文私钥甚至是你的登录密语, 但是它没这么做, 而是借助于 steemconnect, utopian.io 没有获得你任何的私钥.

steemconnect 是什么? 为什么使用它?

前面已经说了用 steemit.com 发文的过程, 下面我们看看使用第三方应用发文的过程, 比如 utopian.io, busy.org 等等.

如前所说, 我们当然可以使用密语登录这些应用, 但是这将彻底暴露你. 尽管很多应用只需要你四个密钥中的一两个, 但暴露私钥总归不是一个好主意. 虽然我们知道 utopian.io 和 busy.org 都是值得信赖的应用, 但如果将来出现新的应用呢? 难道每出现一个应用我们都要提供自己的密钥给它们吗? 不, 这是很糟糕的.

因此我们需要 steemconnect, 它使得我们能够在不暴露私钥的情况下使用第三方应用. 这是如何工作的呢?

当你在 utopian.io 上点击登录时, 你会被重定向到一个新的地址, 注意 url 是 "v2.steemconnect.com..." 这样的:

然后当你点击 "Continue", 你就授权了 steemconnect 往你的账户写入一些数据, 写了什么数据呢? 你可以在 steemd.com 上找到:

注意到 account_auths 字段了吗? 感谢 steem 精细的设计, 现在 @utopian.app 已经 "嵌入" 到我们的账户中了.

这样一来, utopian.io 就能够以我 @cifer 的名义, 但是使用 utopian.io 自己的发文私钥签名发文了. 当见证人收到这样的广播后, 它还是会查询 @cifer 的账户信息找出发文公钥, 但是注意, 这次见证人找到的不只是 @cifer 自己的发文公钥, 还有 @utopian.app 的, 因此能够顺利的验证这次交易并将其打包进去区块.

到此为止, 我们成功的, 在没有暴露任何私钥的情况下使用 utopian.io 发文了!

后记

在将来, 任何构建在 steem 上的第三方应用都应该使用 steemconnect 这样的服务获取用户授权, 将来可能未必是 steemconnect, 但是这种机制是必要的. 如果将来有应用还是在想你请求私钥, 我建议你再三考虑是否还要使用这个服务.



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Hey @cifer I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x

看了一遍,对四个密钥更清楚了。收藏了,看一两遍还不能全懂,以后遇到疑惑再翻出来看。写得很好,谢谢分享👍👍🍺

哈哈 觉得有用就好, 很荣幸~

Coin Marketplace

STEEM 0.04
TRX 0.33
JST 0.101
BTC 64198.23
ETH 1820.91
USDT 1.00
SBD 0.38