Mag het mijnen van cryptomunten online advertenties vervangen?

Intrigerende ontwikkeling las ik bij Dutch Cowboys: het plaatsen van een crypto-munt mijner op een website die de processor van jouw computer gebruikt om die digitale valuta te genereren. Dit ter vervanging van de klassieke advertentie, waar immers geen cent meer mee verdiend wordt omdat iedereen adblockers heeft. Het idee is niet helemaal nieuw maar werd nu vooral stiekem toegepast. Zou je het ook legaal en open kunnen doen, zeg maar een mijnmuur “Geef toestemming voor cryptomuntmining of de site wordt ontoegankelijk”?

Cryptomunten zoals bitcoin werken zonder centrale autoriteit. In plaats daarvan worden transacties gedecentraliseerd gecontroleerd, en daarvoor zijn complexe berekeningen nodig. Om mensen te stimuleren daaraan mee te werken, word je beloond wanneer je computercapaciteit daarvoor beschikbaar stelt: na voldoende te hebben gerekend, krijg je een gratis nieuwe munt. Dit proces wordt ook wel mining oftewel mijnen of delven genoemd.

Het is technisch mogelijk (maar niet superefficiënt) om software voor dergelijk mining in Javascript uit te voeren, dat dan via een website kan worden verspreid zonder dat mensen apart software moeten downloaden en installeren. Dat biedt dus mogelijkheden om dit bij bezoekers van je site te doen, en daar komt dus het idee vandaan uit de openingsalinea: je moet deze software laten draaien (en mij de gedolven munten geven) anders mag je niet op mijn site.

Mag dat? In principe ja. Het is jouw site, en als jij rare eisen wilt stellen aan de toegang dan is dat jouw beslissing. Omdat het gaat om het installeren van software, is hierop de cookiewet van toepassing. Die eist dat er toestemming wordt gegeven voordat dit programma mag worden losgelaten. Er wordt immers informatie (een script) opgeslagen op de harde schijf van de gebruiker, al is het maar de browsercache.

Uitzondering op die toestemmingsplicht is wanneer de informatie functioneel relevant is, oftewel nodig voor het goed werken van de site. Daarmee zijn normaal Javascripts te rechtvaardigen, maar specifiek hier zie ik dat niet: dit script is niet strikt nodig om de site goed te kunnen laten werken. Zonder toestemming zie ik dit dus niet werken.

Een cookiewall dus – een cryptomuntminingwall. Kan, maar dan kom ik bij een ander issue. Een advertentie is irritant maar mijn computer krijgt er in principe geen last van (malware-injecties daargelaten). Maar het delven van cryptomunten kan een zware belasting voor je computer zijn, en dat zou in ieder geval in theorie tot storingen of zelfs hardwareschade kunnen leiden. Hoewel ik me moeilijk kan voorstellen dat dat ook zou spelen bij een Javascript-gebaseerde delver, maar daar weten jullie denk ik meer van dan ik.

Arnoud

43 reacties

  1. Ik vind dit eigenlijk wel een fijne ontwikkeling. Ik gebruik zelf een adblocker, maar als in plaats daarvan websites een stukje van mijn computer zouden gebruiken om BitCoins e.d. uit te rekenen, zou ik daar geen problemen mee hebben. Moeten ze niet mining én ads gaan draaien, maar daar heb ik mijn adblocker al voor. Als het er dan op neerkomt dat mijn adblocker ook de miner ondermijnt (pun intended), dan is dat maar zo.

    Volgens mij zijn BlockChains echter voor nog meer te gebruiken dan alleen cryptomunten, en misschien kost dat ook rekenkracht, dus dit kan best een brede markt zijn, toch?

    1. Helaas is het een totaal oneconomisch model, en eerlijk gezegd verbaast het me dat dit idee 5 jaar later nog steeds de ronde doet. Er zijn twee grote problemen:

      1) Het verbruikt stroom om de berekeningen uit te voeren. Vanwege de overhead die erbij komt kijken betaal je vele malen meer aan verhoogde elektriciteitskosten dan de site-eigenaar ontvangt in inkomsten.

      2) Je hebt maar 1 processor, maar wel heel veel sites open. Oftewel: des te meer sites deze techniek gaan gebruiken, des te meer partijen een stukje van de taart willen hebben, en des te harder de inkomsten voor iedereen teruglopen.

      Het klinkt heel leuk op papier als je er niet te hard over nadenkt, maar economisch gezien zijn deze miners onzin en totaal onwenselijk.

      1. Dat het niet uit kan voor jou (een ASIC draaien is natuurlijk efficienter, maar dat wil je eigenlijk ook al niet meer in Nederland doen) maakt de site-eigenaar natuurlijk maar weinig uit. Die heeft gratis (vele) kleine beetjes rekenkracht.

      2. Volgens mij is kosten voor de gebruiker van de website nooit een issue voor de site-eigenaar. De advertenties moeten ook gedownload worden en die gaan nu ook uit je databundel (en vroeger tikken op je inbelverbinding). Daar klaagt niemand over. Het grootste probleem voor gebruikers is dat reclame als irritant wordt ervaren.

        Ten eerste hebben de meeste mensen meerdere processoren, die ook nog eens niet full-time bezig zijn tijdens het surfen. Als dit soort berekenen zou worden georganiseerd door Google (via Google Ads bijvoorbeeld), bereik je een hoop mensen die allemaal een beetje meerekenen. Niet hun maximale vermogen hoeft te worden aangesproken, je wil sowieso niet dat gebruikers een duidelijke performance-drop van hun computer merken als ze aan het surfen zijn. Als er efficiëntere methoden zijn dan Javascript die je op je website kunt draaien, is dat natuurlijk beter, maar goed.

        Voor gebruikers is het natuurlijk ideaal als alles gratis is, en adblockers zorgen al dat je geen last hebt van advertenties tijdens het surfen, maar als we het hebben over verdienmodellen op een website, zie ik niet een duidelijk verschil dat dit kwalijker maakt dan advertenties draaien. Er zijn voor- en nadelen voor beiden en het is een beetje wat je voorkeur geniet.

        Ik zou me zelfs iets kunnen voorstellen dat je op je google-account kunt instellen of je ads wil of blockchain-calculaties als je een website bezoekt aangesloten bij Google Ads. En misschien hebben we het dan over mensen die de nieuwe app “ChainBreaker” gaan gebruiken of zo.

        1. Tuurlijk klagen er wel mensen over het extra dataverbruik. Dat is een van de grootste argumenten om op je mobiel een adblocker te installeren. Op je vaste pc is ongeveer hetzelfde argument, maar dan voor snellere laadtijden. Toen bij mij een keer mijn adblocker uitviel, merkte ik meteen dat ik langer moest wachten tot sites waren geladen.

          En het grote probleem hier is dat wanneer je processor niks doet, hij minder stroom verbruikt. Dus door dit soort grappen gaat je stroomrekening omhoog, en wel met een factor tig van hoeveel de site-eigenaar er mee verdient. Ik word er echt niet blij van wanneer ik een site bezoek en de blower op mijn cup ineens gaat blazen…

          En natuurlijk kan het wel uit. Mijn adblocker kan vanalles blokkeren, dus ook blockchain-javascript. Er hoeft alleen iemand uit te vissen welke stukjes javascript die berekeningen doen en het in een adblocker-blacklist te zetten.

    1. De wet spreekt van opslaan of uitlezen. Een Javascript dat in de cache van mijn browser komt, staat dus op mijn opslagmedium. Daarmee is aan de wet voldaan. Of er nu een installatie nodig is of niet, doet daarbij niet ter zake.

      Het onderscheid is of het noodzakelijke functionaliteit is. Een Javascript dat je input valideert, is redelijkerwijs noodzakelijk. Een script dat bitcoins minet, is niet nodig voor de meeste websites.

      1. Een Javascript dat in de cache van mijn browser komt, staat dus op mijn opslagmedium. Daarmee is aan de wet voldaan.

        Dus alles wat in de browser cache komt (kortom, alles), daarop is de cookiewet van toepassing? Dit kan ik me moeilijk voorstellen.

        Het onderscheid is of het noodzakelijke functionaliteit is.

        Wat als het noodzakelijk is om het verdienmodel, ofwel de transactie gebruik – bijdrage, waarmee de gebruiker op de één of andere manier akkoordgaat (‘crypto wall’), te implementeren?

        PS: Ik ben geen voorstander van dit idee en ambieer het ook niet.

      2. Het onderscheid is of het noodzakelijke functionaliteit is. Een Javascript dat je input valideert, is redelijkerwijs noodzakelijk. Een script dat bitcoins minet, is niet nodig voor de meeste websites.

        Een script dat advertenties toont (die potentieel ook je PC kunnen laten vast lopen bij een slechte implementatie) is ook niet perse nodig voor het functioneren van een website en toch krijg ik die zonder enige cookiewall binnen op nu.nl.

        Waarom mag een nu.nl wel zo handelen, maar krijgen andere sites die dat doen een tik op de vingers van de ACM?

        1. Ik twijfel daar ook over, maar zou zeggen dat naar verkeersopvatting een advertentiebanner (met javascript) wordt gezien als een deel van de gevraagde content, terwijl een cryptomuntminingscript dat niet is. Een hard criterium kan ik niet formuleren, maar als we gewoon vínden dat de een wel en de ander niet eronder valt, dan is dat hoe het recht uitpakt.

  2. Dit is natuurlijk een dramatisch slechte ontwikkeling. Crypto mining bestaat vooral het verspillen van enorme hoeveelheden energie om cryptomunten te verwerven. Bij het minen in een browser kan de energieverspilling verspilling wel tien keer hoger dan zijn bij efficiente cryptmining racks. In essentie gaan door dit soort idiote plannen dan honderden miljoen mensen met hun computers nutteloos energie verspillen wat deze gebruikers veel meer aan energie kost dan het de website aan cryptomunten oplevert.

    Dit soort milieuvervuiling zou beter verboden moeten worden en grote browsers zouden zo snel mogelijk dit soort misbruiken moet voorkomen door cryptomining te detecteren en te stoppen. Bedrijven als Google en Microsoft willen graag in het nieuws komen om hun groene initiatieven. Deze verspilling snel de kop indrukken lijkt me dan een prima plan.

    1. Alleen bitcoin mining verbruikt momenteel zo’n 18 TWh elektriciteit per jaar grotendeels op supersnelle rack met speciale hardware voor bitcoinmining die vooral staan op locaties waar de stroom extreem goedkoop is.

  3. Het is eigenlijk in het verlengde te zien wat sommige websites al doen. Client side rendering. Ipv. de server de pagina te laten renderen alleen HTML/JS opsturen en dmv. data uit een API de pagina’s renderen.

    Ik moedig het inititief wel aan, liever dit dan ads (voor sites die de moeite waard zijn om geld te ontvangen). Ads zijn vaak toch te intrusive. Wel ben ik er voor om als bezoeken iets van controle te hebben over het uitvoeren van de taken. Bijvoorbeeld dat mijn browser kan aangeven dat ik op batterij zit ipv. netspanning. Anders worden de miners wel vervelend.

    Zoals Sven al aangaf zet ik ook mijn twijfels bij hoe efficient het is. Er gaat een boel op in overhead. Maar misschien dat er met first-class browser ondersteuning, standardisatie en API’s voor gebruik van GPU e.d. dit wel tot een levensvatbaar alternatief kan dienen.

  4. Uitzonderingen op het verplicht verkrijgen van toestemming om gebruik te maken van de verwerkings- en opslagcapaciteit van eindapparatuur of om toegang te krijgen tot informatie die in eindapparatuur is opgeslagen, moeten beperkt blijven tot situaties waarin er geen of slechts in zeer beperkte mate sprake is van inmenging in de persoonlijke levenssfeer. Zo hoeft geen toestemming te worden gevraagd om technische opslag of toegang mogelijk te maken wanneer dit strikt noodzakelijk en evenredig is voor het rechtmatige doel het gebruik mogelijk te maken van een specifieke dienst die een eindgebruiker uitdrukkelijk heeft aangevraagd.

    Ik zou zeggen dat een mining script geen privacy impact heeft. Goed je kamer warmt op en je rekening voor stroom is hoger maar privacy impact zie ik niet. Dus zou zeggen dat het wel mag?

    (21) blz 19 Nederlandse versie van https://ec.europa.eu/digital-single-market/en/news/proposal-regulation-privacy-and-electronic-communications heb niet de hele tekst doorgespit 😉

  5. Het meest efficiënt is waarschijnlijk minen via WebGL: dat gebruikt de parallelle rekenkracht van de GPU, in plaats van inefficiënte interpretatie van javascript op de CPU. Ik heb een schatting gevonden dat WebGL misschien wel 75% van de efficiëntie kan halen van een geoptimaliseerde OpenCL GPU miner. Als we dan uit gaan van een gemiddelde GPU van 400MHash/s, dan zou een Javascript+WebGL miner ongeveer 300MHash/s kunnen halen. Mocht je werkelijke testresultaten willen, dan zou je het misschien zelf kunnen proberen.

    Op het moment van schrijven is de netwerk hash-rate ongeveer 8 miljoen THash/s = 8e12 MHash/s; met 300 MHash/s heb je dus 3.8e-11 deel van het network, en krijg je gemiddeld dat deel van de beloning van (momenteel) ruim 12.5BTC per 10 minuten; dat is 4.7e-11 BTC/minuut. Op het moment van schrijven is 1 BTC 4200 USD waard; per minuut genereert 1 Javascript-miner die de hele GPU voor zichzelf heeft dus ongeveer 2e-7 USD per minuut.

    Ik dacht dat een advertentie per page-view ongeveer 0.5 cent oplevert. Om een dergelijk bedrag bij elkaar te minen moet een bezoeker dus 25000 minuten = 17 dagen de pagina open laten staan in de browser, en de bijbehorende stroomrekening accepteren.

    Kortom: in theorie kan het, maar in de praktijk is het compleet zinloos, dat Javascript mining, zelfs als je de stroomrekening compleet negeert. Wat stroomverbruik betreft: mining ASICS zijn ongelofelijk veel efficiënter dan GPUs, om maar te zwijgen over CPUs; denk aan duizenden HMash/J voor ASICs en misschien maar enkele MHash/J voor GPUs. Vandaar dat de hele mining industrie nu op ASICs draait, en je niets meer krijgt voor minder efficiënte vormen van mining.

      1. OK, dat getal was een beetje slecht onderbouwd; meer een vage herinnering van iets dat ik lang geleden “ergens” had gelezen. Heb jij betere data? Dan kunnen we de berekening opnieuw doen. Alleen: 17 dagen een pagina open laten staan is wel zo enorm veel dat ik niet verwacht dat mijn conclusie anders wordt.

        1. Ik vind online een gemiddelde van 1$ per 1000 views, maar dat is dus een gemiddelde. Een en ander is nogal afhankelijk van hoe populair je website is en hoeveel mensen op de advertenties klikken.

          Waarschijnlijk is het zo dat de grote/popluaire sites heel erg veel meer verdienen dan die dollar per 1000 views en dat de kleinere websites dus onder die 1$ per 1000 views zitten.

          Zie deze link voor een verder uitgewerkt antwoord. https://www.quora.com/How-much-money-can-I-make-from-AdSense-with-1000-visitors-per-day

          Dat scheelt wel wat ordes van grootte met 0,5$ per view, maar is nog steeds een aantal ordes lucratiever dan bitcoin lijkt me.

          1. Bedankt voor de info.

            1$ per 1000 views is 0.001$ per view, dus 0.1 dollarcent per view. Dat is een factor vijf lager dan het door mij genoemde getal (0.5 cent per view, niet 0.5 dollar per view!). Veel lager, maar niet orde-groottes lager. Het lijkt me mogelijk dat mijn data niet fout was, maar gewoon flink verouderd, en dat de advertentiemarkt intussen is ingezakt.

            Als we de factor 5 doorrekenen in mijn verhaal, dan is de conclusie dat een bezoeker een pagina 3.4 dagen de pagina open moet laten laten staan in de browser om Bitcoin-mining de zelfde inkomsten te laten genereren als een advertentie. Nog steeds absurd lang dus; Bitcoin-mining gaat advertenties voorlopig dus niet vervangen. Wellicht is het met Monero-mining anders (zie elders in deze blog-discussie), en wellicht speelt hier mee dat advertenties voor de Pirate Bay steeds minder een optie zijn, waardoor minder lucratieve, maar wel beschikbare opties interessanter worden.

      1. Ah, dat had ik over het hoofd gezien. Bedankt.

        Ik ben een beetje sceptisch over “kan niet met ASICs gemined worden”. Het suggereert dat CPUs altijd de optimale mining chips voor hun algoritme zullen blijven, en dat lijkt me onwaarschijnlijk. In wezen zijn CPUs ook “ASICs” (Application Specific Integrated Circuits), maar hun “applicatie” is het uitvoeren van software, typisch in een desktop, server, smartphone of embedded omgeving. CPUs zijn voor die toepassing geoptimaliseerd, en niet voor crypto-mining. Nu gebruikt men bij Monero “toevallig” een algoritme dat zodanig is ontworpen dat CPUs het veel efficiënter uitvoeren dan veel andere systemen, maar het moet haast wel zo zijn dat als je een CPU neemt, en je gaat die verder optimaliseren voor dat mining-algoritme, je op een nog snellere ASIC uit komt.

        Specifiek in dit geval: Monero gebruikt CryptoNight, dat random access in ongeveer 2MB geheugen vereist. Moderne CPUs doen dat redelijk efficiënt, doordat die 2MB in hun L3 cache past. GPUs hebben grote geheugen-bandbreedte, maar random access is traag. Maar wat nou als je een CPU-ontwerp neemt, en je haalt er alle meuk uit die niet nodig is voor CryptoNight? Bijvoorbeeld: de instructie-sequence is fixed, dus die hoef je niet uit het geheugen te halen, branch prediction kan er uit, hyperthreading wordt een fixed sequence, een heleboel inter-core-synchronisatie kan er uit, de cache organisatie kan helemaal rond 2MB blokken worden geoptimaliseerd, toegang tot externe circuits (bijv. RAM) kan beperkt blijven tot wat nodig is voor mining (block header template erin, periodiek het beste resultaat eruit). Je houdt dan een chip over die geen CPU meer is, maar met minder circuits (en dus minder stroomverbruik) minstens zo snel CryptoNight kan uitvoeren. Een echte ASIC dus.

        In het beste geval is het efficiëntie-verschil van zo’n ASIC met een gewone CPU zo klein dat een CPU het alsnog wint op de prijs van de chip: CPUs halen schaal-voordelen uit de enorme productie-volumes. Maar het een en ander hangt wel af van de stand van de techniek, en de populariteit (wisselkoers!) van een cryptocurrency. En in dit geval: hoe efficiënt wordt een Javascript-implementatie van CryptoNight uitgevoerd op een CPU?

  6. En wat als je het alleen voor javascript-enabled Googlebot doet? De cookiewet geldt toch niet voor geautomatiseerde gebruikers?

    Het computerbelasting argument vindt ik maar een glijdende schaal. Ik heb wel eens websites opgezet met als enig doel het crashen van een bepaalde browser. Ook zijn de meeste websites niet geoptimaliseerd voor snelheid (en zorgen dus voor onnodige belasting van ’t systeem).

    Ik vergelijk het met de kosten en mogelijke hardware schade van het sturen van een Fax-of-Death (superlange fax met zwart vierkant op elke pagina, zorgt ervoor dat het papier en de printerinkt opgaat bij de ontvanger). Indien je zo’n fax stuurt naar persoon A, met de intentie om onnodige kosten te maken, dan heeft persoon A een claim. Komt persoon A naar mijn winkel en vraagt mij zo’n fax te sturen, dan vindt ik dat er geen claim is. Vergelijk winkel met een web server. Malware injecteren dat op de achtergrond crypto mined: slecht. Crypto minen als men uit vrije wil je web applicatie bezoekt? Geen probleem mee. Het lijkt me gewoon een modern innovatief subscriptie-model, in de trant van BAT of STEEM.

  7. De telecomwet spreekt over het opslaan of uitlezen van informatie. Als de website de JavaScript-miner niet zou hebben, zou de website bij bezoek nog steeds in de cache terechtkomen. De informatiewaarde is: ik heb deze website eerder bezocht en toen stond er dit en dat op. Opslag van dit type informatie is strikt noodzakelijk om en heeft geen ander doel dan te kunnen internetten.

    Dat is heel wat anders dan het toevoegen van een gepersonaliseerd cookie-id, waardoor de hoeveelheid opgeslagen informatie daadwerkelijk verandert, evenals het doel van de informatieopslag.

    Het miner-verbod overleeft wat mij betreft de giecheltoets niet. Het blokkeren van normaal functioneren van de browsercache was juist géén doel van de cookiewet. Het minen zelf wordt gedaan door je processor, niet door je cache.

    1. De telecomwet spreekt over het opslaan of uitlezen van informatie.

      Inderdaad. Wat zou juridisch gezien het dichtste komen bij “het ontnemen van computerrekenkracht”?

      Ik denk: “Gebruiken van verwerkingscapaciteit”.

      Wie binnendringt op een supercomputer, kan deze misbruiken om bijvoorbeeld gratis dingen te laten doorrekenen. Hiervoor moet op dergelijke systemen normaal betaald worden. Ook kan een systeem met een snelle Internetverbinding worden gebruikt om bestanden zonder toestemming ter verspreiding aan te bieden (bijvoorbeeld films of warez, illegaal gekopieerde software).

      Dergelijk misbruik van andermans computer levert maximaal vier jaar cel of een boete van 16.750 euro op (art. 138ab lid 3).

      Maar er zal vast juridisch geen sprake zijn van “binnendringen” als iemand een website bezoekt uit vrije wil. Wel zo vriendelijk (idealistisch gezien vindt ik vriendelijk een goede maatstaf voor wetgeving) om duidelijk een waarschuwing te geven en toestemming te vragen: “om deze website te bezoeken dient u 10 seconden te wachten en gebruiken wij uw rekenkracht. Akkoord?” of in ieder geval achteraf duidelijk te maken dat de website gebruikt maakt van de rekenkracht van de bezoeker voor geldelijk gewin. Ok, vooruit, plaats het in 9 pt font ergens in de gebruikersvoorwaarden. Zucht, in vijf jaar dan maar een klunzige toevoeging van verwerkingscapaciteit aan de cookiewet.

      1. Hele strenge rechter: “U nam met uw bedrijf de hoedanigheid van een amusementwebsite aan, maar in werkelijkheid misbruikte u, zonder toestemming, de verwerkingscapaciteit van de randapparatuur van uw gebruikers, om uzelf te bevoordelen.”

  8. Hoe makkelijk zou het zijn om dit soort scripts te dwarsbomen door valse data terug te geven? Ik ben niet heel erg thuis in cryptomining, maar ik stel me een beetje een seti-/folding@home-achtige situatie voor waarbij ik een setje berekeningen via javascript krijg en het eindresultaat weer terugstuur. Als ik dan altijd onzin terug stuur, en genoeg andere mensen doen dat ook, dan lijkt het me snel afgelopen met dit soort ongein.

    Niet blocken maar focken dus…

    1. Het is met dit soort berekeningen altijd moeilijk om te berekenen maar makkelijk om te verifiëren of wat je berekend hebt klopt. Dus op het moment dat jij valse data terug stuurt zal de server dit gelijk door hebben en jou blokkeren.

    2. Een ad-blocker is een algoritme in de vorm “ALS dit een advertentie is, DAN niet laden / weergeven”. Op de zelfde manier kan je een mining-blocker maken in de vorm “ALS dit een mining script is, DAN niet laden / uitvoeren”. Jouw voorstel is iets in de trant van “ALS dit een mining script is, DAN niet laden / uitvoeren, en valse data terugsturen”.

      De moeilijkheid zit niet in het DAN-gedeelte, maar in het ALS-gedeelte: hoe herken je of iets een advertentie is, en hoe herken je of iets mining is? Als je te veel blokkeert (bijv. op basis van heuristiek), dan werken sommige sites niet meer goed, als je te weinig blokkeert (bijv. op basis van een blacklist), dan glipt er wel eens wat tussendoor. Jouw voorstel doet niets om dit probleem op te lossen.

      Mining kan in principe nog geniepiger zijn dan advertenties: het is voor een website lastig om af te dwingen dat advertenties echt worden weergegeven; het beste dat ze kunnen doen is afdwingen dat je ze echt downloadt, en dat je browser doet alsof ze worden weergegeven. Mining kan wel worden afgedwongen: je kunt als site gewoon eisen dat je browser een bepaalde hoeveelheid mining-resultaat teruggeeft, anders laadt de site niet. Foutief resultaat naar de server terugsturen heeft geen effect: dat kan heel makkelijk worden weggefilterd (verificatie van mining-resultaat is heel snel). Hooguit blokkeert de site jou dan, waardoor je helemaal geen toegang meer hebt.

      1. Dat klopt. Ik heb geen andere manier om te detecteren dat iets een mining-script is dan de manier die ook gebruikt wordt om advertenties te blokkeren. In het geval van advertenties kun je nhv een blacklist redelijk veel dekken omdat niet laden voldoende is. Bij mining-scripts is de manier van data teruggeven per script waarschijnlijk anders (en misschien zelfs gerandomiseerd). Je moet dus bij de blacklist ook nog eens bijhouden hoe de data teruggegeven moet worden.

        Overigens denk ik dat NoScript dit soort scripts waarschijnlijk nu al niet laadt. Dat daarmee sommige sites onbruikbaar worden is jammer, maar dan zoek ik wel een andere site.

        1. Je moet dus bij de blacklist ook nog eens bijhouden hoe de data teruggegeven moet worden.

          Het is misschien geniepiger dan je denkt. Als een site eist dat je mining-resultaat terug geeft, dan kan je niet bij de site zonder werkelijk te gaan minen. Het enige mogelijke alternatief is dat je iemand anders voor jou laat minen, maar die wil daar natuurlijk voor vergoed worden. Hergebruik van mining-resultaten is niet mogelijk, je komt niet weg met constante reply-data, en er is geen shortcut-algoritme om sneller een acceptabele reply naar de site te sturen.

          Technische details: het komt er, vereenvoudigd, op neer dat de site jou een stukje “template”-data geeft, plus een “target”-waarde, en dat jij een stukje “nonce”-data terug moet geven zodanig dat:

          hash(template | nonce) < target

          waarbij “hash” een secure hash functie is (dubbele SHA256 bij Bitcoin, CryptoNight bij Monero), en de resulterende hash wordt geïnterpreteerd als numerieke waarde. De snelste (en enige) manier om de nonce-waarde te bepalen is “brute-force”: gewoon 1 voor 1 verschillende waarden proberen (0, 1, 2, 3, enz.), en kijken of ze goed zijn. Dit is “minen”.

          Als de site jou elke keer andere template-data geeft, waar o.a. jouw sessie-ID in is verwerkt, dan kan je niet een eerder bepaalde nonce hergebruiken. Je zult dus elke keer zelf opnieuw het minen moeten doen; er is geen short-cut.

          Verder werkt het minen hiërarchisch, waarbij verschillende lagen verschillende target-waarden hebben. Stel bijvoorbeeld (sterk vereenvoudigd om grote getallen te vermijden) dat je hash-functie getallen genereert in het bereik 0 .. 1 000 000, en de target die de site jou geeft is 10 000, dan moet je gemiddeld 100 iteraties doen om een goede nonce te vinden. De site is aangesloten bij een mining pool met een target van 200; aangezien de site van elke bezoeker een resultaat in het bereik 0 .. 10 000 krijgt, geeft gemiddeld 1 op de 50 bezoekers een resultaat dat goed genoeg is dat de site ‘m door kan sturen naar de pool. Als de block chain zelf dan een target van 10 heeft, kan de pool gemiddeld 1 op de 20 ontvangen resultaten gebruiken voor een nieuw block op de block chain, met bijbehorende inkomsten. De pool verdeelt de mining-inkomsten onder pool-deelnemers, naar evenredigheid van ingestuurde mining-resultaten.

    1. Nee, Google voert helemaal geen JavaScript uit bij het indexeren – helaas is dit een wijdverbreid misverstand. Wat Google wel doet is het statisch analyseren van de JavaScript-code op een site, om zo alle content proberen te vinden. Dit werkt alleen voor de architecturen en frameworks waar Google bekend mee is, en werkt doorgaans gewoon helemaal niet.

      Als praktisch voorbeeld: ik heb enkele maanden terug een experimentje gedaan. Ik heb mijn adresgegevens op een bepaalde pagina base64-geencodeerd, met een scriptje op de pagina die direct bij het laden van de pagina deze content vervangt door de gedecodeerde versie ervan. Dit is een dermate simpel scriptje (zonder netwerkverzoeken of timers) dat het gegarandeerd uitgevoerd zou worden voordat een eventuele timeout bij de indexer verstrijkt.

      Het scriptje in kwestie gebruikte geen vreemde APIs of libraries; het was simpelweg een DOM query met een atob-aanroep, die de innerHTML van het element vervangt door de gedecodeerde versie – dit is vergelijkbaar met hoe de meeste JS-frameworks de inhoud van een pagina beheren. Echter is Google er nooit in geslaagd om de onderliggende adresgegevens te indexeren; de pagina bestond wel degelijk in de index, maar kon voor de betreffende adresgegevens niet gevonden worden. De code in kwestie is dus nooit uitgevoerd, en omdat het niet op een bekend framework leek is het ook niet verder geanalyseerd.

  9. Hoewel ik me moeilijk kan voorstellen dat dat ook zou spelen bij een Javascript-gebaseerde delver, maar daar weten jullie denk ik meer van dan ik.

    Ten eerste kost het je extra stroom, en dus geld. Ten tweede wil je dat absoluut niet op een mobiele telefoon. Dan gaat je batterij minder lang mee. Batterijen kun je tegenwoordig niet eens meer zelf vervangen. Op een PC zorgt extra stroom ook voor slijtage op de hardware, maar natuurlijk veel minder. Het kan zelfs leiden tot CPU throttling. Bij sommige apparaten zal het het apparaat trager maken. Stel je hebt maar 50% van je CPU beschikbaar op een spelcomputer of mobiele telefoon?

    Het is nog ‘ns extra vervelend omdat allerlei zgn. apps Chrome embedden op de mobiele telefoon. Vervolgens kun je de ads of JS niet blokkeren. Zo krijg je bijvoorbeeld reclame op de YouTube app in Android. Je kunt niet even NoScript gebruiken.

    Ik denk dat we browser processen zullen moeten limieteren in hun resources, en dan met (tijdelijke) whitelisten accepteren dat “website X wel veel CPU power mag gebruiken voor JS uitvoering”. Dat zou kunnen met NoScript, maar dan heb je embedded Chrome nog niet te pakken.

    Ik denk dat cryptomining via JS wel een interessant alternatief is voor ads en abonnementen, maar dan op vrijwillige basis (blijkbaar is een cookiewall dat…), en zeer zeker niet op bijv mobiele telefoons. Want dan bezoek ik zo’n website liever niet op een mobiele telefoon.

  10. Nou. Ik heb het getest, en het is 3 keer niks. Met duidelijke uitleg aan gebruikers en een optout mogelijkheid (‘ik wil liever banners’). Ook filterde ik mobiele gebruikers weg.

    Dit heb ik gedaan op een pagina waar men gemiddeld ruim een uur blijft zonder het script te storen. Na ruim 5 dagen draaien met gemiddeld (over dag en nacht gemeten) 30 actieve gebruikers, heeft dat ding pas 0,01 Monero opgespaard. Oftewel 0,77 euro in die 5 dagen. (Dit is de 70% die Coinhive uitkeert. Dus eigenlijk 1,10 euro gemined.)

    Om onze gebruikers niet weg te pesten liet ik het script draaien op 1 thread, full throttle. Heb gezien dat dit een load gaf van 18% op de CPU. En dat het dramatisch slecht presteert op IE en Edge, maar goed presteerde op Chrome en FireFox. Op Safari en Opera niet getest.

Geef een reactie

Handige HTML: <a href=""> voor hyperlinks, <blockquote> om te citeren, <UL>/<OL> voor lijsten, en <em> en <strong> voor italics en vet.