能否将单进程的CPU算力与内存分配至多台计算机,实现分布式计算?
分布式暴力破解一次性密码本方案解答
可行性结论
完全可行。你要实现的暴力破解OTP属于可拆分的计算密集型任务,不需要维持单进程的完整内存空间,只需要将任务、对应的算力和内存需求拆分到多台节点并行执行即可,效率远高于单进程全量计算。
C++ 实现方案
- 第一步先做任务拆分设计:将整个待枚举的密钥空间按照你可用的节点数量均匀切割,每个节点仅负责计算某一段区间内的密钥。每个节点的进程只需要加载当前负责的密钥区间、密文样本和校验规则,内存占用仅为单进程全量计算的1/N(N为节点数量),算力也可以随节点数线性扩容。
- 第二步选择适配的通信调度框架:
- 轻量场景可以直接用BSD Socket手写主从调度逻辑:Master节点负责维护整体任务进度、给空闲Worker节点分配任务分片、回收校验通过的结果;Worker节点仅负责执行当前分配到的枚举校验任务,命中有效结果后回传给Master即可。
- 不想手写底层通信的话可以直接用成熟的开源框架:高性能计算集群优先用
MPI(消息传递接口,C++原生支持度极高,专门适配并行计算场景);也可以用gRPC、Thrift这类通用RPC框架实现节点间的调度通信。
- 第三步补充容错逻辑:Master节点记录所有任务分片的执行状态,若某个Worker节点失联、任务执行失败,直接将对应分片重新分配给其他空闲节点即可,不会打断整体计算进度。
- 优化建议:如果校验逻辑需要依赖大体积的字典、明文规则库,可以提前将这部分数据预存到所有Worker节点的本地存储,执行任务时直接加载到本地内存,不需要跨节点实时读取,能大幅降低通信开销,提升计算效率。
额外提示
如果是符合标准定义的真·一次性密码本(密钥长度和明文长度完全一致、密钥完全随机、单次使用不复用),暴力破解没有实际意义,只有当OTP存在使用漏洞(比如密钥复用、密钥生成规则弱、密钥空间小于明文空间)时,暴力破解才能得到有效结果,你可以先确认你的破解场景满足可破解前提。
内容的提问来源于stack exchange,提问作者shoham
相关产品推荐
相关产品推荐

