Re: Adding a simple API for secure password hashing?
| From: | Thomas Hruska | Date: | Thu, 14 Jun 2012 14:19:59 +0000 |
| Subject: | Re: Adding a simple API for secure password hashing? | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-60827@lists.php.net to get a copy of this message | ||
On 6/14/2012 6:11 AM, Anthony Ferrara wrote:
Daniel,This: http://barebonescms.com/documentation/csprng/ Takes a different approach. Generate one or more stored root seeds and then use those seeds to generate as much data as is needed without risking loss of entropy. It also accepts extra entropy sources as input - even weak sources such as an incrementing integer or serialized user-submitted data - to further enhance the output. Adding more random sources of information to PHP is a good thing. If something like what is being discussed is developed, it will merely become one more source for root seed generation. The more the merrier. Good sources of entropy are hard to come by. One thing I would like to recommend is add to the documentation that certain functions are inappropriate for specific use cases and recommend alternative solutions. A lot of people out there think rand() and mt_rand() are suitable for security. Maybe have a specific page in the PHP documentation dedicated to covering random string and number generation and link to that page from various function pages. -- Thomas Hruska CubicleSoft President Barebones CMS is a high-performance, open source content management system for web developers operating in a team environment. An open source CubicleSoft initiative. Your choice of a MIT or LGPL license. http://barebonescms.com/Stas has the right approach, not only should the methods be simplified and platform/algorithm agnostic but have a proper salt built in (there are a few CSPRNG implementations around), I've seen salts used from numbers to md5's to just being skipped altogether.Well, just to be clear, a salt does not need a CSPRNG. All it needs to be is reasonably unique. In fact, I wouldn't make it CS, as that would deplete the available entropy in the system for CSPRNG generation. So in practice, a normal PRNG will suffice. With that said, mt_rand() is not enough. It should be a moderately good PSRNG. It just doesn't need to be CS. If mcrypt is available, DEV_URANDOM would be a good place to get entropy. Or, we could implement a system like I did in https://github.com/ircmaxell/PHP-CryptLib/tree/master/lib/CryptLib/Random that follows RFC4086: http://tools.ietf.org/html/rfc4086#section-5.2 Where it mixes together several sources of weak and moderate strength PRNG...