security - 如何通过我的代码安全地签署交易? (算法)

标签 security smartcontracts private-key algorand

我正在 Algorand 上编写智能合约,并且想知道如何使它们做好生产准备。如何安全地传递私钥,例如在创建智能合约并将其发送到链时?将密码或私钥存储到开发计算机感觉不安全。

最佳答案

key 管理是一个极其复杂的主题,如果您正在编写一个预计移动数百万个 Algo 的应用程序,我强烈建议您咨询安全专家并进行全面审核。

有很多问题要问,我只是强调其中的几个:

  1. 您想要托管解决方案(即服务拥有 key )还是非托管解决方案(即用户拥有 key - 缺点:如果用户技术水平较低,他们可能会在不知情的情况下丢失 key )恢复解决方案)还是混合解决方案?

  2. 该 key 可以做什么?

问题1:托管/非托管解决方案?

a.如果您需要非托管解决方案,请使用 MyAlgo Connect、AlgoSigner 和/或 Wallet Connect。这很简单,并且确实限制了您的风险,但非技术用户可能会丢失 key 。

b.当您持有资金时,托管解决方案要复杂得多。除了技术问题之外,还存在法律问题。

c.混合解决方案可以使用多重签名或智能合约来允许用户在大部分时间使用其非托管 key ,但拥有完整的冷存储 key ,用于在出现问题时手动恢复帐户。完全冷藏意味着访问速度较慢,但​​也更安全。

请注意,您还可以默认使用托管 key 管理,并允许高级用户进行非托管 key 管理。

问题2: key 可以做什么?

很多时候,您实际上并不需要存储的 key 来完成所有可能的事情。 例如,如果您只是传输 ASA,则可以使用委派逻辑信号。请参阅the forum .

但是,如果您确实需要一个用于存储 key 的托管解决方案,您很可能希望有一个单独的服务器来处理私钥。该服务器将运行一个非常简单且易于审计的代码。理想情况下,它会使用 HSM,但不幸的是,上次我检查时,Algorand 上使用的 ed25519 没有易于使用的 HSM。屏蔽/强化虚拟机可能也是一个好主意。如果您有自己的服务器,YubiHSM 可能是安全存储 key 的一个选项(它支持 Algorand)。

如果 HSM 不可用,您至少应该将加密的 key 存储在 KSM key 下或“ secret 管理器”中。

该服务器需要其他服务的强身份验证并记录所有内容。然后您可以让其他服务检查日志。如果交易过多,还可以采取额外的保护措施。

我实际上还建议在多个云上使用多个服务器,如果可能的话,由组织中的不同人员管理。然后您可以使用多重签名。为了获得崩溃时的可用性和恢复现金,您很可能还希望在完全冷存储中提供一些多重签名 key 。

希望这有帮助。

关于security - 如何通过我的代码安全地签署交易? (算法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72953498/

相关文章:

ethereum - Solidity 和 Web3 sha3() 方法返回其他内容

solidity - Truffle 控制台将 ETH 发送到智能合约

postgresql - 如何使 postgreSQL 备份密码 protected

javascript - 哪些 HTML 标签可能包含 javascript 代码?

security - 如何在 Redshift 中将表所有权分配给多个用户或组

Git:我使用哪个键(默认情况下可能不是)?

ios - 使用自定义钥匙串(keychain)生成 APNs 证书时缺少私钥

security - 使用 Rfc2898DeriveBytes 从明文密码创建安全密码时盐的重要性

blockchain - 重新混合 solidity 契约(Contract)如何将多个参数传递到创建按钮

windows - 由于私钥过滤器,使用 signtool 进行代码签名失败