From Unofficial BOINC Wiki
The "Leaderboard" sites may show statistics from several BOINC Powered Projects, and may want to show credit for Participants and/or Hosts summed across all the BOINC Powered Projects in which they are a Participant.
So, because Leaderboard sites may show statistics from several BOINC Powered Projects, and some Participants may want to see their Credit summed across all the BOINC Powered Projects in which they are a Participant. This turns out to be a little tricky. When should accounts on different BOINC Powered Projects be considered equivalent? The simplest answer is: when they have the same email address. But BOINC System can't export email addresses (well, it can, but that design could allow the compromise of the e-Mail address and that is the reason that it is not done). And we can't export hashed e-Mail addresses, because spammers could enumerate feasible e-Mail addresses and compare them with the hashed addresses.
 Cross-Project Identification of Hosts
Each Host generates an internal Cross-Project Identifier, which is the MD5 of the concatenation of its domain name, IP address, free disk space, and a time stamp. This is reported to the Projects that to which the Host is attached. The Projects convert it to an external Cross-Project Identifier by hashing it with the owner's email address (this is intended to prevent spoofing). The external ID is exported in statistics files.
 Cross-Project Identification of Participants
Accounts on different BOINC Powered Projects are considered equivalent if they have the same email address (the BOINC Developers had considered other concepts, but they all lead to extreme complexity).
BOINC Powered Projects can't export email addresses in statistics files; email addresses are private. It's also not desirable to export hashed email addresses, because spammers could enumerate feasible email addresses and compare them with the hashed addresses.
To solve these problems the BOINC System uses the following system:
- Each Account is assigned a "Cross-Project Identifier" (CPID) when it's created; it's a long random string.
- When a Scheduling Server replies to an Scheduler Request Message (Scheduler RPC)), it includes the Account's Cross-Project Identifier and hashed e-Mail address.
- The BOINC Manager stores the Cross-Project Identifier and hashed e-Mail address of each Account to which it's attached in the Client State File.
- When the BOINC Daemon sends an Scheduler Request Message to a Scheduling Server, it includes the greatest (in terms of numeric comparison) Cross-Project Identifier from among Projects with the same hashed e-Mail address.
- Note: This method was depreciated at approximately Version 4.3x of the BOINC Client Software. Later Versions pass the oldest Cross-Project Identifier. This prevents the Cross-Project Identifier from changing when adding Projects.
- If the Scheduling Server receives a Cross-Project Identifier different from the one in its BOINC Database, it updates the BOINC Database with the new Cross-Project Identifier.
- User elements in the XML download files include a hash of (email address, Cross-Project Identifier); this "export" Cross-Project Identifier serves as a unique identifier of all accounts with that email address. The last step, hashing with the e-Mail address, prevents people from impersonating other people.
This system provides cross-project identification based on e-Mail address, without publicizing any information from which actual e-Mail addresses could be derived.
- There is a Cross-Project Identifier that is internal to Projects, and a second one that is used to tie together XML data exports. When you are using the Cross-Project Identifier for statistic sites you will have to use the second value which you will have to obtain using information such as your name (or alias if you use one).
- Cross-Project ID
 UCB Source
 Copyright ©
- 2005 University of California
- 2005 Paul D. Buck
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.