# 答辩问题准备

1. **Q:数据安全与隐私**：您的系统在分布式环境中如何确保数据安全和隐私，尤其是在密钥管理方面的挑战？  

    **A:** 通过代理服务器来转换密文，使其从一个密钥加密变为另一个密钥加密，而不需要将密文解密为明文；客户端每次启动时会生成新的公私密钥对，在随后的通信中，随机选取一次性对称密钥。

2. **Q:国家安全标准的遵循**：您能详细说明您的系统如何符合中国的国家安全标准，特别是对于政府和金融等敏感领域？  

    **A:** 使用国产的SM算法，减小对外国算法的依赖，增强自主控制的能力，可以有效防止潜在的后门和安全漏洞。

3. **Q:系统架构**：您的分布式架构如何提高系统的性能和可伸缩性？  

    **A:** 性能方面，我们采用了门限方案，在解密时不需要接收所有的密文片段；密文重加密和解密使用对称密钥，加快加解密速度。可以认为每次都可以"挑选"较高性能的节点进行计算。可伸缩性方面，动态进行节点的添加与退出，客户端也可以动态更新节点。

4. **Q:算法效率**：您能讨论一下您系统中使用的门限代理重加密技术的效率和计算要求吗？  

    **A:** 性能开销最大的是重加密密钥的生成和解密，其余步骤开销极小；计算要求：64位CPU，512MB内存，可以运行Docker

5. **Q:兼容性与鲁棒性**：您的系统如何确保与各种环境（如分布式隐私计算）的兼容性，并且如何处理节点故障或恶意节点？  

    **A:** 兼容性：使用容器化部署，保证运行环境的一致性，兼容多个操作系统和CPU架构；鲁棒性：在异常和危险情况下系统生存的能力。比如说，计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下，能否不死机、不崩溃，就是该软件的鲁棒性。体现：对恶意数据进行过滤；使用python异常处理机制，手动捕获错误并防止程序崩溃退出；使用心跳包技术检测节点存活状态。对于故障节点使用心跳包检测节点存活状态；对于恶意节点，我们尚未实现相关功能，但是我们计划使用信誉系统对节点进行评分，客户端可向中心服务器反馈恶意节点，中心服务器通过相关算法降低恶意节点被分配到的权重，如果确定是恶意节点，则进行黑名单限制。

6. **Q:实际应用场景**：您的系统在哪些实际场景中可以最有效地使用，这些场景中可能的局限性或挑战是什么？  

    **A:** 区块链中的分布式计算和数据安全共享场景、数据安全授权、分布式密钥管理；计算资源受限，加密算法缺乏软硬件层面的深度定制优化。

7. **Q:代码结构与模块化**：您的项目代码是如何组织的？您如何确保代码的模块化和可读性？  

    **A:** 我们先实现了算法部份，利用函数调用来实现算法的每个步骤。然后我们按照系统角色功能，分别编写了客户端、节点、中心服务器的代码。使用前后端分离。可读性方面，我们采用了下划线命名法，REST编程风格，使用类型提示来确保我们在开发过程中有着良好的可读性。

8. **Q:算法实现**：在代码中，您如何实现门限代理重加密算法？有哪些关键的算法优化或创新点？  

    **A:** 融合了代理重加密和shamir秘密共享以及混合加密机制；使用雅各比坐标系加快椭圆曲线上的点的计算。使用fastapi框架实现原生高性能api以及异步编程。使用sqlite，减少计算资源开销，免去复杂的数据库配置。

9. **Q:性能测试**：您是否对代码进行了性能测试？测试结果显示的主要瓶颈和优化机会是什么？  

    **A:** 是的，我们使用了line_profiler这个工具进行性能测试。测试结果显示的主要瓶颈在于重加密密钥生成和解密这两个步骤。在这两个步骤中涉及到了椭圆曲线上的计算。我们使用了雅各比坐标系加快了计算速度。(雅各比坐标系通过减少在有限域中进行的昂贵的模逆运算，以及优化乘法操作的数量，使得椭圆曲线上的点加和点倍运算更加高效。这些优化对于加密和解密操作的速度至关重要，特别是在资源受限的环境)。再有，sqlite不支持高并发场景，在写入时存在资源抢占，但是我们使用了消息队列将并发的数据转换为串行，提高了写入效率。

10. **Q:安全性考虑**：在代码实现中，您如何处理潜在的安全漏洞，特别是与加密和数据传输相关的？  

    **A:**  我们使用了参数化查询，参数化查询避免了将用户输入直接拼接到SQL语句中。可以使用https加密传输数据。

11. **Q:错误处理和日志记录**：您的代码中是否包含了错误处理和日志记录机制？这些机制如何帮助监控和调试系统？  

    **A:** 我们使用了python内置的异常处理来处理错误。日志使用的是print函数来输出。我们为代码添加了不同的返回值，所以在调试的时候如果出错，我们可以很方便的定位错误。同时异常处理保证了程序不会异常退出。  

12. **Q:项目是如何应用在区块链中的:**  如题

    **A:** 加密数据：将使用私钥加密的密文上传到区块链；授权访问：数据请求方发送访问请求给数据持有方；代理重加密：代理节点重加密密文，数据请求方使用自己的私钥进行解密；所有的访问请求和重加密操作都在区块链上记录，提供了完整的审计追踪功能

13. **Q:简单介绍一下代理重加密的数学原理：**  如题

    **A:** 代理重加密为一种三方协议，可以简单理解为三个人的DHKE。A将秘密拆分为两个部分，一部分给B，一部分给代理节点。在重加密时，代理节点将这部分密码附加进密文，此时B收到可以通过另一部分秘密来恢复完整的秘密。

14. **Q:选择密文攻击，选择明文攻击**  如题

    **A:**

15. **Q:国密SM2 SM3 SM4**  如题

    **A:**  
