内存加密了吗?

Tom*_*m F 27 php c++

我想将一些数据存储在一个变量中(我知道变量存储在内存中).内存中的数据是否加密?此外,软件是否有可能读取存储在内存中的变量名称并能够实际从中提取数据?

sar*_*old 30

在我所知道的任何平台上都没有加密内存.无论如何,它将是有限的价值,因为处理器通常必须对明文数据进行操作,因此数据必须在机器的某个地方以明文形式存在.

相反,现代操作系统(以及大多数历史操作系统)使用内存保护来仅允许某些进程访问某些内存页面.每个内存页面都带有读取,写入和(有时)执行权限.操作系统内核负责在上下文切换上处理这些权限,以根据需要授予或拒绝对每个进程的内存页面的访问.

Saltzer和Schroeder在1975年的论文"计算机系统的信息保护"中描述了一种使用而不是页面的机制,但该原理几十年来一直保持不变.

通常,任何进程拥有的内存页面都可由具有足够高权限的进程读取 ; 操作系统内核当然可以修改任何内存页面,它也可以选择将该权限委托给用户进程.在ptrace(2)在Linux系统调用提供了一种调试程序,后门可被用来实现只读存储器检查系统,例如strace(1)ltrace(1)gdb(1)或存储器-修饰系统如gdb(1)ptrace基于沙箱环境.

或者,在某些情况下(参见和联机帮助页),可以转储核心文件,其中包含进程内存的内容.这就是为什么在发布之前清除重要数据的记忆很重要的一个原因.core(5)setrlimit(2)

我是一个在运行程序中加密指针(非PTO链接)的团队的一员.开销很惊人,角落案件的数量更加令人惊讶.将这些技术用于通用程序可能并不实用,尽管我可以想象加密内存或控制结构是一种可行方法的受限环境.(虽然其他技术可能更合适.)

  • 一般来说,处理器必须对明文数据进行操作,因此数据必须是机器上的明文* - 有些系统"某处"就在处理器内部,并且有一个加密器/解密器嵌入其中以便在处理器外的任何地方加密实际数据.在这种情况下,如果没有实际的物理接触(使用恶意软件是不够的),就很难破解它. (3认同)
  • Xbox 360是内存加密且性能完全可接受的平台的一个很好的例子.当读取到CPU缓存时,RAM的内容被解密,并在写回时重新加密.地下室IIRC 逻辑嵌入在缓存本身旁边.http://www.youtube.com/watch?v=uxjpmc8ZIxM&feature=player_detailpage#t=1009s (2认同)

lit*_*adv 12

好吧,所以我想将一些数据存储在变量中(我知道,变量存储在内存中) - 内存中的数据是否加密?

没有

此外,软件是否有可能读取存储在内存中的变量名称并能够实际从中提取数据?

名称或值?

对于价值观:

你的意思是一个不同的程序,而不是你的程序,访问它并阅读它?是的,这可能,取决于操作系统,它可能是棘手或棘手的,但可行.

对于名称:取决于您如何构建软件 - 如果您将调试信息留在其中 - 这很容易做到.


Ala*_*lan 5

不.内存通常不加密.

内存存储您写入的数据.在某些时候,内存将包含数据的纯文本版本,这有时被用作利用系统的方式.

也就是说,一旦攻击者可以物理访问您的计算机,就很难保护它们.

有一些语言特定的功能试图解决这个问题,例如C#SecureString ,但即便如此也有其局限性.


tru*_*ity 5

内存中的数据是否加密?

通常没有.我说"通常"只是因为你可以想象一个操作系统或硬件加密内存.真的,不.

软件是否有可能读取存储在内存中的变量名称并能够实际从中提取数据?

要看.使用PHP等解释语言中的代码,变量名称会保存在某个内存中,因此可以想象它是可能的.使用像C++这样的编译代码,它可以使用调试信息进行编译(然后调试器将能够查看变量名称并提取它们的值),或者可以在没有它的情况下进行编译,然后变量名称丢失.

此外,编写一个读取任意内存地址的程序非常容易,但要弄清楚读取的字节数是多么困难.