Rev 1282 | Rev 1298 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1282 | Rev 1283 | ||
---|---|---|---|
Line 9... | Line 9... | ||
9 | This value is chosen randomly by the configuration file generator (setup). |
9 | This value is chosen randomly by the configuration file generator (setup). |
10 | 10 | ||
11 | Derivation of secrets and auth keys |
11 | Derivation of secrets and auth keys |
12 | ----------------------------------- |
12 | ----------------------------------- |
13 | 13 | ||
14 | Important: The usage of `OIDplus::baseConfig()->getValue("SERVER_SECRET")` |
14 | The usage of `OIDplus::baseConfig()->getValue("SERVER_SECRET")` |
15 | is deprecated due to security considerations. |
15 | is deprecated due to security considerations. |
16 | 16 | ||
17 | Instead, please always use `OIDplus::authUtils()->makeSecret()` |
17 | Instead, please always use `OIDplus::authUtils()->makeSecret()` |
18 | with a unique `$data` argument (prefer a GUID) |
18 | with a unique `$data` argument (prefer a GUID) |
19 | if you need a secret that is derived from the server secret. |
19 | if you need a secret that is derived from the server secret. |
20 | 20 | ||
21 | If you want to generate an authentication key (e.g. to send via an email), |
21 | If you want to generate an authentication key (e.g. to send via an email), |
22 | use `OIDplus::authUtils()->makeAuthKey()` |
22 | use `OIDplus::authUtils()->makeAuthKey()` |
23 | with a unique `$data` argument (prefer a GUID) |
23 | with a unique `$data` argument (prefer a GUID) |
24 | in combination with `OIDplus::authUtils()->validateAuthKey()`. |
24 | in combination with `OIDplus::authUtils()->validateAuthKey()`. |
25 | This auth key is NOT temporary by default so you need to make sure |
25 | An auth key is usually temporary; therefore `makeAuthKey` encodes a timestamp |
26 | that you encode a timestamp in it. |
- | |
27 | - | ||
28 | Implementation |
- | |
29 | -------------- |
- | |
30 | - | ||
31 | `makeAuthKey(data) = makeSecret(data) = sha3_512_hmac(data, "OIDplus:" + SERVER_SECRET)` |
- | |
32 | - | ||
33 | Currently, the implementation of `makeAuthKey` and `makeSecret` |
- | |
34 | is the same, but you should only use `makeAuthKey` |
- | |
35 | if you combine it with `validateAuthKey`, otherwise, you |
26 | which can be checked by `validateAuthKey` by providing |
36 | should use `makeSecret`. This makes the code easier to understand. |
27 | a validity period in seconds. |
37 | 28 | ||
38 | Where are makeAuthKey and makeSecret being used? |
29 | Where are makeAuthKey and makeSecret being used? |
39 | ------------------------------------------------ |
30 | ------------------------------------------------ |
40 | 31 | ||
41 | System / Core: |
32 | System / Core: |
42 | - Auth content Store (OIDplusAuthContentStoreJWT.class.php): |
33 | - Auth content Store (OIDplusAuthContentStoreJWT.class.php): |
43 | Key to sign JWT tokens (used for Automated AJAX requests, REST API and logins with "Remember me") using PBKDF2+HMAC |
34 | Key to sign JWT tokens (used for Automated AJAX requests, REST API and logins with "Remember me") |
44 | * If a private/public key pair exists: Sign the JWT using that private key. |
35 | * If a private/public key pair exists: Sign the JWT using that private key. |
45 | * Otherwise sign it with: |
36 | * Otherwise sign it using PBKDF2+HMAC: |
46 | `JWT = HS512(hash_pbkdf2("sha512", OIDplus::authUtils()->makeSecret("0be35e52-f4ef-11ed-b67e-3c4a92df8582"), "", 10000, 64/*256bit*/, false))` |
37 | `JWT = HS512(hash_pbkdf2("sha512", OIDplus::authUtils()->makeSecret(["0be35e52-f4ef-11ed-b67e-3c4a92df8582"]), "", 10000, 64/*256bit*/, false))` |
47 | - Session Handler (OIDplusSessionHandler.class.php): |
38 | - Session Handler (OIDplusSessionHandler.class.php): |
48 | Encryption of session contents (regular logins) |
39 | Encryption of session contents (regular logins) |
49 | * if OpenSSL is installed: sha512-pbkdf2 + AES-256-CBC + sha3-512-hmac |
40 | * if OpenSSL is installed: sha512-pbkdf2 + AES-256-CBC + sha3-512-hmac |
50 | * if OpenSSL is not installed: sha3-512-hmac |
41 | * if OpenSSL is not installed: sha3-512-hmac |
51 | * In both cases, the key is `OIDplus::authUtils()->makeSecret("b118abc8-f4ec-11ed-86ca-3c4a92df8582")`. |
42 | * In both cases, the key is `OIDplus::authUtils()->makeSecret(["b118abc8-f4ec-11ed-86ca-3c4a92df8582"])`. |
52 | 43 | ||
53 | Temporary auth keys (sent via email etc.): |
44 | Temporary auth keys (sent via email etc.): |
54 | * used at plugin forgot RA password (public/091): |
45 | * used at plugin forgot RA password (public/091): |
55 | `makeAuthKey("93a16dbe-f4fb-11ed-b67e-3c4a92df8582:" + email + "/" + timestamp)` |
46 | `makeAuthKey(["93a16dbe-f4fb-11ed-b67e-3c4a92df8582", email])` |
56 | * used at plugin ViaThinkSoft FreeOID activation (public/200): |
47 | * used at plugin ViaThinkSoft FreeOID activation (public/200): |
57 | `makeAuthKey("40c87e20-f4fb-11ed-86ca-3c4a92df8582:" + email + "/" + timestamp)` |
48 | `makeAuthKey(["40c87e20-f4fb-11ed-86ca-3c4a92df8582", email])` |
58 | * used at plugin invite RA (ra/092): |
49 | * used at plugin invite RA (ra/092): |
59 | `makeAuthKey("ed840c3e-f4fa-11ed-b67e-3c4a92df8582:" + email + "/" + timestamp)` |
50 | `makeAuthKey(["ed840c3e-f4fa-11ed-b67e-3c4a92df8582", email])` |
60 | * used at plugin change RA email (ra/102): |
51 | * used at plugin change RA email (ra/102): |
61 | `makeAuthKey("5ef24124-f4fb-11ed-b67e-3c4a92df8582:" + old_email + "/" + new_email + "/" + timestamp)` |
52 | `makeAuthKey(["5ef24124-f4fb-11ed-b67e-3c4a92df8582", old_email, new_email])` |
62 | 53 | ||
63 | Plugin OID-IP (public/100): |
54 | Plugin OID-IP (public/100): |
64 | - Authentication token for hidden OIDs = `smallhash(OIDplus::authUtils()->makeSecret("d8f44c7c-f4e9-11ed-86ca-3c4a92df8582:" + id))` |
55 | - Authentication token for hidden OIDs = `smallhash(OIDplus::authUtils()->makeSecret(["d8f44c7c-f4e9-11ed-86ca-3c4a92df8582", id]))` |
65 | 56 | ||
66 | Plugin VNag version check (admin/901): |
57 | Plugin VNag version check (admin/901): |
67 | - Webreader password = `OIDplus::authUtils()->makeSecret("65d9f488-f4eb-11ed-b67e-3c4a92df8582")` |
58 | - Webreader password = `OIDplus::authUtils()->makeSecret(["65d9f488-f4eb-11ed-b67e-3c4a92df8582"])` |
68 | 59 | ||
69 | Plugin RDAP (frdl): |
60 | Plugin RDAP (frdl): |
70 | - `OIDplus::authUtils()->makeSecret("cee75760-f4f8-11ed-b67e-3c4a92df8582")` is used to generate a cache filename |
61 | - `OIDplus::authUtils()->makeSecret(["cee75760-f4f8-11ed-b67e-3c4a92df8582"])` is used to generate a cache filename |
71 | 62 | ||
72 | Plugin VTS Client Challenge Captcha: |
63 | Plugin VTS Client Challenge Captcha: |
73 | - Challenge integrity : `OIDplus::authUtils()->makeAuthKey("797bfc34-f4fa-11ed-86ca-3c4a92df8582:" + challenge)` |
64 | - Challenge integrity : `OIDplus::authUtils()->makeAuthKey(["797bfc34-f4fa-11ed-86ca-3c4a92df8582", challenge])` |
74 | - Cache filename : `"vts_client_challenge_" + OIDplus::authUtils()->makeSecret("461f4a9e-f4fa-11ed-86ca-3c4a92df8582:" + ipTarget + "/" + random) + ".tmp"` |
65 | - Cache filename : `"vts_client_challenge_" + OIDplus::authUtils()->makeSecret(["461f4a9e-f4fa-11ed-86ca-3c4a92df8582", ipTarget, random]) + ".tmp"` |
75 | 66 | ||
76 | GUID Registry |
67 | GUID Registry |
77 | ------------- |
68 | ------------- |
78 | 69 | ||
79 | The "real GUIDs" are documented at the [ViaThinkSoft OIDplus Registration Authority](https://oidplus.viathinksoft.com/oidplus/?goto=guid%3Aoidplus%2FauthRealms). |
70 | The "realm GUIDs" are documented at the [ViaThinkSoft OIDplus Registration Authority](https://oidplus.viathinksoft.com/oidplus/?goto=guid%3Aoidplus%2FauthRealms). |