{"id":258,"date":"2020-09-22T11:35:26","date_gmt":"2020-09-22T09:35:26","guid":{"rendered":"https:\/\/pinpoll-magazine-linux.azurewebsites.net\/?p=258"},"modified":"2023-09-12T15:22:47","modified_gmt":"2023-09-12T13:22:47","slug":"about-the-security-of-online-votings-an-attempt-to-explain","status":"publish","type":"post","link":"https:\/\/magazine.pinpoll.com\/en\/about-the-security-of-online-votings-an-attempt-to-explain\/","title":{"rendered":"About the Security of Online Votings. An Attempt to Explain."},"content":{"rendered":"<p>We hear the following questions almost every day:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\"Is it possible to cheat when voting on Pinpoll?\"<\/em><\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\"How do you make sure that one can only vote once?\"<\/em><\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\"One answer of my poll received multiple votes within a short period of time - how's that even possible?\"<\/em><\/p>\n<\/blockquote>\n\n\n\n<p>The short answer to this: A secure, anonymous online voting is a perfect example of an <a href=\"https:\/\/dictionary.cambridge.org\/dictionary\/english\/oxymoron\" target=\"_blank\" rel=\"noreferrer noopener\">Oxymoron<\/a> - \u201csecure\u201d and \u201canonymous\u201d are mutually exclusive by definition.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">In the News<\/h3>\n\n\n\n<p>We are regularly confronted with the fact that people call on others to manipulate the online voting of our customers in <a href=\"https:\/\/twitter.com\/pkreissel\/status\/1263434103820627968\" target=\"_blank\" rel=\"noreferrer noopener\">Social Media<\/a>. Not to influence the result in their favour, but rather to prove that anonymous online voting is not suitable for establishing a representative opinion. Some even offer <a href=\"https:\/\/github.com\/pkreissel\/pinpoll-manipulation\/blob\/master\/script.py\" target=\"_blank\" rel=\"noreferrer noopener\">programs<\/a> designed to facilitate manipulation. To our colleagues at Opinary, they even dedicated an <a href=\"https:\/\/uebermedien.de\/33050\/das-heikle-geschaeft-mit-den-online-umfragen\/\" target=\"_blank\" rel=\"noreferrer noopener\">article<\/a> (available in German language only).<\/p>\n\n\n\n<p>Folks, no one ever claimed it was a representative voting. People just love to give their opinion and see what others think. Every result should be reflected accordingly and that's it.<\/p>\n\n\n\n<p>Then there are those who explain to us with little technical knowledge how poorly our fraud prevention was programmed. \"Why don't you just allow one vote per IP address?\" Um, no, that's just not how it works in the age of large offices and free VPNs. This group of people also likes to send us videos demonstrating for minutes how they change their IP address, delete their cookies and cast another vote. That's amusing  in many ways. Don't you have other things to do? And do you really believe that every vote counts just because we show a voting animation?<\/p>\n\n\n\n<p>And finally, another group of people joins in: the \u201cmature and self-determined citizens\u201d. The results of each and every poll is questioned, especially when it comes to Corona, vaccinations or restrictions on \u201cpersonal freedom\u201d. These people even call us and insult our crew on the phone. They threaten us with \"going public\u201d in tabloids, in case we don't do our job. Well right, we could simply limit the voting by IP address \ud83d\ude09<\/p>\n\n\n\n<p>This brings us to the core of the problem: These three groups of people would also complain if we tried to prevent manipulation using all technically means possible. Why? Because this could only be done by weakening data protection to a large extent.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Data Protection vs. Fraud Prevention<\/h3>\n\n\n\n<p>There is a good reason for the requirement of personal legitimation in public elections: only if I know who has cast their vote already can I prevent that person from voting again. In our polls, however, there is no \u201crequirement for identification\u201d. We must therefore find other ways to remember who has voted already. This memory can be simulated, for example, by setting a cookie. Data protection is also guaranteed, since the user consents to the setting of the cookie, which is technically necessary in this case and not used for tracking. Alone, it is easy to delete a cookie in order to be able to vote again. But who's the bad guy now: the provider of a voting solution, who complies to data protection laws, or the participant, who deliberately manipulates the poll?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fingerprinting<\/h3>\n\n\n\n<p>To prevent manipulation in the first place, we used fingerprinting technology until a few months ago. A \u201cfingerprint\u201d was created, encrypted and stored in our database, which is unique for each browser. Of course, this can also be generated over and over again by a bot. However, that requires significantly more technical knowledge compared to deleting a cookie.<\/p>\n\n\n\n<p>However, this method had a serious disadvantage: Firefox and its service provider <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/disconnectme\" target=\"_blank\">Disconnect<\/a> blocked Pinpoll because we used fingerprinting and it was assumed that this was done for tracking reasons, although it was purely done for fraud prevention. We were overwhelmed by complaints, both from customers and users, as it was no longer possible to vote in Firefox. And that proves the dilemma: On the one hand, people want to participate in the voting. On the other hand, they want to remain anonymous. After a lot of back and forth, we decided to forego fingerprinting in the interests of data protection, thus preserving the anonymity of the participants and allowing people to vote again in Firefox. We shouldn't \u201cpunish\u201d 99.99% of the people with measures that serve to combat the remaining 0.01%.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>Ultimately, the following situation emerged: If our customers do not activate any additional mechanisms (see next section), then the one answer captures the most votes, whose supporters take the trouble to vote as often as possible. To do so, you invest a lot of your personal time in order to demonstrate your \u201cstronger\u201d support for a certain answer.<\/p>\n\n\n\n<p>The same effect also occurs when a large fan base stirs the drum for a particular answer. It is not the \u201cbest\u201d option winning, but the number of votes. For awards and voting contest, we therefore recommend to combine the final results of an audience and a jury voting, weighted according to priority.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Six Suggestions to Increase Security<\/h3>\n\n\n\n<p>In order to make online polls as secure and fair as possible besides meeting the high demands on data protection of the participants - especially if there's prizes involved - we offer our customers several options with various levels of security and pricing:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li><strong>SMS Verification<\/strong><br>In order for a vote to count, it must be confirmed using a pin code that is sent via SMS.<br><br>+ highest level of protection against manual fraud and against bots<br>~ requires activation of our SMS verification in the dashboard.<br>- adds additional costs<br><br><\/li>\n\n\n\n<li><strong>Geofencing<\/strong><br>For a vote to count, it must be cast within a specific country. The list of allowed countries is provided by the customer, e.g., only US + CA + UK.<br><br>+ cheap<br>~ medium protection against manual fraud and against bots<br><br><\/li>\n\n\n\n<li><strong>Google&nbsp;reCaptcha&nbsp;v2\/v3<\/strong><br>In order for the vote to count, a puzzle has to be solved with reCaptcha v2. With reCaptcha v3, bot detection takes place in the background without any interruption of the user experience (e.g., based upon mouse movements etc.).<br><br>~ medium protection against bots, only<br>- poor user experience with reCaptcha v2<br>- requires clarification of data protection aspects with a third party (Google)<br><br><\/li>\n\n\n\n<li><strong>Request Throttling by IP<\/strong><br>Within a certain period of time, we only allow a certain number of votes per IP address (well, yes \ud83d\ude09 ).<br><br>+ active by default<br>~ medium protection against manual fraud and against bots<br><br><\/li>\n\n\n\n<li><strong>Later Announcement of the Winner<br><\/strong>The current result is initially hidden and the participant's email address is requested. Votes only count if a valid email address is given. The result will be announced after evaluating the email addresses.<br><br>+ high level of protection<br>+ low costs<br>- increased effort at the customer's end<br><br><\/li>\n\n\n\n<li><strong>Shuffle of Questions and Answers<\/strong><br>Bots are trained to repeatedly execute the same command. However, if the questions and answers are shuffled around each time they are called, it makes it harder to manipulate specific answer choices, at least answer choices, at least for click bots and humans who want to manually vote over and over again.<br><br>+ high protection against click bots<br>~ medium protection against manipulation by humans<br>- low protection against API bots<br><br>Only a small addition in the code is necessary for this:\n<ul class=\"wp-block-list\">\n<li><strong>Quiz:<\/strong> &lt;div data-pinpoll-id=&quot;&ldquo;xxxxxx&ldquo;&quot; data-mode=&quot;&ldquo;quiz&ldquo;&nbsp;random-questions=&ldquo;true&ldquo;&quot; random-answers=&quot;&ldquo;true&ldquo;&quot;&gt;&lt;\/div&gt;<\/li>\n\n\n\n<li><strong>Poll:<\/strong> (mit mehr als 1 Frage und mehr als 2 Antworten) &lt;div data-pinpoll-id=&quot;&ldquo;xxxxxx&ldquo;&quot; data-mode=&quot;&ldquo;poll&ldquo;&nbsp;random-answers&nbsp;random-questions&quot;&gt;&lt;\/div&gt;<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>These mechanisms can of course be combined as required, which increases the level of protection at the expense of the user experience.<\/p>\n\n\n\n<p>Upon request, we may also do a comprehensive audit at the end of a voting, in order to identify patterns that suggest fraud. Invalid votes can thus be corrected afterwards. This possibility of correction should be communicated to all participants in advance, if possible. In general, we recommend communicating strict terms for voting.<\/p>\n\n\n\n<p>Our customer Falstaff demonstrates this just perfectly with the following voting contest (website in German language, only): <a href=\"https:\/\/www.falstaff.com\/at\/news\/voting-stimmen-sie-jetzt-fuer-ihr-liebstes-ausflugs-und-panoramalokal-in-oesterreich-ab\">https:\/\/www.falstaff.com\/at\/news\/voting-stimmen-sie-jetzt-fuer-ihr-liebstes-ausflugs-und-panoramalokal-in-oesterreich-ab<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Die folgenden Fragen h\u00f6ren wir fast t\u00e4glich: \u201eKann man bei Abstimmungen von Pinpoll betr\u00fcgen?\u201c \u201eWie stellt ihr sicher, dass man nur einmal abstimmen kann?\u201c \u201eBei meiner Abstimmung hat eine Antwort innerhalb kurzer Zeit viele Stimmen bekommen \u2013 wie kann das sein?\u201c Die kurze Antwort darauf: Ein sicheres, anonymes Online-Voting ist ein Paradebeispiel f\u00fcr ein Oxymoron [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":260,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-258","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wissenswertes"],"_links":{"self":[{"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/posts\/258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/comments?post=258"}],"version-history":[{"count":40,"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/posts\/258\/revisions"}],"predecessor-version":[{"id":1276,"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/posts\/258\/revisions\/1276"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/media\/260"}],"wp:attachment":[{"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/media?parent=258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/categories?post=258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/magazine.pinpoll.com\/en\/wp-json\/wp\/v2\/tags?post=258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}