CRM_Core_Key - Strengthen signature algorithm
authorTim Otten <totten@civicrm.org>
Mon, 6 Apr 2020 08:07:12 +0000 (01:07 -0700)
committerSeamus Lee <seamuslee001@gmail.com>
Wed, 19 Aug 2020 06:16:57 +0000 (16:16 +1000)
commit8cc79cb2b40001d539583e8c381c23a16e898fb0
tree586d95a5fe867ba99060bb1490b1b398fed77c37
parentadb0a2e204cdab4b4c97de46cf8d9bbdec8493e3
CRM_Core_Key - Strengthen signature algorithm

This alters the qfKey signature algorithm, with a few aims:

1.  If someone wants to perform a brute-force to figure the per-session
    private-key, we want it go slow.  Therefore, use a slower hash (ie
    HMAC-SHA256 instead of MD5).

2.  If someone performs a timing attack aimed at figuring a passable qfKey,
    the execution-time for `validate()` should not provide any hints.

3.  If someone finds a way to manipulate one of the constituent parts
    ($sessionID, $name, $privateKey), we want it to be hard to create a
    collsion. So... (a) Use HMAC instead of a vanilla hash. (b) Use delimiters
    between the data sections ($sessionID, $name).
CRM/Core/Key.php