c# - Bouncy CaSTLe 是否保护内存/页面文件中的 "leaking"和其他攻击途径的 secret ?

标签 c# clr bouncycastle compiler-optimization securestring

基于 this question,在处理 Bouncy CaSTLe 的 secret 时,我担心以下问题:

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

问题

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

最佳答案

无论如何都不是一个明确的答案,只是想指出,一旦攻击者能够不受限制地读取堆,那么假设您的应用程序在某个时候需要能够访问 secret 数据。您所能做的就是尽最大努力减少可以附加的时间跨度,并尽量避免在这段时间内将其提交给任何永久媒体(例如通过固定内存)。

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

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

关于c# - Bouncy CaSTLe 是否保护内存/页面文件中的 "leaking"和其他攻击途径的 secret ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27321131/

相关文章:

c# - 访问不在绑定(bind)列表中的 Datagridview 列

c# - 限制动态 IP 端口范围

c# - 引用对象的地址在立即窗口中有效,但在编译代码中无效

c# - 使用 Bouncy CaSTLe c# 创建 CRL 文件

java - 使用 Bouncy CaSTLe 获取椭圆曲线的 X 坐标

java - 使用 java 或 BouncyCaSTLe 生成 CSR,而不使用私钥

c# - 如何只解析字符串中的 float ?

c# - 使用 Google Calendar API 添加和检索扩展属性

.net - 加载新的托管应用程序时,是否每次都加载和初始化CLR?

c# - 你能通过内存位置而不是内容来比较字符串吗?