当我通过TCP / IP套接字在进程之间发送MPI消息时,OpenMPI和MPICH如何处理安全性?
特别是,它们如何阻止同一网络的其他用户连接到侦听套接字并发送伪造的MPI消息?
具体方案如下:
答案 0 :(得分:7)
MPI用户是那些为亚微秒延迟的互连支付大量资金的人。对于这个社区来说,某种加密签名消息的开销是完全不可接受的。
无论如何它都无济于事。 MPI的使用方式是作为受控环境中的消息传输接口 - 受限访问集群中的节点,或者计算实验室中的计算机。如果恶意用户获得对这些节点之一的足够控制以干扰MPI通信,则有更容易的方法来破坏通信而不是嗅探数据包,找出正在进行的计算的哪个阶段,以及做某种类型的man-in-中间的攻击。可以只改变正在运行的作业的内存,或者更容易,只是覆盖共享文件系统上的结果。 (注意只是发送伪造的MPI消息可能会被注意到,因为“真实”消息会堆积起来,使用资源并可能导致作业崩溃;类似地,拦截消息而不中继它们几乎肯定会导致死锁)。
这些论点并不适用于分布式计算,当然,也就是BOINC风格:但MPI并不适合这种用途。
当然,没有任何东西可以阻止具有此类安全要求的MPI用户简单地将pgp样式的签名与每条消息一起发送并将其合并到其代码中;但是这样做的机制本身并不是MPI的一部分,这当然是正确的决定。
答案 1 :(得分:3)
我不是这方面的专家,但基本的答案是MPI通常不处理安全问题。它依赖底层操作系统来提供您所描述的安全级别。
对于我的mpi发行版,内置的是使用mpd守护进程(启动mpi进程的守护进程)。 mpdboot以一种理智的方式在集群上设置一个mpd守护进程环(每个节点1个)。一旦设置了该环,并且如果您信任mpd守护进程,那么您已经完成了设置。 Mpd将确保只有您拥有的进程才能连接到您的mpi进程。
但是,我不太了解mpd环的“理智方式”。然而,在我的发行版中,mpdboot是一个python脚本,因此可以查看它并查看它是否足够安全。如果您运行的群集是受访问控制的,那么它可能足够安全。
答案 2 :(得分:0)
我全都与@Jonathan Dursi在一起,认为MPI通信的安全性对配置良好的群集的安全性几乎没有贡献,但是(a)管理层可能会坚持,(b)由于某些原因您想在不受信任的网络上运行MPI, (c)解决问题很有趣。
对于不受信任的网络情况,我以前使用IPSec保护群集上的MPI通信网络。我没有使用需要证书的IPSec自动配置脚本,而是通过由python脚本自动生成的shell脚本加载了对称加密密钥。
要隔离群集上各个作业的MPI通信,应该可以扩展此方法,以在每个作业的序言中加载新生成的IPSec密钥,而不是在系统启动时加载一次。在此设置中,作业不得共享节点。此外,使用专用于MPI的网络进行设置会更容易,因为必须保持正在进行的连接(ssh,作业管理器等),并且您可能不希望包含通常用于作业管理系统需要连接到作业的IPSec网络,因为攻击者可能坐在那里。