Re: [RFC][Discussion] Add PASSWORD_BCRYPT_WRAP
| From: | Rowan Tommins [IMSoP] | Date: | Thu, 12 Nov 2026 22:11:23 +0000 |
| Subject: | Re: [RFC][Discussion] Add PASSWORD_BCRYPT_WRAP | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-133092@lists.php.net to get a copy of this message | ||
Hi Mirco,
On 12/11/2026 20:02, Mirco Babin wrote:
My question is misunderstood. Why does BCRYPT_WRAP not have a very first step 0 that validates that*password* is human typable, valid utf-8 and does not contain control characters?Why would it? Is there some security or usability standard you can point to that suggests that password input be limited in this way?
Why isn't this bugfixed then. So PASSWORD_ARGON2ID will become available out of the box?It is not a "bug" to be "fixed"; it is a decision about what libraries are included in the source tree of PHP, and which are left as optional dependencies. PHP can have Argon2 support via one of three external libraries: libargon2, libsodium, or openssl. Making it available in all builds means including a copy of one of those libraries directly in the source tree.
Also 54 binary output bytes of the prehash-function, would truncate the password space to 54 bytes. More than 54 password-bytes is going to introduce hash-collisions. Assuming the prehash function has no collisions within the 54 byte range. The Bcrypt algorithm truncates the password space beginning at 73 password-bytes to 72 bytes. So even the flawed Bcrypt algorithm is superior to this invented algorithm.This is a completely nonsensical comparison. A standard bcrypt output contains 23 bytes of final hash data; that's "only" 2.5 x 10^55 possible outputs. A 54-byte pre-hash has 1.1 x 10^130 possible values. (Additional comparison: the standard Argon2id output contains 32 bytes of final hash data, for 1.2 x 10^77 possible outputs.) Regards, -- Rowan Tommins [IMSoP]