我想将一些数据存储在变量中(并且我知道变量存储在内存中)。内存中的数据是否被加密?另外,软件是否可以读取存储在内存中的变量名称并能够从中实际提取数据?
内存是not在我所知道的任何平台上进行加密。无论如何,它的价值有限,因为处理器通常必须对明文数据进行操作,因此数据在机器上必须是明文的某处.
相反,现代操作系统(以及大多数历史操作系统)使用内存保护 http://en.wikipedia.org/wiki/Memory_protection只允许某些进程访问某些内存页。每一段记忆page具有读、写和(有时)执行权限。操作系统内核负责处理这些权限上下文切换 http://en.wikipedia.org/wiki/Context_switch根据需要授予或拒绝对每个进程的内存页的访问。
Saltzer 和 Schroeder 1975 年的论文计算机系统中的信息保护 http://www.cs.virginia.edu/~evans/cs551/saltzer/描述一种机制,使用segments http://en.wikipedia.org/wiki/Memory_segment,而不是页面,但几十年来这个原理一直没有改变。
通常,任何进程拥有的内存页都是readable通过具有足够高权限的进程;操作系统内核当然可以修改任何内存页,并且它也可以选择将该权限委托给用户进程。这ptrace(2)
Linux 上的系统调用提供了一个调试器后门,可用于实现只读内存检查系统,例如strace(1)
or ltrace(1)
or gdb(1)
,或内存修改系统,例如gdb(1)
and ptrace基于沙箱环境 http://codepad.org/about.
Or, a 核心文件在某些情况下可以被倾倒(参见core(5)
and setrlimit(2)
联机帮助页),包含进程内存的内容。这就是为什么重要的原因之一释放前清除内存中的重要数据 http://cwe.mitre.org/data/definitions/226.html.
我是一个团队的成员,该团队致力于 (非 PTO 链接 http://patents.enlyton.com/7,752,459)在运行程序中。开销是惊人的,而角落案例的数量更是惊人。将这些技术用于常见程序可能不切实际,尽管我可以想象在受限环境中加密内存或控制结构是一种可行的方法。 (尽管其他技术可能更合适。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)