[dev] [commits] Horde branch master updated. 0ab877c762ed591254793fdeb8840a27087b0c5e
Jan Schneider
jan at horde.org
Fri Mar 14 10:57:49 UTC 2014
Zitat von Michael M Slusarz <slusarz at horde.org>:
> Quoting Michael M Slusarz <slusarz at horde.org>:
>
>> Quoting Jan Schneider <jan at horde.org>:
>>
>>> Zitat von Michael M Slusarz <slusarz at horde.org>:
>>>
>>>> Quoting Jan Schneider <jan at horde.org>:
>>>>
>>>>> Zitat von Michael M Slusarz <slusarz at horde.org>:
>>>>>
>>>>>> Quoting Michael M Slusarz <slusarz at horde.org>:
>>>>>>
>>>>>>> commit 2d91444b8cb4a63a67355fcd3eb28af6b497b4c0
>>>>>>> Author: Michael M Slusarz <slusarz at horde.org>
>>>>>>> Date: Wed Mar 12 02:27:59 2014 -0600
>>>>>>>
>>>>>>> Another place to change hash algorithm
>>>>>>>
>>>>>>> framework/Imap_Client/lib/Horde/Imap/Client/Base.php | 5 ++++-
>>>>>>> 1 files changed, 4 insertions(+), 1 deletions(-)
>>>>>>>
>>>>>>> http://github.com/horde/horde/commit/2d91444b8cb4a63a67355fcd3eb28af6b497b4c0
>>>>>>> http://git.horde.org/horde-git/-/commit/2d91444b8cb4a63a67355fcd3eb28af6b497b4c0
>>>>>>
>>>>>> I have mentioned this before in commit messages ... but MD5 has
>>>>>> been proven to be inadequate for hashing purposes due to
>>>>>> collision issues.
>>>>>>
>>>>>> See, e.g.:
>>>>>>
>>>>>> http://www.mscs.dal.ca/~selinger/md5collision/
>>>>>>
>>>>>> I've personally changed code to use either SHA-1 (unfortunately
>>>>>> much slower than MD5, and larger output, but collision
>>>>>> resistant and should always be available in PHP) or FNV-1(32
>>>>>> bit) (only available on PHP 5.4+, faster than MD5, designed
>>>>>> specifically as non-crpytographic hash, low collision rate).
>>>>>>
>>>>>> Would be better to use FNV-1a than FNV-1, but due to oversight
>>>>>> this was left out of hash() and my patch to add won't show up
>>>>>> until PHP 5.6. Even better would be xxhash, but this would
>>>>>> require the installation of a PHP module.
>>>>>
>>>>> We should wrap and abstract this into a Horde_Util method, so
>>>>> the best hashing method available will always be used.
>>>>
>>>> Sure, but what is the use-case?
>>>
>>> All the places where you already added a PHP version check.
>>
>> This doesn't address the 2nd issue below (and doesn't address the
>> 1st issue either if you are not upgrading PHP major versions).
>>
>> So still not seeing the use-case.
>
> To elaborate: still not seeing the use-case for a generic
> "best-available" hashing class. Simply because there are a bunch of
> variables -- length, cryptographic-strength, existing hash type --
> that go into this determination that are not easily abstracted.
>
> Maybe if you had a more elaborate Base class/driver system that took
> into account hash length and/or current hash preference. But having
> a generic hash method that you pass in a string and get a value out
> is not useful IMHO. And at this point, the overhead is destroying
> the usefulness.
>
> Maybe a method that lists acceptable hash formats by key size would
> be useful. But in the end, the calling code still needs to
> explicitly make decisions about its hashing use case.
>
> Compare this with Horde_Pack where the output string is ALWAYS
> useable (at least if you don't remove PHP features) since it
> contains the compression/serialization format embedded in the
> output, and the output is not expected to conform to a given length.
Comparison with Horde_Pack is actually a good idea.
Obviously such a hashing method/class cannot be used where hashes must
persist and being recreated/rechecked on a regular basis. In any other
cases, like cache keys, the worst can happen if the hashing method
changes, is that a cache is invalidated and needs to be propagated
again. For in-session hashes, worst case is users having to
re-authenticate. Both is true if Horde_Pack is using a different
method too, as long as Horde_Pack is used under such circumstances at
all. Storing the pack method doesn't help if the packing extension is
removed for some reason.
Length shouldn't be a problem either as client has to intentionally
opt into using this hash method and can adapt storage fields
accordingly.
I'm not strongly advocating for creating such a method, but seeing a
lot of identical or similar PHP version comparisons sounds like
screaming for some abstraction/shortcut. Just thinking.
--
Jan Schneider
The Horde Project
http://www.horde.org/
https://www.facebook.com/hordeproject
More information about the dev
mailing list