我们计划有一些智能合同功能可供外部用户,但只有当他们通过我们的网站。(最终,他们将可以通过通常的合同调用直接在区块链)。因此,工作流就像这个->用户--登录到我们的网站--提供了一些我们可以根据外部资源进行验证的信息--一旦验证了,我们就从后端调用相应的智能契约功能。
虽然我可以使用web3.js从我的网站呼叫区块链,我的帐户/钱包究竟是如何由网站本身的安全?例如,如果我们的网站是在aws上托管的,那么我们是否应该将密钥存储在数据库中,并使用它来签署对块链的调用?或者,使用本地安全计算机中的迷雾/元请求调用契约上受限的外部函数是唯一的选择吗?
如果有人做过类似的事情,那么如果您能够共享用于安全的工具列表和用于访问块链的工具列表,那就太好了。
任何关于多人组织如何有效和安全地处理对智能合同的访问的想法也是值得赞赏的。
发布于 2018-02-06 20:14:57
这取决于您正在使用的信任模型。
通常,Ethereum应用程序背后的思想是,用户不必信任开发合同的人,而且他们完全控制自己的数据。在该模型中,通常没有可信的服务器端代码,也没有保存传统用户名和密码凭据的私密方。这就是为什么我们有像MetaMask这样的东西,让用户控制他们自己的凭据,并要求他们批准应用程序认为应该向他们发出的请求。这些通常是客户端的应用程序,用户使用您的静态html/js代码,并且没有服务器端代码。
如果您的用户必须信任您存储他们的用户名和密码,您可以在您的服务器上保留一个密钥,并将其用于所有用户。不使用MetaMask,用户可以与服务器端应用程序交互,并且该应用程序通过从服务器向节点的JSON接口发出请求来向块链发送请求。契约的设计将依赖于(受信任的)调用方提供已作为参数登录到您服务器的用户的ID。虽然这在技术上很容易设置,但它通常表明,您可能想考虑只使用普通数据库而不是块链,因为用户已经必须信任您,并且您或任何侵入您服务器的人将负责他们的资产和数据。一个普通的数据库更简单、更便宜、更高效。
如果模型是用户可以直接与区块链交互,但也允许他们为了方便而使用您的网站,那么您可能希望设计合同,期望每个用户都有自己的密钥,并在服务器上保留每个用户的密钥。很明显,这样做的方法是在您的node节点上保留许多不同的帐户。
https://ethereum.stackexchange.com/questions/38766
复制相似问题