是加密&&内存使用

问题描述 投票:0回答:1

我们使用 libc 的 crypt(3) 函数中的 yescrypt 来加密和检查 C 编写的应用程序服务器中的凭据。有时 crypt(3) 会失败,因为应用程序从内核 oom-killer 获取 SIGKILL。这是 strace 在这样的时刻显示的内容:

11:24:13.136472 mmap(NULL, 1075838976, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB, -1,
0) = -1 ENOMEM (Cannot allocate memory) <0.000053>
11:24:13.136579 mmap(NULL, 1073766464, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x7fadab8ad000 <0.000016>
11:24:14.607035 +++ killed by SIGKILL +++

为什么 yescrypt 需要这么多内存(~1 GB),这是否可以调节?

libc crypt
1个回答
0
投票

在 yescrypt 社区的帮助下(参见此处:https://www.openwall.com/lists/yescrypt/2024/03/20/2),结果是 crypt_gensalt(3) 的参数“count”在其手册页中解释了错误/错误。它只说“...count 控制散列的 CPU 时间成本;count 的有效范围和 “CPU 时间成本”的确切含义取决于哈希方法,但较大的数字对应于成本更高的哈希值。”它还会以对数以 2 为底的方式影响所使用的内存。值 5 表示 16 MB,而 11 表示 1++ GByte。该值用于创建哈希并存储在哈希中以便稍后检查哈希。

© www.soinside.com 2019 - 2024. All rights reserved.