1

我有一个 python 应用程序,它创建一个子进程,打开一个套接字与之通信,然后在套接字上创建一个 multiprocessing.connection 对象。连接对象使用共享密钥(随机生成)和 hmac 来确保不允许其他进程通过连接进行通信。

在 Linux 上,这可以完美运行。在 Windows 上,我收到错误:

multiprocessing.AuthenticationError: digest received was wrong

密钥是一串随机生成的位,在通过其标准输入发送到子进程之前被腌制:

authkey = ''.join([chr(random.getrandbits(7)) for i in range(20)])

我已经仔细检查了连接两端的密钥是否匹配:

 print "key:", ' '.join([str(ord(x)) for x in authkey])

服务器启动:

 l = multiprocessing.connection.Listener(
         ('localhost', int(port)), authkey=authkey)

..客户端开始于:

 c = multiprocessing.connection.Client(
         ('localhost', int(port)), authkey=authkey)

两个进程都在同一台机器上运行,使用相同版本的 python。

更奇怪的是,我发现如果我修复了密钥(比如 authkey='test'),那么我在第一次运行程序时仍然会收到 AuthenticationError,但在后续运行时不会。

4

1 回答 1

1

解决方案似乎是使用os.urandom生成密钥而不是上面显示的方法。我不知道为什么这会产生任何影响——无论哪种情况,我们都在传递随机字节字符串。从安全的角度来看,该解决方案也更正确,因为 getrandbits 不适合加密使用。

于 2013-01-20T02:54:17.877 回答