内存是否加密?
我想在变量中存储一些数据(我知道变量存储在内存中)。内存中的数据是否经过加密?此外,软件是否有可能读取存储在内存中的变量名称并能够实际从中提取数据?
我想在变量中存储一些数据(我知道变量存储在内存中)。内存中的数据是否经过加密?此外,软件是否有可能读取存储在内存中的变量名称并能够实际从中提取数据?
内存在我所知道的任何平台上都没有加密。无论如何,它的价值都是有限的,因为处理器通常必须对明文数据进行操作,因此数据必须在机器的某个地方以明文形式存在。
相反,现代操作系统(以及大多数历史操作系统)使用内存保护来仅允许某些进程访问某些内存页。每个内存页都带有读取、写入和(有时)执行权限。操作系统内核负责在上下文切换时处理这些权限,以根据需要授予或拒绝对每个进程的内存页的访问。
Saltzer和Schroeder在1975年的论文《计算机系统中的信息保护》(The Protection of Information in Computer Systems)描述了一种使用段而不是页面的机制,但该原理几十年来一直保持不变。
通常,任何进程拥有的内存页都可以由具有足够高权限的进程读取。操作系统内核当然可以修改任何内存页面,并且还可以选择将该权限委派给用户进程。Linux 上的系统调用提供了一个调试器后门,可用于实现只读内存检查系统(如 or 或 )或内存修改系统(如和基于 ptrace
的沙盒环境)。ptrace(2)
strace(1)
ltrace(1)
gdb(1)
gdb(1)
或者,在某些情况下(请参见和手册页),可以转储包含进程内存内容的核心文件。这就是为什么在发布之前清除重要数据的记忆很重要的原因之一。core(5)
setrlimit(2)
我是一个团队的一员,该团队致力于在运行程序中加密指针(非PTO链接)。头顶是惊人的,角落案例的数量甚至更惊人。将这些技术用于普通程序可能并不实用,尽管我可以想象一个受限制的环境,其中加密内存或控制结构是一种可行的方法。(尽管可能其他技术更合适。
好吧,所以我想在变量中存储一些数据(我知道,变量存储在内存中) - 内存中的数据会加密吗?
不
此外,软件是否有可能读取存储在内存中的变量名称并能够实际从中提取数据?
名称或值?
对于值:
你的意思是一个不同的程序,不是你的,来访问它并阅读它?是的,这是可能的,根据操作系统的不同,它可能很棘手或更棘手,但可行。
对于名称:取决于你如何构建软件 - 如果你在其中留下调试信息 - 这很容易做到。