是否可以在 Rust 的 NEAR 智能合约中验证 NIST P-256 曲线?

Posted

技术标签:

【中文标题】是否可以在 Rust 的 NEAR 智能合约中验证 NIST P-256 曲线?【英文标题】:Is it possible to verify NIST P-256 curve in NEAR smart contract on Rust? 【发布时间】:2020-09-17 19:43:32 【问题描述】:

我正在考虑使用 ios Secure Enclave 对其中一个签名进行多重签名。但是它只支持 NIST P-256 曲线。

我知道它在协议级别不支持,但是可以在 Rust 智能合约中实现它吗?如果是这样 - 我从哪里开始?

【问题讨论】:

【参考方案1】:

目前,即使您可以在智能合约 NIST P-256 曲线内进行验证(这里有用于验证的库,例如 - https://github.com/RustCrypto/elliptic-curves/tree/master/p256),您仍然需要先使用一些 ED25519 或 SECP-256K1 密钥签署交易真正让区块链在合约代码执行之前接受它。

我的理解是,现在您可以将字节序列存储在安全飞地中,然后将其读出并签署用户空间中的任何功能。在这里如何安全地完成 - https://github.com/AlphaWallet/alpha-wallet-ios/pull/1272

如果这是支持 iOS 安全 enclave 唱歌的重要考虑因素,您可以创建规范更改提案,将 SECP-256P1(即 NIST P-256)添加为 NEAR 的替代密钥类型。它有明显的缺点,但这也是一个明显的优点,它是可选的,因此每个用户都可以决定他们喜欢使用哪条曲线。

【讨论】:

(我在上面提到的 AlphaWallet iOS PR 工作过)是的,理想的情况是如果 Secure Enclave 支持 secp256k1,那么我们可以直接使用它。不幸的是不是,所以下一个最好的事情(在那个 PR 中实现)是使用 Secure Enclave 创建和管理另一个密钥对,并使用基于 Diffie-Hellman 的对称加密来加密以太坊密钥(或种子)并将其存储为iOS Keychain 中的字节序列。

以上是关于是否可以在 Rust 的 NEAR 智能合约中验证 NIST P-256 曲线?的主要内容,如果未能解决你的问题,请参考以下文章

NEAR 是不是需要 Serialize 和 BorshSerialize?

NEAR 协议中存储的智能合约 WebAssembly 二进制文件在哪里/如何?

如何在 NEAR 协议中构建和部署多个合约

如何让用户在前端部署 NEAR 协议智能合约?

NEAR 智能合约错误:“合约未初始化”

合约可以在 NEAR 协议中自行删除吗?