C++ 保护应用程序';防止篡改内存
我们正在向服务器和客户端应用程序添加AES 256位加密,用于加密包含敏感信息的TCP/IP流量。我们将每天轮换钥匙。因此,密钥将与应用程序一起存储在内存中 密钥分发过程:C++ 保护应用程序';防止篡改内存,c++,memory,memory-management,windows-xp,protection,C++,Memory,Memory Management,Windows Xp,Protection,我们正在向服务器和客户端应用程序添加AES 256位加密,用于加密包含敏感信息的TCP/IP流量。我们将每天轮换钥匙。因此,密钥将与应用程序一起存储在内存中 密钥分发过程: 每个服务器和客户端每天都会有一个初始密钥加密密钥(KEK)列表 如果客户端刚刚启动或服务器刚刚启动,客户端将使用初始密钥从服务器请求每日密钥。服务器将使用使用初始密钥加密的每日密钥进行响应。每日键是随机生成的一组字母数字字符。我们使用的是AES 256位加密 所有后续通信都将使用该每日密钥进行加密 每夜,客户端将使用当前每日
我们使用C++和XP(Vista/5月7日是未来的选择,所以我不知道这是否改变了答案)。
< P>我认为你可能有一个更基本的问题在你的手上。p> 如果这台机器抓住rootkit的机会微乎其微,那么你所有的钥匙都是我们的,可以说 在Windows上,如果满足以下任一条件,进程A可以读取进程B的内存:当然,这不是Windows独有的。Windows的独特之处在于rootkit恶意软件的数量。我认为您可能有一个更根本的问题 如果这台机器抓住rootkit的机会微乎其微,那么你所有的钥匙都是我们的,可以说 在Windows上,如果满足以下任一条件,进程A可以读取进程B的内存:
当然,这不是Windows独有的。Windows的独特之处在于rootkit恶意软件的数量。您的密钥分发过程不安全:如果有人获得了初始密钥集,一切都结束了
是的,其他应用程序可以使用调试器钩子访问Windows上的进程内存,几乎没有办法阻止它。基本上,如果盒子以任何方式被破坏,你对此无能为力。你的密钥分发过程是不安全的:如果有人得到了初始密钥集,一切都结束了
是的,其他应用程序可以使用调试器钩子访问Windows上的进程内存,几乎没有办法阻止它。从本质上讲,如果这个盒子以任何方式被破坏,你几乎无能为力。还有一点信息是,即使你不亲自将密钥写入磁盘,它也很可能最终被破坏。虚拟内存系统所需要的只是将持有密钥的内存分页出来
正如其他人所指出的,如果你不能相信你身上的盒子,你无论如何都是完蛋了。有一些方法可以使用一些额外的硬件使这类事情更加安全,基本上是将加密任务转移到您可以更好地控制的子卡上。这是一些金融机构和一些政府实体使用的技术。不过,这可能超出了您的预算。还有一点信息是,即使您不亲自将密钥写入磁盘,它也很可能最终出现在磁盘上。虚拟内存系统所需要的只是将持有密钥的内存分页出来
正如其他人所指出的,如果你不能相信你身上的盒子,你无论如何都是完蛋了。有一些方法可以使用一些额外的硬件使这类事情更加安全,基本上是将加密任务转移到您可以更好地控制的子卡上。这是一些金融机构和一些政府实体使用的技术。不过,这可能超出了您的预算。确实没有办法阻止其他进程读取您进程的内存 <>为了使事情更能抵抗一个不受攻击的攻击,你可以考虑使用一个随机生成的密钥来加密真正的密钥而不使用它。您可以在程序每次运行时生成一个新的随机KEK,甚至在程序每隔几秒钟运行时进行更改。只有在您实际需要使用“真实”密钥时才对其进行解密,然后在完成时立即将密钥所在的内存归零
当然,如果你在不断的交流中,这不会真正起作用。但是,如果您的通信大部分时间处于空闲状态,并且只看到偶尔的流量峰值,那么这种方法可能会起作用。实际上没有办法阻止其他进程读取您进程的内存 <>为了使事情更能抵抗一个不受攻击的攻击,你可以考虑使用一个随机生成的密钥来加密真正的密钥而不使用它。每次都可以生成一个新的随机桶