0

CCKeyDerivationPBKDF用来在并发环境中生成和验证密码哈希,我想知道它是否是线程安全的。该函数的文档根本没有提到线程安全,所以我目前使用锁是为了安全起见,但如果我不需要,我宁愿不使用锁。

4

2 回答 2

1

在浏览了源代码后,CCKeyDerivationPBKDF()我发现它是“线程不安全的”。虽然代码CCKeyDerivationPBKDF()使用了许多线程安全的库函数(例如:)bzero,但大多数用户定义的函数(例如:)PRF和从这些用户定义的函数调用的底层函数可能是线程不安全的。(例如,由于使用了多个指针和不安全的内存转换,例如 in CCHMac)。我建议除非他们使所有底层函数成为线程安全的,或者有一些机制来改变它有条件地线程安全,坚持你的方法,或者修改commoncrypto代码以使其成为线程安全并使用该代码。

希望能帮助到你。

于 2013-01-18T07:31:21.747 回答
0

在缺乏文档或源代码的情况下,一种选择是构建一个测试应用程序,其中有 10 个线程循环调用 CCKeyDerivationPBKDF,从 10 个不同的参数集中随机选择 10 个已知结果。

每个线程检查调用的结果以确保它是预期的。在这个循环中,每个线程还应该有一个随机时间量的 usleep() 调用(钟形曲线位于每次调用 CCKeyDerivationPBKDF 的时间的 10%),以便尝试尽可能多地交错操作。

您可能希望对其进行调试,以跟踪您能够生成多少并发。使用 10% 的睡眠时间和 10 个线程,您应该能够保持 9 个线程并发。

如果它通过总计 100,000,000 次调用而没有出现错误,我会认为它是线程安全的。当然,您可以运行更长的时间以获得更大的保证。

于 2013-01-16T01:54:30.080 回答