On 25.07.2022 at 13:32, Jakub Zelenka wrote:

> On Mon, Jul 25, 2022 at 12:14 PM Go Kudo <zeriyo...@gmail.com> wrote:
>
>> 2022年7月17日(日) 6:33 Tim Düsterhus <t...@bastelstu.be>:
>>
>>> On 7/15/22 17:54, Go Kudo wrote:
>>>> However, there are several challenges to this.
>>>>
>>>> - Increased maintenance costs
>>>> - Requires optimization for CPU architecture
>>>> - Requires familiarity with CSPRNG
>>>>
>>>> PHP already bundles xxHash and appears ready to make this happen.
>>>>
>>>> Also, an appropriate CSPRNG implementation may be able to resolve the
>>>> current complex macro branching.
>>>>
>>>> What do you think about this?
>>>
>>> This would be a strong no from my side. There's all types of failure
>>> modes that decrease the security of the CSPRNG (i.e. making it insecure)
>>> and we really don't want to be the ones to blame if something goes
>>> wrong. And historically many non-kernel CSPRNGs later proved to be
>>> insecure in specific situations.
>>>
>>> I also would assume that for a typical PHP application both of the
>>> following is true:
>>> - The majority of the requests don't need any randomness.
>>> - The majority of the requests that *need* randomness don't need any
>>> significant amount of randomness.
>>> - The majority of the requests that need significant amounts of
>>> randomness are fine with a regular PRNG (e.g. Xoshiro or Pcg).
>>> - The cost of a few getrandom() syscalls is not really measurable
>>> compared to the time spent waiting for the database, file IO or template
>>> rendering.
>>>
>>> Attempting to optimize the speed of the CSPRNG is premature
>>> optimization. That also the reason why I suggested to use the 'Secure'
>>> engine by default in the Randomizer: It's a safe default choice for the
>>> vast majority of users.
>>>
>>> Personally I likely wouldn't have merged the PR in question for the same
>>> reasons. But at least in that case glibc is at fault :-)
>>
>> You are right. Implementing a CSPRNG on your own obviously increases
>> maintenance costs and security risks.
>>
>> However, I still think the overhead of the getrandom syscall in a Linux
>> environment is significant and should be considered.
>
> There is already a good CSPRNG available in OpenSSL which we expose
> with openssl_random_pseudo_bytes (except on Windows which is historical and
> should change)

TIL!  Yes, that should change.

> so for those that are impacted by the syscall overhead, this
> might be the best option considering that most users are using at least
> OpenSSL version 1.1.1 where the new CSPRNG is available.

We cannot, however, rely on any OpenSSL functionality in the core or
ext/standard, since OpenSSL *might* not be available.

--
Christoph M. Becker

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to