-
Notifications
You must be signed in to change notification settings - Fork 445
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proof of UserID ownership using public key cryptography #2118
Comments
Mirrored this issue on steemit for more attention/input. It was identified that I used incorrect terminology (sign/verify private key signed message, not decryption of private key encrypted data) - I'll need to review how the original message & signed message will be displayed to the user. Edit: I've updated the original post - see the 'issue changelog' for more info. |
I've been working on this the last couple days and have now submitted a pull request: #2134 There's a row "UserID auth | Generate signature" under 'account keys' in the user's account page now, it links to a dedicated page which requires the user inputs a message & is returned an xml file download containing:
|
Weak authenticators could potentially be used for this purpose. We'd need to add an RPC for validating a weak auth. |
Hey David,
Do you mean signing a message using the weak authenticator?
If you mean just using the weak authenticator for proof of account ownership, then anyone could extract the advertised weak auth from public system A and fraudulently claim the account's ownership on public system B, or rebroadcast on system A if the original registration is invalidated. The authentication proof needs to be public so that peers can verify account ownership.
Fair enough you can change your password to change the weak auth, but we could see reoccurring short term account ownership theft attempts (especially against users with significant compute power).
Likewise, given that account managers (and pools) hold these weak auth keys it could place additional risk on their servers storing now important information.
An few advantages of using openssl public key cryptography:
* Since the external system can verify a registration with the projects public key, there is no need to interact with the project server to prove ownership (reduced server load & no new api).
* Replay protection both within and across external public systems - The project signs a message which contains the UserID and an external system message/key (for two way handshake). If you rebroadcast within a system you cannot change the key (thus you cannot steal ownership), if you rebroadcast a registration across external systems the key won't match thus the account ownership claim is invalid.
* Openssl is a standard library within most operating systems, it's part of the BOINC server environment and it'd be trivial to perform hash verification within external systems.
* Opting out of this functionality could be as simple as deleting the 2 php files (and the hyperlink). Ideally it could be an optional build flag, however my past attempt at this (when working on absolute/relative
hyperlinks) was not successful.
A downside of the openssl route is that an additional openssl key pair must be generated, and the public key made downloadable.
Currently the PR is in a near-production state and just needs peer reviewed. I've additionally helped uplift the docker container's openssl version as a result of this undertaking.
Further steps to harden the projects from abuse could be to require email verification to approve issuing a new hash. Marius began working on improving the password recovery mechanism (not using the account key) which could be extended to critical profile functionality (something I'll help with when I've got some free time between my studies hopefully).
Best regards,
CM.
.
|
I've created a test server with the latest pull request implemented: I'd greatly appreciate trying out the PR's functionality, following the below instructions. Note: No SSL implemented, do NOT use username/password credentials you use elsewhere (use garbage test username/password). How to test:
You have full permission to try and break/hack this specific proposed feature. I look forwards to any suggestions/issues. Cheers 👍 |
Anyone had any success/failure using the test server? Any suggestions for change? |
Transparency/Background
Purpose
To prove within any external system that you are the owner of an UserID for an individual BOINC project, without storing external system data within the BOINC project's servers.
Github links
Proposed steps within BOINC
Proposed use within external system
Pre-req: External system downloads the public-keys (used solely for this function, not the existing keys) from each of the involved projects.
Advantages over a single user-data field
It's more difficult for an attacker to claim external system rewards if a MinRAC and Email Verification is required. Offsets the risk of account compromise on a large scale for the purpose of claiming rewards (concern raised within the workshop).
If a project wishes to cut off external systems from rewarding new users they can remove the public key from the scrape-able location, however an external system may cache the keys which would enable all currently registered users to continue earning rewards. If at any point a project administrator/owner doesn't want their volunteer userbase rewarded they should contact representatives of the external systems for streamlined removal (not a problem on the GRC network).
An upside of using UserID over CPID is that external system functionality wouldn't be interrupted by a CPID change (either accidental or malicious). A disadvantage of UserID is that each user will need to advertise a registration operation for each individual project (an external system's burden, not boinc's problem).
If an UserID registration is ever stolen on an external system, or if a hacker breaks into their account and issues a new registration transaction, the user just needs to log back in (change their password), generate a new message and advertise a new beacon. No more need for a centralized entity responsible for maintaining the registered userbase (improved decentralization).
Affected code
Issue changelog
Thoughts?
Any suggestions/constructive-criticism would be greatly appreciated, thus far I have not begun to implement this however I don't believe it will be that difficult.
Suggestions for alternatives to openssl? (Related article)
The text was updated successfully, but these errors were encountered: