充气城堡是否保护机密不被“泄漏”在内存/页面文件中,以及其他攻击途径

本文关键字:文件 攻击 及其他 内存 保护 是否 城堡 机密 泄漏 | 更新日期: 2023-09-27 18:33:20

基于这个问题,我在处理充气城堡的秘密时担心以下问题:

  • 加密(在内存转储或页面缓存的情况下(
  • 固定在内存中
  • 能够标记为只读(以防止任何进一步的修改(
  • 通过不允许传入常量字符串来安全构造
  • 优化编译器(请参阅链接文章 re:ZeroMemory 宏中的注释(,但它适用于 .NET 和从 GIT 构建

问题

  • Bouncy Castle 是否使用 .NET 中所需的构造来安全地构建它? (安全字符串或等效的直接操作(
  • SecureString(或等效(的覆盖范围是否在库中需要的地方持续存在
  • 是否必须以某种方式编译 Bouncy Castle 以防止编译器优化生效?

充气城堡是否保护机密不被“泄漏”在内存/页面文件中,以及其他攻击途径

无论如何都

不是明确的答案,但只是想指出,一旦攻击者能够不受限制地读取堆,假设您的应用程序在某些时候需要能够访问秘密数据,您就无法以编程方式执行完全的安全性。您所能做的就是尽力减少可能附加的时间跨度,并尽力避免在此期间将其提交到任何永久媒体(例如通过固定内存(。

安全字符串在 C# 中无法帮助您解决此问题,因为尽管它以加密方式存储在内存中,但访问它的密钥也存储在内存中,因此只要您拥有完整的内存转储,攻击者仍然可以访问它。此外,如果您在任何时候需要将数据放在 C# 中的字符串中,您也会遇到麻烦,因为字符串是不可变的并且无法覆盖。

解决您关于Bouncy Castle的具体问题,仅查看其界面很可能假设攻击者无法转储运行它的机器的内存,因为您通常会将字节数组传入和传出,并且这些字节不安全。但至少您可以在完成字节数组后覆盖它的内容,以减少内存中可用的明文的时间段,而不仅仅是等待它被其他东西覆盖。