I am about the start working with my degree project, which is related to Secure Questionnaires. I am currently doing research about how to develop a web based system which requires the users to login to authenticate so that every user can submit feedback once but at the same time the feedback is anonymous.

This solution is very similar to the electronic voting scenario.

Are there any JavaScript frameworks which can be applied for this scenario so that the user can get a token upon authentication which cannot be traced back to their feedback? or would I be better off implementing a solution based on the algorithm of any existing solutions?

  • It is the exact same problem as an electronic voting scenario, and it's equally impossible to have both security and anonymity. – Philipp Jan 30 '16 at 22:48

Your question is very general and as far as I understand, nothing more than a regular authentication plus anonymization of the data.

It is definitely possible to ensure non repudiation and anonymity by pseudonymization. What you refer to is a regular access control system which is included in most common frameworks. In case you need a more enterprise solution, you can implement SSO with Kerberos, Sesame or Diameter. But for authentication and user management, any framework will do. When a user submits his feedback, you simply strip the user data and pool it with other results in a database.

  • Thanks for your answer, I will read about how I can use pseudonymizationfor anonymity. Regarding the access control part, yes for simply logging in as a user, I agree with you, what I had in mind is more of a framework which handles authentication in a way of some type of token and linking the feedback to that token which is untraceable back to the user. Since by simply logging in and submitting feedback, although you strip the user data, most probably through time logs, you may be able to trace back to the user. – Ryan Sammut Jan 30 '16 at 23:26
  • Yeah as you may have noticed, it's impossible to give the user a token and ALSO not being able to identify him (thus keeping him anonymous). BUT you can give the user a token to authenticate and after he authenticates, you can simply store all data he inputs in a database without saving his identity. – AdHominem Jan 30 '16 at 23:29
  • but what if I need to make sure that a user has submitted feedback? I would still need to update or insert a row within the database saying ryan@myemail.com submitted feedback for example, even though I would not link his submission to the feedback. – Ryan Sammut Jan 31 '16 at 18:16
  • Of course you can have a separate database containing ids and whether this user has already submitted. You just need to make sure this is not linked to the feedback itself. – AdHominem Jan 31 '16 at 22:26
  1. Generate Key - 64+ Characters
  2. Email Key
  3. Hash the key using a pre-entered 4+ Digit Pin
  4. store that hash in a database table with 2 fields the hash and a field to say
  5. if the key has been tuurned in.
  6. User clicks the link (www.website.com/link.php?KEY={KEY})
  7. Request the user enter a pin they assigned previously then hash the key along
  8. with a provided PIN in javascript.
  9. Redirect to www.website.com/linkb.php?HASH={HASH}

-- At this point --

Hash can only be recovered if you know the salt (The pin) AND the KEY. One was email, one was set by the user. 

KEY is emailed so the email administrator would have this

PIN + HASH are stored in a database so the DBA has this. But they have no idea what goes to what. 
  1. The PHP page marks the HASH as used and generates a new KEY

  2. Request the user answer a CAPTCHA

  3. then using javascipt send an AJAX request to a PHP Page containing the Hashed

  4. key using the CAPTCHA answer as the SALT and have it store it in another database.

  5. Store the new HASH in a cookie as well

  6. That AJAX request will pull down the form, have the user fill it out. THe user hits submit, the form gets sent the cookie gets read.

  7. The PHP Page writes to a file.

  8. A cronjob marks the hashes in that file as used, this runs every 1 second. The cron then updates the timestamp on the file.

  9. Delete Cookie data.

  • I'm not sure what you are trying to do. The question is about JS frameworks and existing algorithms. – Neil Smithline Jan 31 '16 at 17:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.