云安全:Windows Azure 中的加密服务和数据安全
2010-03-26 00:00:00 来源:WEB开发网不变性和内存资源
什么是不变性?不变性在面向对象的编程中仅意味着在初始创建对象后无法修改其状态。Microsoft .NET Framework 中的一个具体示例是字符串类。在代码中更改了字符串的值后,只需弃用内存中的原始字符串并创建一个用于存储新值的新字符串对象。
为什么从安全性的角度讲这很重要?只要服务器处于联机状态并且不重新启动,该字符串可以始终保留在内存中。您真的无法确定字符串将在内存中保留多长时间。这在考虑如何在代码中存储信息(例如,加密密钥或加密和解密数据的副本)时非常重要。内存中数据遗迹很可能留下将秘密透露给狡猾的数据盗贼的信息。
由于此不变性,强烈建议将此类数据存储在缓冲区(如字节数组)中。这样,当您使用此信息完成操作后,您可以使用 0 或任何其他数据覆盖该缓冲区来确保该数据不再位于内存中。
由于 Windows Azure 是云环境,曾经有人问我,是否仍需要考虑这些,这是一个很好的问题。仍需要考虑这些,在 Windows Azure 系统中,各个应用程序之间相互独立。这通常会使透露内存中的数据变得异常简单。很难将应用程序与云中的内存空间相关联。但是,我仍建议使用此方法时要格外谨慎并在执行操作后进行清理。您可能不会始终在云中运行此段代码,且其他漏洞可能会在将来将自身公开。不需要太担心,保持这个习惯并坚持按此方法执行操作即可。
在图 3 中,我已修改了生成随机整数的上一示例。我在此处添加了一些错误处理以确保具有在任何情况下都始终运行的 finally 块。我正在该块中通过字节数组中的值执行非常简单的迭代,使用零值覆盖各个位置。这将覆盖内存中的数据,因为字节数组具有可变性。我知道该数字不再包含在归此成员执行的操作所有的内存中。可对用作项目(例如密钥、初始化向量和加密或解密数据)的数据缓冲区的任何字节数组执行此操作。
更多精彩
赞助商链接