2010-05-11 27 views
4

在同一台机器上的两个应用程序(包括Java服务器和Java服务器的C/C++客户机)之间,最安全的通信方法是什么?同一台机器上的应用程序之间最安全的通信方法

SSL套接字是否足够安全,还是可以被“中间人”攻击破坏?

这里主要关心的是客户端如何信任本地服务器?

介绍一个远程服务器可以提高本地通信的安全性,这怎么实现?

+1

我完全不知道你试图抵御什么攻击。如果它的本地系统和攻击者拥有root/admin,那么你完全可以做任何事情,毕竟他们已经拥有了整个系统。就SSL和MITM而言,这让我感到轻松,由PKI支持的SSL专门用于阻止像MITM这样的攻击。 – rook 2010-05-11 18:00:11

回答

1

安全吗?如果攻击者拥有root权限,他们可以在加密之前和解密之后破坏系统调用并监视内存缓冲区,并且您可以做的任何事情都是安全的。

如果攻击者没有root权限,即使没有对其进行加密,他们也无法看到这些信息。

所以我没有看到这一点。

1

如果你的整个系统,包括它的秘密都在同一台机器上运行,那么毫不奇怪,它本质上是不安全的。黑客可以看到系统的所有部分,并且付出足够的努力,可以解开任何保护措施或加密方案。

如果系统必须100%安全,那么系统的一部分需要是远程的,因此黑客无法进行合并。

+1

如果系统必须100%安全,则必须拔掉电源 - 从电网以及网络中进行:) – CuriousPanda 2010-05-11 14:27:03

+0

即使可以读取硬盘并对其进行解密,因此您必须将其锁定在大型保险柜中并把它埋在没有人期望的地方......但即使这样,有一个小的机会,有人会找到它......我想我变得偏执。 ;-) – Hardcoded 2010-05-11 14:33:52

1

我不得不说,内存映射文件或共享内存区域是最安全的方法,其中Java和C++(Win32,Unix)都支持进程间通信。这是更复杂的,但你必须处理你自己的同步。完全插入插座。

+0

safe-ish,直到我注入一个evesdropping dll到你的进程空间中...... – mdma 2010-05-11 14:21:13

+0

@mdma当然在这一点上整个进程的内存空间是可读的,所以通信机制是不相关的。 – KeithB 2010-05-11 15:52:22

+0

@mdma你打算怎么做? – rook 2010-05-11 17:56:53

5

您需要详细说明您的威胁模型。这是一个普遍的真理,任何人物理访问你的硬件,动机和足够的时间能够颠覆任何东西。如果攻击者碰巧是服务器上的管理员,这会增加一倍。

是的,您的代码中的任何内容都可以通过管理员访问进行读取。您可以尝试巧妙的技巧,比如加密或模糊存储在二进制/ JAR文件中的密码,但这是一个障碍,而不是绝对的障碍。

另一方面,保密性没有绝对的障碍,只是或多或少有效的障碍物。无论您的措施如何,无论您的加密和密钥管理的强度如何,如果有足够的时间和激励,任何事情都会产生效果。这使我们回到了第一点:您的威胁模型是什么(您希望保护哪些攻击);你的受保护资产有多少价值;谁和你信任什么?

+0

在我的特殊情况下,客户端必须从本地服务器获取响应,根据这些响应,他们将在不同的路径上进行操作,以便他们需要信任此服务器。 – Radu 2010-05-11 14:36:12

+0

同意。这就是DRM从根本上有缺陷的原因。硬件的所有者成为攻击者,因此只要付出足够的努力,任何DRM都可能被破坏。请注意,我并不是想暗示这个问题与DRM有什么关系,只是做一个比喻。 – KeithB 2010-05-11 15:55:16

+0

我真的不认为拉杜知道他正在试图抵御什么攻击。但这是对一个虚假问题的一个很好的答案。 – rook 2010-05-11 18:02:25

1

管道应提供安全(和简单)的通信。是的,如果黑客存储在二进制文件中,并且二进制文件的权限允许读取该文件,黑客就可以检索密码。

相关问题