【问题标题】:Does Bouncy Castle protect secrets from "leaking" in memory/pagefile, and other avenues of attack?Bouncy Castle 是否可以保护机密免于“泄露”内存/页面文件以及其他攻击途径?
【发布时间】:2014-12-05 17:08:16
【问题描述】:

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

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

问题

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

【问题讨论】:

    标签: c# clr bouncycastle compiler-optimization securestring


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 2011-06-20
      • 1970-01-01
      • 2014-11-29
      • 2023-03-08
      • 2018-06-18
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      相关资源
      最近更新 更多