Re: PHP 7.4 BC break with openssl_random_pseudo_bytes()

From: Date: Wed, 30 Oct 2019 18:32:32 +0000
Subject: Re: PHP 7.4 BC break with openssl_random_pseudo_bytes()
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-107734@lists.php.net to get a copy of this message
On Mon, 23 Sep 2019, 14:02 Nikita Popov, <nikita.ppv@gmail.com> wrote: > On Mon, Sep 23, 2019 at 2:52 PM Christian Schneider <cschneid@cschneid.com > > > wrote: > > > Hi, > > I just noted (too late in the process, I know) that > > openssl_random_pseudo_bytes(0) now throws an exception. > > > > This breaks code like > > $ivsize = openssl_cipher_iv_length($method); > > $iv = openssl_random_pseudo_bytes($ivsize); > > $data = openssl_encrypt($string, $method, $key, OPENSSL_RAW_DATA, > > $iv); > > if $method is 'aes-256-ecb' because $ivsize is 0. > > > > I do realize that ECB mode ciphers are deprecated but having them throw > an > > exception indirectly via openssl_random_pseudo_bytes() seems a bit > strange, > > even in the context of security. > > > > I checked the RFC > > > > https://wiki.php.net/rfc/improve-openssl-random-pseudo-bytes and it > > doesn't mention this BC break: > > "False-checks on the return value of openssl_random_pseudo_bytes() will > do > > nothing since the function fails closed. Usage of $crypto_strongwill > > generate errors." > > > > While I would have preferred the exception to be thrown only when $ivsize > > is not an integer or less than 0 but I guess this cannot be changed at > the > > RC stage. > > > > I would recommend though that we aim to keep BC breaks to what's > mentioned > > in RFCs. > > > > This was noted during the PR review in: > https://github.com/php/php-src/pull/3649#discussion_r230598754 > Especially > in conjunction with your example, I think we should revert this part an > make openssl_random_pseudo_bytes(0) return "" without exception or warning. > Ideally we'd adjust random_bytes() to do the same. > I agree this should be reverted for 7.4 at least as it's a BC and wasn't really in RFC. It really doesn't matter if it's a good thing or not as it's a BC that we shouldn't do in minor release. Jakub >

« previous php.internals (#107734) next »