如何才能防止别人从内存中读取数据
在做一个需要加密的东西,客户端从服务器接收密钥,先不考虑别人从网络上截取密钥,在客户端接收到密钥后,怎么才能防止他从内从中把密钥读取出来呢?从内从中读取数据都有哪些方法,分别应该怎么防止?
[解决办法]
先不说有那么多现成的 读取进程内存的软件,winHex 之类的
思路,不能放在阻止别人读你的内存这个上面
假设,你有最严密的方法,避免了人家读取内存。
可人家,用 VMware,virtualBox 之类的虚拟机。 然后,把整个 系统,suspend/snapshot到硬盘。 那么,你所有的内存,都存到了硬盘。 于是,也你再强硬的方法,最终就是 fopen/fread的干活了。
(就像那个经典的例子,有什么办法避免用户截屏截图? 最终答案,“试问LZ又如何防止用户拿相机对着屏幕拍”)
引用
zhao4zhong1
不要陷入加密与解密的死循环
[解决办法]
赵老师还有一句名言,是什么调用XX API还可以读取别的进程的信息呢
[解决办法]
还是加密,在使用的时候再还原。
[解决办法]
#include <stdio.h>FILE *fi,*fo;void main() { fo=fopen("500M.out","wb"); fi=fopen("500M.in","rb"); fseek(fi,-1L,SEEK_END); while (1) { fputc(fgetc(fi)^0xA5,fo); if (fseek(fi,-2,SEEK_CUR)) break; } fclose(fi); fclose(fo);}
[解决办法]
哥是搞安全的,给你权威解释吧
楼主不要费劲了,软件算法必然有一段时间密钥是明文存在内存中的,技术手段只能够减少这个存在时间,比如加密后立即请利用过的堆栈
只有硬件加密(加密卡/usbkey等),密钥不出卡才能达到你的要求
软件加密必须默认本地内存的安全性,可以有一些小打小闹的安全增强手段,比如做成驱动,只有内核级进程和超级管理员权限才能访问你的内存之类,但都不能根本解决问题
楼主你们这个密钥管理机制是谁设计的,难道是网络上明文传输密钥,这个……也太菜了,远程密钥交换是由许多现成的协议的,网络上绝不能出现密钥明文
所以,“先不考虑别人从网络上截取密钥,在客户端接收到密钥后,怎么才能防止他从内从中把密钥读取出来”这是本末倒置的说法
[解决办法]
只要你的 数据在内存中,不管你是神马驱动啊,内核啊,权限啊。
全是浮云。
一个 vmware, virtual box 把 整个操作系统运行在 虚拟机中。
然后, 把虚拟机的整个内存,和状态等, suspend/snapshot ,到硬盘。
那么,你整个内存的数据,全在 硬盘上了,在host 机器,也只是 浮云般的 fopen fseek , fread, 什么驱动权限内核通通成了纸老虎。
所以,妄想别人不读你的内存,是不可能的。
[解决办法]
最后还是,防反向,防调试。
有些跑题了,lz的数据没那么高的密级,又不是卫星通信,没必要搞得这么严重吧,呵呵呵
[解决办法]
还是引入硬件加密吧,信息这种东西,要绝对防止复制,窃取比较难.
[解决办法]
对啊,是什么东西要求这么高