| 1 | = Cross-project user identification = |
| 2 | |
| 3 | Accounts on different projects are considered equivalent |
| 4 | if they have the same email address |
| 5 | (we have considered other concepts, but they all lead to extreme complexity). |
| 6 | |
| 7 | Email addresses must be kept private, |
| 8 | so projects can't export them in statistics files; |
| 9 | It's also not desirable to export hashed email addresses, |
| 10 | because spammers could enumerate feasible email addresses |
| 11 | and compare them with the hashed addresses. |
| 12 | |
| 13 | Instead, BOINC uses the following system: |
| 14 | |
| 15 | * Each account is assigned an 'internal cross-project identifier' (CPID) when it's created; it's a 32-char random string. |
| 16 | * When a scheduling server replies to an RPC, it includes the account's CPID, |
| 17 | its email address hash, and its creation time. |
| 18 | These are stored in the client state file. |
| 19 | * When the BOINC client makes an RPC request to a scheduling server, |
| 20 | it scans the accounts with the same email address, |
| 21 | finds the one with the earliest creation time, |
| 22 | and sends the CPID stored with that account. |
| 23 | * If the scheduling server receives a CPID different |
| 24 | from the one in its database, it updates the database with the new CPID. |
| 25 | * User elements in the XML download files include a hash of (email address, CPID); |
| 26 | this 'external' CPID serves as a unique identifier of all |
| 27 | accounts with that email address. |
| 28 | (The last step, hashing with the email address, |
| 29 | prevents people from impersonating other people). |
| 30 | |
| 31 | This system provides cross-project identification based on email address, |
| 32 | without publicizing information from which email addresses could be derived. |