Alert Source Discuss
🚧 Stagnant Standards Track: ERC

ERC-5437: 安全联络人接口

使用非对称加密的安全通知接口

Authors Zainan Zhou (@xinbenlv)
Created 2022-08-09
Discussion Link https://ethereum-magicians.org/t/erc-interface-for-security-contract/10303
Requires EIP-165

摘要

使用非对称加密的安全通知接口。该接口公开一个非对称加密密钥和一个传递目的地。

动机

目前,没有一致的方法来指定一个官方渠道,供安全研究人员向智能合约维护者报告安全问题。

规范

本文档中的关键词“必须”、“禁止”、“需要”、“应该”、“不应该”、“推荐”、“可以”和“可选”应按照 RFC 2119 中的描述进行解释。

interface IEIP5437 {

    /// REQUIRED (必需)
    function getSecurityContact(uint8 type, bytes memory data) public view
    returns (
        uint8 type,
        bytes memory publicKey,
        bytes memory extraData
    );

    /// OPTIONAL (可选)
    // TODO 考虑在最终确定之前移除,如果不需要
    function setSecurityContact(
        uint8 type,
        bytes memory publicKey,
        bytes memory extraData) public;
    event SecurityContactChanged(uint8 type, bytes memory publicKeyForEncryption, bytes memory extraData);

    /// OPTIONAL (可选)
    function securityNotify(uint8 type, bytes memory data) public payable;
    /// OPTIONAL (可选)
    event OnSecurityNotification(uint8 type, bytes memory sourceData, uint256 value);

    /// OPTIONAL (可选)
    // TODO 考虑将其作为一个单独的 EIP
    function bountyPolicy(uint256 id) public view returns(string, bytes memory extraData);
}
  1. 兼容的接口必须实现 getSecurityContact 方法。

type 是一个字节的数据,有效范围为 [0x10, 0x7f]。范围 [0x00, 0x0f][0x80, 0xff] 保留用于未来扩展。

type 指示 publicKeyextraData 的格式,如下所示


| Type | Encryption scheme (加密方案) | extraData | ——-|————————————-|————————————————– | 0x10 | GnuPG - RSA/3072 | Email address(es) (电子邮件地址) 以 RFC 2822 格式编码 | ————————————————————————————————

可以通过未来的 EIP 提出此表的新版本,方法是指定一个新的 type 编号。

  1. getSecurityContact 返回的 publicKey 必须遵循上表中指定的加密方案。

以下是使用 RSA/3072publicKey 示例,该密钥通过 RFC 20 ASCII 编码的公钥字符串中的 GnuPG 生成:

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
MOA+HDqgA3a9kWbQKSloORq4unft1eu/FCra
=O6Bf
-----END PGP PUBLIC KEY BLOCK-----
  1. 如果实现了 setSecurityContact 并且对它的调用已成功设置了新的安全联系人,则必须发出一个 SecurityContactChanged 事件,其中包含与 setSecurityContact 相同的传入参数

  2. 另外,建议实现一个链上安全通知方法 securityNotify 以接收链上安全通知。如果它被实现并且调用成功,则必须发出一个具有相同传入参数数据的 OnSecurityNotification

  3. 兼容的接口必须实现 EIP-165

  4. 建议通过 bountyPolicy 方法设置赏金策略。 id = 0 保留用于完整概述,而其他数字用于不同的个人赏金策略。 返回的字符串将是赏金策略内容的 URI。 没有指定赏金政策的特定格式。

理由

  1. 为了简单起见,此 EIP 使用给定的加密方案指定了一个简单的 GPG 方案,并使用电子邮件地址作为联系方式。 未来的 EIP 可能会指定新的加密方案或传输方法。
  2. 此 EIP 添加了一个可选方法 setSecurityContact 来设置安全联系人,因为它可能会因加密密钥过期等情况而发生变化。
  3. 此 EIP 显式地将 securityNotify 标记为 payable,以便允许实施者设置质押金额来报告安全漏洞。
  4. 此 EIP 通过添加 bountyPolicyextraData 字段,允许未来进行扩展。 这些字段的附加值可能会在未来的 EIP 中添加。

向后兼容性

目前,OpenZeppelin 等现有解决方案在源代码中使用明文

/// @custom:security-contact some-user@some-domain.com

建议新版本的智能合约除了传统的 @custom:security-contact 方法外,还采用此 EIP。

安全注意事项

实施者应正确遵循加密方案要求的安全措施,以确 Chosen 通信频道的安全性。 一些最佳实践如下:

  1. 保持安全联系人信息最新;
  2. 按照最佳实践建议的周期轮换加密密钥;
  3. 定期监视频道,以便及时收到通知。

版权

CC0 下放弃版权和相关权利。

Citation

Please cite this document as:

Zainan Zhou (@xinbenlv), "ERC-5437: 安全联络人接口 [DRAFT]," Ethereum Improvement Proposals, no. 5437, August 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5437.