我如何安全地从我的代码签名交易?(Algorand)



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

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

有很多问题要问,我在这里只强调几个:

  1. 您想要托管解决方案(即服务拥有密钥)还是非托管解决方案(即用户拥有密钥-缺点:如果用户技术含量较低,他们可能会丢失密钥而没有恢复解决方案)还是混合解决方案?

  2. 这个键允许做什么?

Q1:托管/非托管解决方案?

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

b。由于您持有资金,托管解决方案要复杂得多。除了技术问题,还有法律问题。

c。混合解决方案可以使用多重签名或智能合约,允许用户在大多数时间使用他们的非托管密钥,但有一个完整的冷存储密钥,用于在出现问题时手动恢复帐户。完全冷藏意味着存取速度慢,但也更安全。

请注意,默认情况下您也可以使用托管密钥管理,并允许高级用户使用非托管密钥管理。

问题2:键允许什么?

很多时候,您实际上并不需要存储键来做所有可能的事情。例如,如果您只是传输ASA,则可以使用委托逻辑符号。见论坛

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

如果HSM不可用,您至少应该将密钥存储在KSM密钥下加密或存储在"秘密管理器"中。

该服务器需要其他服务的强认证并记录所有内容。然后可以让其他服务检查日志。在事务过多的情况下,还可以有额外的保护措施。

我实际上还建议在多个云中使用多个服务器,如果可能的话,由组织中的不同人员管理。然后可以使用multisig。对于崩溃后的可用性和恢复,您很可能还希望在完整的冷存储中提供一些多签名密钥。

希望对你有帮助。