Dölja hemlig text i bilder (steganografi)
Steganografi är konsten att gömma ett meddelande inuti något som ser helt vanligt ut, till exempel ett foto. Bilden ser likadan ut som förut, men texten ligger dold i pixlarna. Den här guiden visar hur det fungerar och hur du själv döljer och avslöjar hemlig text inuti en bild, gratis och helt i din webbläsare.
Så fungerar det
Varje pixel i en bild består av tre färgvärden: rött, grönt och blått, vart och ett från 0 till 255. Ett värde som 200 lagras binärt som 11001000. Den sista siffran längst till höger kallas den minst signifikanta biten (LSB), och den påverkar färgen så lite att ögat inte kan se skillnaden. Ändrar du rött från 200 (11001000) till 201 (11001001) blir pixeln omätbart ljusare i den röda kanalen, osynligt för dig.
Steganografi utnyttjar det. I stället för att bara vara färgdata får den sista biten i varje kanal bära en bit av ditt meddelande. Texten görs om till ettor och nollor, och de bitarna skrivs in, en i taget, i pixlarnas minst signifikanta bit.
Ta bokstaven “H”. Datorn lagrar den som talet 72, som binärt blir 01001000, alltså 8 bitar. Var och en av dessa 8 bitar placeras i den minst signifikanta biten hos en pixel. Åtta pixlar senare är hela bokstaven inbäddad, och bilden ser fortfarande oförändrad ut. Nästa bokstav fortsätter i följande pixlar, och så vidare tills hela meddelandet är inne.
Hur mycket kan du dölja
Kapaciteten beror på hur många pixlar bilden har och hur många kanaler du använder. Med bara den röda kanalen får du 1 bit per pixel. Använder du rött, grönt och blått tillsammans får du 3 bitar per pixel, alltså ungefär tre gånger så mycket utrymme. Här är ungefärliga siffror:
| Bildstorlek | Endast röd kanal | RGB (tre kanaler) |
|---|---|---|
| 100 x 100 px | 1,2 KB | 3,6 KB |
| 1280 x 720 px | 115 KB | 345 KB |
| 1920 x 1080 px | 259 KB | 778 KB |
Vår kodare låter dig välja mellan Röd, RGB och RGBA. Rött är mest diskret eftersom bara en av tre färgkanaler rörs. RGB ger ungefär tre gånger kapaciteten, och RGBA lägger även till alfakanalen (genomskinlighet) för ungefär fyra gånger. En kort text får plats i nästan vilken bild som helst; behöver du dölja mycket text, välj en större bild eller fler kanaler.
Dölj ett meddelande
Ladda upp en bild, skriv din text och koda. Verktyget nedan gör allt lokalt:
Så här går du till väga: ladda upp en bild, skriv meddelandet du vill dölja, välj eventuellt RGB om du behöver mer utrymme, ange eventuellt ett lösenord om texten ska krypteras, klicka på Koda och ladda ner resultatet. Utdatan är alltid en PNG. Det är viktigt, för PNG är ett förlustfritt format som bevarar varje pixel exakt. JPEG är förstörande och skulle radera de dolda bitarna när det komprimerar bilden, så spara aldrig om resultatet som JPEG.
Avslöja ett meddelande
Har du en PNG med ett gömt meddelande läser du ut det här:
Släpp PNG:en i verktyget så läses den dolda texten fram. Var meddelandet lösenordsskyddat skriver du in lösenordet för att låsa upp det. Avkodaren är byggd för att känna igen många olika LSB-format automatiskt, inte bara det vår egen kodare skapar, så den kan ofta läsa bilder som gjorts med andra LSB-verktyg.
Lägg till ett lösenord (kryptering)
Anger du ett lösenord i kodaren krypteras meddelandet med AES-256-GCM innan det bäddas in, och nyckeln sträcks fram ur ditt lösenord med PBKDF2. Resultatet är att de dolda bitarna ser ut som slumpmässigt brus. Utan rätt lösenord avslöjar pixlarna ingenting, och ett felaktigt lösenord avslöjar heller ingenting, eftersom GCM:s autentiseringstagg vägrar att dekryptera med fel nyckel.
Skillnaden är viktig. Steganografi döljer att ett meddelande över huvud taget finns. Kryptering gör meddelandet oläsligt även om någon hittar det. Var för sig är de nyttiga, tillsammans är de starkare: en angripare måste både upptäcka att något är gömt och sedan knäcka krypteringen.
Gränser och vanliga misstag
Det finns verkliga begränsningar, och det är bäst att känna till dem.
- Det fungerar bara på förlustfria PNG-filer. Sparar du om bilden som JPEG eller tar en skärmdump av den förstörs meddelandet, eftersom pixlarna då räknas om.
- Många chattappar och sociala nätverk komprimerar om bilder automatiskt när du laddar upp dem, vilket raderar de dolda bitarna. Dela därför PNG:en som en fil (till exempel som bilaga eller via en tjänst som inte rör om bilden), inte via en kanal som komprimerar om.
- Det här är LSB-steganografi. Avkodaren är inte en universell detektor för alla metoder. Text som gömts med andra tekniker, till exempel steganografi i JPEG:s DCT-domän, ligger utanför vad LSB-läsning kan hitta.
Vanliga frågor
Är det privat? Ja. Allt körs lokalt i din webbläsare med Canvas API. Bilden lämnar aldrig din dator, och ingenting laddas upp till någon server.
Kan jag använda vilken bild som helst? Nästan. Verktyget arbetar med förlustfri PNG. Ett foto, en illustration eller en skärmbild fungerar bra så länge slutfilen sparas som PNG. Undvik att köra resultatet genom JPEG-komprimering efteråt.
Ser den kodade bilden annorlunda ut? Nej, inte för ögat. Bara den minst signifikanta biten i de valda kanalerna ändras, vilket motsvarar en ändring på högst 1 av 255 nivåer per färg. Skillnaden är i praktiken omöjlig att se.
Kan någon läsa det utan lösenordet? Om du inte satte ett lösenord kan vem som helst med ett LSB-verktyg läsa texten. Satte du ett lösenord är meddelandet krypterat med AES-256-GCM, och utan rätt lösenord får ingen ut något läsbart.
Redo att prova? Öppna Steganografi-kodaren för att dölja din text i en bild, och Steganografi-avkodaren för att läsa fram ett gömt meddelande igen.