7

当我通过 TCP/IP 套接字在进程之间发送 MPI 消息时,OpenMPI 和 MPICH 如何处理安全性?

特别是,它们如何防止同一网络的其他用户连接到侦听套接字并发送虚假 MPI 消息?

具体场景如下:

  • 管理员值得信赖。不受信任的用户没有对任何硬件或网络的物理访问权限。不受信任的用户没有 root 访问权限。
  • 但是,不受信任的用户可以在集群中运行自己的程序;集群节点是典型的 Linux 机器。特别是,不受信任的用户可以打开从任何机器到集群中任何其他机器的 TCP 连接并发送任意消息。
4

3 回答 3

7

J 泰勒的权利;MPI 并没有真正做到这一点,也不应该这样做。这是基于 MPI 用例的设计决策。

MPI 用户是那种为亚微秒级延迟的互连支付大量资金的人。对于这个社区来说,某种类型的消息加密签名的开销是完全不可接受的。

无论如何,它不会真正有帮助。MPI 的使用方式是作为受控环境中的消息传输接口 - 访问受限集群中的节点,或者可能是计算实验室中的机器。如果恶意用户获得了对其中一个节点的足够控制权以干扰 MPI 通信,那么破坏通信的方法比嗅探数据包、确定计算的哪个阶段以及进行某种人为干预要容易得多。中间攻击。可以只更改正在运行的作业的内存,或者更简单地,简单地覆盖共享文件系统上的结果。(注意简单地发送伪造的 MPI 消息可能会被注意到,因为“真实”消息会堆积起来,使用资源并可能导致作业崩溃;同样,

当然,这些论点不适用于分布式计算,比如 BOINC 风格:但 MPI 无论如何都不太适合这种用途。

当然,没有什么能阻止具有这种安全要求的 MPI 用户简单地随每条消息一起发送 pgp 样式的签名并将其合并到他们的代码中。但是这样做的机制本身并不是 MPI 的一部分,这当然是正确的决定。

于 2011-07-02T15:28:39.793 回答
3

我不是这方面的专家,但基本的答案是 MPI 通常不处理安全性。它依赖于底层操作系统来提供您所描述的安全级别。

对于我的 mpi 发行版,这是内置的,它使用 mpd 守护程序(启动 mpi 进程的守护程序)。mpdboot 以一种理智的方式在集群上设置了一个 mpd 守护程序环(每个节点 1 个)。一旦设置了该环,并且如果您信任 mpd 守护程序,那么您就一切就绪。Mpd 将确保只有您拥有的进程连接到您的 mpi 进程。

但是,我不太了解 mpd 环设置的“理智方式”。然而,在我的发行版中,mpdboot 是一个 python 脚本,所以可以看一下它,看看它对你来说是否足够安全。如果您正在运行的集群是访问控制的,那可能就足够安全了。

于 2011-06-29T18:41:51.363 回答
0

我完全支持@Jonathan Dursi,保护 MPI 通信对配置良好的集群的安全性贡献不大,但是 (a) 管理层可能会坚持,(b) 出于某种原因,您希望在不受信任的网络上运行 MPI,以及 (c ) 解决问题很有趣。

对于不信任网络的情况,我之前使用IPSec保护集群上的MPI通信网络。我没有使用需要证书的 IPSec 自动配置脚本,而是通过我使用 python 脚本自动生成的 shell 脚本加载了对称加密密钥。

为了隔离集群上各个作业的 MPI 通信,应该可以扩展这种方法以在每个作业的 prolog 中加载新生成的 IPSec 密钥,而不是仅在系统启动时加载一次。在此设置中,作业不得共享节点。此外,使用 MPI 的专用网络进行设置会更容易,因为正在进行的连接(ssh、作业管理器等)必须保持不变,并且您可能不想包含通常的头节点作业管理系统需要连接到作业的 IPSec 网络,因为攻击者可能坐在那里。

于 2018-09-24T10:19:44.940 回答