Pixelisatie wordt op veel gebieden gebruikt om informatie in afbeeldingen te verdoezelen. Wij hebben bedrijven wachtwoorden zien pixeliseren in interne documenten. Er waren geen tools beschikbaar om een wachtwoord van zo’n afbeelding te herstellen, dus heeft Sipke Mellema er een gemaakt. Dit artikel behandelt het algoritme en soortgelijk onderzoek naar depixelisatie.

Wat is Pixelisatie?

Pixelisatie beschrijft het proces waarbij de resolutie van een afbeelding gedeeltelijk wordt verlaagd om informatie te censureren. De implementatie van mijn algoritme valt het gewone lineaire boxfilter aan. Een lineair kaderfilter neemt een doos met pixels en overschrijft de pixels met de gemiddelde waarde van alle pixels in de doos. De implementatie is eenvoudig en werkt snel, want het kan meerdere blokken parallel verwerken.

De onderstaande afbeelding toont een voorbeeld van het lineaire boxfilter. Een afbeelding van een emoticon is verdeeld in vier blokken. De gemiddelde kleur van een blok overschrijft de pixels van het blok, wat resulteert in een uiteindelijke pixelachtige emoticon. Het is onmogelijk om het filter direct om te draaien, aangezien de originele informatie verloren gaat.

vervaag tools, geschiedenis en onderzoek

Afbeeldingen kunnen op veel manieren worden vervaagd, wat over het algemeen vervaging wordt genoemd. Pixelisatie met boxfilters kan worden gezien als een subset van vervagings technieken. De meeste vervaging salgoritmen hebben de neiging om pixels uit te spreiden omdat ze natuurlijke vervagingen proberen na te bootsen die worden veroorzaakt door wankele camera’s of scherpstel problemen.

Er zijn veel tools voor het onscherp maken van veelvoorkomende taken, zoals het verscherpen van wazige foto’s. Helaas zijn de gepixelde wachtwoorden waarmee ik werk maar een paar blokken hoog, dus er valt niets te verscherpen.

Recente ontwikkelingen op het gebied van kunstmatige intelligentie hebben voor fraaie krantenkoppen gezorgd, zoals “Onderzoekers hebben een hulpmiddel gemaakt dat gezichten perfect kan verwijderen”. De AI doet zoiets echter niet. Dit recente PULSE-algoritme is vergelijkbaar met het RAISR-algoritme van Google uit 2016. De AI genereert gezichten die hetzelfde beeld opleveren als ze gepixeld zijn, maar het gezicht dat het herstelt, is niet het origineel.

Algoritmen zoals PULSE lijken nieuw, maar ze komen voort uit een lange reeks van tools voor onscherpte. M. W. Buie schreef in 1994 (!) Een tool om ‘Pluto’s’ te genereren, te vervagen en te matchen met waargenomen beelden.

In een algemeen bekend artikel uit 2006 legt D. Venkatraman een algoritme uit voor het herstellen van een gepixeld creditcardnummer. Het idee is simpel: genereer alle creditcardnummers, pixeliseer ze en vergelijk het resultaat met het pixelgetal.

In 2019 legde S.Sangwan uit hoe Photoshop kan worden gebruikt om gezichten voor OSINT te herstellen door een afbeelding te verscherpen en op te zoeken via Google Afbeeldingen. Het is vergelijkbaar met andere technieken, omdat het Google gebruikt om het gezicht in de afbeelding ‘brute kracht’ te geven.

Let op de overeenkomsten tussen de genoemde oplossingen. Als er niet genoeg informatie beschikbaar is om de afbeelding weer goed te verzachten, is de techniek van keuze om vergelijkbare gegevens te pixeliseren en te controleren of ze overeenkomen. Dit is ook de basis voor mijn algoritme voor het herstellen van wachtwoorden van screenshots

Algoritme uitleg

Aangezien het lineaire boxfilter een deterministisch algoritme is, zal het pizeliseren van dezelfde waarden altijd resulteren in hetzelfde pixelblok. Het pixeliseren van dezelfde tekst – met dezelfde locaties van blokken – zal resulteren in dezelfde blokwaarden. We kunnen proberen tekst te pixeleren om overeenkomende patronen te vinden. En gelukkig zou dit zelfs voor een deel van de geheime waarde werken. Elk blok, of combinatie van blokken, kan als een deelprobleem worden beschouwd.

Ik heb er niet voor gekozen om een opzoektabel met mogelijke lettertypen te maken. Het algoritme vereist dezelfde tekstgrootte en kleur op dezelfde achtergrond. Moderne teksteditors voegen ook tint, verzadiging en lichtheid toe, waardoor een groot aantal mogelijke lettertypen-instellingen mogelijk is waarmee de schermafbeelding is gemaakt.

Deze oplossing is vrij simpel: neem een De Bruijn-reeks van verwachte karakters, plak deze in dezelfde editor, en maak daar een screenshot van. Dat screenshot wordt gebruikt als een opzoek afbeelding voor vergelijkbare blokken. Bijvoorbeeld:

Deze reeks bevat alle combinaties van 2 tekens van verwachte tekens. Het is belangrijk dat combinaties van 2 tekens worden gebruikt, omdat sommige blokken twee tekens kunnen overlappen.

Om de juiste overeenkomsten te vinden, moet het exacte blok met dezelfde configuratie van pixels in de zoekafbeelding voorkomen. In een testafbeelding kon mijn algoritme een deel van de ‘o’ niet vinden. Ik merkte dat het kwam doordat in de zoekafbeelding het zoekblok ook een deel van de volgende letter (de ‘d’) bevat, maar in de originele afbeelding was er een spatie.

Het creëren van een De Bruijn-reeks van letters met spaties eromheen, introduceert uiteraard hetzelfde probleem: het algoritme zou niet in staat zijn om de juiste blokken voor opeenvolgende letters te vinden. Een afbeelding met zowel gespatieerde als dichte letters duurt langer om te zoeken, maar levert betere resultaten op.

Voor de meeste pixelafbeeldingen lijkt de tool resultaten voor blokken te vinden met één match. Het veronderstelt dat deze correct zijn. De overeenkomsten van omringende blokken met meerdere overeenkomsten worden vervolgens vergeleken om zich op dezelfde geometrische afstand te bevinden als in het pixelbeeld. Deze overeenkomsten worden ook als correct behandeld.

Nadat de juiste blokken geen geometrische overeenkomsten meer hebben, worden alle juiste blokken direct uitgevoerd. Voor blokken met meerdere overeenkomsten geeft het het gemiddelde van alle overeenkomsten weer. De output is lang niet perfect, maar hij presteert redelijk goed. De onderstaande afbeelding toont een testafbeelding met willekeurige tekens. De meeste karakters kunnen correct worden gelezen.

Uiteindelijk

Verwijder gevoelige informatie altijd volledig uit afbeeldingen, omdat verduisteringstechnieken herstelbare delen van de oorspronkelijke waarde kunnen onthullen.

Als er andere tools zijn die wachtwoorden kunnen herstellen van pixelafbeeldingen, wil ik daar graag over weten. Test ze eerst op de testafbeeldingen in de Github-repository voordat u beweert dat ze werken. Ik ben ook geïnteresseerd in andere technieken, zoals patroonherkenning van pixelblokken.

De genoemde techniek sluit prachtig aan bij kwetsbare patronen in cryptografie. Het is vergelijkbaar met het kraken van hash, misbruik maken van het gebruik van ECB en het gebruik van aanvallen met bekende platte tekst. Gebruik best practices voor het beveiligen van gegevens. De aanname dat een schema niet kan worden verbroken, alleen omdat de uitvoerder niet weet hoe, is een veel voorkomende valkuil bij informatiebeveiliging.

Link naar de software

You cannot copy content of this page