PHP7 中的 Argon2i - 选择合适的选项

2024-02-05

我应该使用什么值来生成 Argon2i 哈希值以及如何找到我的硬件可以承受的适当设置?

Namely:

memory_cost
time_cost
threads

as:

$options = [
    'memory_cost' => 1<<17,
    'time_cost'   => 4,
    'threads'     => 3,
];

$hash = password_hash('test', PASSWORD_ARGON2I, $options);

PHP 文档中的一个简单脚本 http://php.net/manual/en/function.password-hash.php#example-983用于查找 bcrypt 哈希值的适当成本值。如何将其安装到 Argon2 上?


From: PHP RFC Argon2password_hash https://wiki.php.net/rfc/argon2_password_hash

成本因素

From:

由于 PHP 运行的平台多种多样,成本因素被故意设置得很低,以免在使用默认成本参数时意外耗尽共享或低资源系统上的系统资源。因此,用户应该调整成本因素以匹配他们正在使用的系统。以下列表概述了使用这些默认成本值的各种系统上的哈希性能。

Common Cloud Server 512 MB, 1 Core: 3-5 ms
Common Cloud Server 2 GB, 2 Core, 1-3 ms
512 MB Raspberry Pi Zero: 75-85ms

由于 Argon2 没有任何“坏”值,但是消耗更多的资源被认为比消耗更少的资源更好。鼓励用户调整他们正在开发的平台的成本因素。

Threads

From: Argon2 的建议迭代次数是多少 https://crypto.stackexchange.com/questions/37137/what-is-the-recommended-number-of-iterations-for-argon2

The 氩气纸 https://password-hashing.net/argon2-specs.pdf给出以下过程(解释)来确定应使用的参数:

    1. 计算出您可以使用多少个线程,相应地选择 $h$。
    1. 计算出您可以使用多少内存,相应地选择 $m$。
    1. 确定您可以花费的最大时间 $x$,选择最大的 $t$,以便您的系统和其他参数选择花费的时间少于 $x$。

IE。他们建议您在系统上运行它,并确定与您的内存和处理器时间使用限制相匹配的最大参数。

来自 Argon 2 规格。

(链接在这里 https://password-hashing.net/argon2-specs.pdf)

  • 并行度p确定可以运行多少个独立(但同步)的计算链。它可以采用 1 到 2^24 -1 之间的任何整数值

  • 内存大小m可以是任意整数千字节8p到 2^32 −1。实际块数为m′,即m向下舍入到最接近的倍数4p.

  • 迭代次数t(用于独立于内存大小调整运行时间)可以是 1 到 2^32 -1 之间的任何整数

更多文献

从这里 http://argon2-cffi.readthedocs.io/en/stable/parameters.html

  • 计算出每次调用 Argon2 时可以使用多少个线程(并行性)。他们建议使用两倍于专用于散列密码的核心数量。

  • 计算出每次通话需要多长时间。对于并发用户登录的一项建议是将其保持在 0.5 毫秒以下。

  • 使用您选择的参数测量散列时间。查找在您的计算时间内的 time_cost。如果 time_cost=1 花费的时间太长,请降低 memory_cost。

结论:

因此,从上面的摘录看来,您的目标是时间跨度0.5ms由 PHP 测量microtime就像 BCrypt 的例子一样。 然后就可以设置数量了threads是 CPU 运行的核心数量的两倍,因此 4 核处理器为 8。

然后,您应该能够使用上述两个值运行一系列测试,以找到有效的第三个值内存消耗.

在您的服务器上运行一些测试,看看服务器可以轻松管理什么。 探索如果这个 CLI http://argon2-cffi.readthedocs.io/en/stable/cli.html可以帮助。

按照上面引用中列出的顺序更改三个变量(在Threads),因此调整内存而不是使用大迭代计数。

简而言之,我们无法为您提供“最佳建议”指南,因为这取决于具体规格。你打算在...上运行它

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP7 中的 Argon2i - 选择合适的选项 的相关文章

  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • PHP 异常处理与 C#

    这是一个非常基本的问题 我希望如此 我所做的大部分异常处理都是使用 C 进行的 在 C 中 任何在 try catch 块中出错的代码都会由 catch 代码处理 例如 try int divByZero 45 0 catch Except
  • Laravel 5.4 将json保存到数据库

    帮我将 json 保存到数据库 表字段类型 文本 我有带有强制转换数组的模型 class Salesteam extends Model protected casts team members gt array 我想要像这样 index
  • 使用 PHP 更新 XML 节点

    我有一个 XML 文件 test xml
  • 查明具有特定 ID 的会话是否已过期

    我正在创建一个上传功能 将用户上传的文件存储在服务器上 并以用户的会话 ID 作为名称 现在 我只想将此文件保留在服务器上 直到该会话处于活动状态 所以 我的问题是 如何根据会话 ID 确定会话是活动的还是过期的 以便在后一种情况下我可以安
  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • PHP 电子邮件验证[重复]

    这个问题在这里已经有答案了 For PHP最好的电子邮件验证方法是什么preg NOT ereg因为它是已弃用 删除 I don t需要检查该网站是否存在 这不像最高安全性 我找到了很多方法ereg但它们 显然 不是好的做法 我建议你使用F
  • localhost/live - 通过 HTTP_HOST 检测

    假设我在本地开发并在实时服务器上调试小东西 在我的代码中添加这样的内容是个好主意吗 is local strpos SERVER HTTP HOST localhost false define DEBUG is local 然后在设置内容
  • 在 PHP 中将整数转换为十六进制值

    如何将PHP中第一类中的数字转换为第二类中的数字 是否有内置函数来转换数字 也是我的标题 将整数转换为十六进制值 甚至正确 class Permission const READ 1 const UPDATE 2 const DELETE
  • 当路由不存在时重定向 laravel 4

    我正在使用 laravel 4 当我的项目处于生产模式时 我得到 抱歉 找不到您要查找的页面 当我到达一条不存在的路线时 当我 grep 我的代码时 它在两个地方找到 vendor symfony debug Symfony Compone
  • 如何绕过Access-Control-Allow-Origin?

    我正在一个平台上对我自己的服务器进行ajax调用 他们设置了阻止这些ajax调用的平台 但我需要它从我的服务器获取数据以显示从我的服务器数据库检索到的数据 我的 ajax 脚本正在运行 它可以将数据发送到我的服务器的 php 脚本以允许其处
  • 细胞的 fpdf 对齐

    我正在尝试使用生成 PDFfpdf我有一个小问题 我需要有 2 个单元格 如下所示 Address Line 1 Version Address Line 2 1 0 City 06 05 2011 我尝试过使用MultiCell 但没有运
  • Lumen:无法打开流:.../vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107 中的权限被拒绝

    My OS is ubuntu 16 04 and I am running Lumen 5 5 When I try to run the app in the browser I get an error 500 我在 var log
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • sqlite3和pdo_sqlite有什么区别

    我正在将我的 Web 应用程序从 MySQL 迁移到 SQLite 数据库 我发现有两个 PHP 扩展用于与 sqlite 通信 php sqlite3 dll and php pdo sqlite dll 什么扩展比较好 或者另一个问题
  • PHP date() 和 strtotime() 返回错误的月份 31 日

    我在用着date and strtotime 函数在下拉列表中显示接下来的 3 个月 PHP代码 echo date m Y strtotime 0 months echo date m Y strtotime 1 months echo
  • javascript:完全删除top.location.hash?

    如果我的地址栏中已经有一个哈希值 例如domain com whatever 我打电话 top location hash wathever 被转换为domain com 没有任何内容 是否可以完全删除哈希值 所以没有 left 因为如果我
  • 管理产品页面自定义字段显示在购物车和结账中

    我在产品页面的常规设置选项卡上的 WooCommerce 管理中创建了一个自定义字段 以插入几天的制造时间 我想在购物车和结帐页面上每个产品名称上方显示此自定义字段值 这是我的代码 Insert a Custom Admin Field f
  • Google Drive 服务帐户上传的位置

    我正在尝试使用服务帐户将文件上传到我的 Google 云端硬盘 当我部署此代码时 我不希望用户给予授权 我希望他们上传到我的帐户 我通过 PHP 使用它 下面是我到目前为止的情况 这段代码是基于官方文档给出的例子 当我运行 php 脚本时
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐