AES128 vs AES256
Je hebt softwareprogramma's waarmee je belangrijke documenten kunt beveiligen middels encryptie. Vaak kun je dan zelf een algoritme kiezen. Nu vraag ik me af wat het eigenlijk uitmaakt of je dan voor AES128 of AES256 kiest. Op het moment dat iemand je wachtwoord gaat bruteforcen dan doet dat er eigenlijk toch helemaal niks toe?
Stel mijn wachtwoord is "appel". Dan zou je zowel het met AES128 als het met AES256 ge-encrypte bestand toch even snel kunnen kraken? Waar zit 'm die extra beveiliging dan eigenlijk in?
Gewijzigd op 18/09/2015 00:20:40 door Ozzie PHP
In theorie is AES128 eenvoudiger te kraken dan AES256. De sleutel is kleiner, er worden minder encryptierondes gebruikt, etc. Dat zou het eenvoudiger kunnen maken om van een gecrypt wachtwoord de set met mogelijke inputs te beperken. Ook is de kans dat twee verschillende inputs dezelfde output geven (collision) veel kleiner.
Overigens heeft AES256 ook bij brute force attacks nog wel nut, want er is meer rekenwerk voor nodig om een wachtwoord te versleutelen, en dus zal de attack langer duren. We praten hier overigens over nog geen microseconde per wachtwoord, maar met de hoeveelheid data die je moet encrypten telt dat best lekker aan.
Gewijzigd op 18/09/2015 00:44:44 door Willem vp
Stel ik gebruik als wachtwoord "appel", wordt "appel" dan als sleutel gebruikt? Dus stel we hebben een versleuteld bestand en ik laat daar het woord "appel" op los, krijg ik dan het origineel weer terug?
Als je 'appel' als wachtwoord gebruikt, zal dat inderdaad worden gebruikt om het encryptie-mechanisme te initialiseren. Als je hetzelfde (oorspronkelijke) bestand nogmaals encrypt met een ander wachtwoord, zul je ook een andere gecrypte versie krijgen. Hoe AES precies werkt weet ik niet, maar het lijkt me aannemelijk dat de gebruikte key (128 dan wel 256 bits) een directe afgeleide is van het ingevoerde wachtwoord. Oftewel: je wachtwoord wordt vermangeld tot een nieuw 'wachtwoord' van 16 of 32 bytes waarmee het bestand gecrypt wordt.
AES is symmetrisch; dat betekent dat je hetzelfde wachtwoord ook weer moet gebruiken bij het decrypten. Op basis van het ingevoerde wachtwoord wordt het decryptie-mechanisme geïnitialiseerd en daardoor kan het gecrypte bestand worden teruggerekend naar het origineel. Voer je het verkeerde wachtwoord in dan zal het ook worden teruggerekend, maar lijkt het gedecrypte bestand in niets op wat het zou moeten zijn. ;-)
Gewijzigd op 18/09/2015 01:24:30 door Willem vp
Geen probleem :)
Maar dan kom ik weer even terug op mijn vraag ... wat is nu het verschil of ik een bestand met AES128 of AES256 encrypt, als ik in beide gevallen als wachtwoord "appel" gebruik. Hoe biedt AES256 dan meer beveiliging vraag ik me af? Dus stel een hacker komt het ge-encrpyte bestand tegen ... waarom is het AES256 bestand dan moeilijker te kraken?
Ten eerste omdat de key langer is, ten tweede omdat er meer encryptierondes plaatsvinden.
De data wordt opgedeeld in blokken. Op die blokken worden rekentruukjes losgelaten. Verschillende achter elkaar, en dat wordt dan een aantal keer herhaald. AES128 maakt gebruik van 10 rondes, en AES256 gebruikt er 14. Elke ronde bestaat uit truukjes als bijvoorbeeld het vervangen van een byte door een andere byte volgens een lookup table, het shiften/roteren van bits in een byte, en het omwisselen van bytes.
Door al deze truuks treedt divergentie van je output op. Oftewel: als je 1 bit in de input wijzigt, dan zal je output er heel anders uit komen te zien. Elke encryptieronde zal de output nog een beetje meer wijzigen. Bij AES256 is door de langere key en de extra rondes de divergentie dus groter dan bij AES128, en daardoor is het nóg moeilijker om patronen in de output te ontdekken.
Toevoeging op 18/09/2015 01:57:48:
Om nog even terug te komen op het brute forcen waar je het in je eerste post over had:
Brute force attacks zijn voornamelijk nuttig bij wachtwoorden, omdat je dat eenvoudig kunt automatiseren. Je neemt een aantal woorden, encrypt die, en vergelijkt ze met de gecrypte versie. Isse ziempel.
In dit geval, bij gecrypte bestanden, is brute force veel minder werkbaar. Je moet namelijk voor elk wachtwoord dat je wilt proberen het bestand volledig decrypten en daarna beoordelen of het resultaat iets is wat op een normaal bestand lijkt. Met een beetje pech is die laatste stap handwerk. Dat ben je snel zat. ;-)
>> In dit geval, bij gecrypte bestanden, is brute force veel minder werkbaar.
Oké ... maar hoe wordt dan normaliter een ge-encrypt bestand gedecrypt? Dus stel ik encrypt een bestand met AES128 en gebruik als wachtwoord "appel". Een hacker krijgt mijn bestand te pakken en wil het gaan decrypten. Wat gaat hij dan met dat bestand doen?
Hij zal eerst proberen te achterhalen welk encryptiealgoritme je hebt gebruikt.
Vervolgens kan hij een tool aan het werk zetten die veelgebruikte wachtwoorden, voornamen en woorden uit woordenboeken uitprobeert. Daarom nooit een bestaand woord zoals "appel" gebruiken als wachtwoord.
Tot slot zal hij random strings uitproberen.
Als je er maar genoeg rekenkracht tegenaan gooit, is je wachtwoord altijd te achterhalen. Vraag is meer of de hacker die investering kan en wil betalen: waarschijnlijk is alleen al de stroomrekening van het rekencentrum hoger dan wat een gekraakt Ozzie-bestand opbrengt.
AES werkt overigens zo:
>> Vervolgens kan hij een tool aan het werk zetten die veelgebruikte wachtwoorden, voornamen en woorden uit woordenboeken uitprobeert. Daarom nooit een bestaand woord zoals "appel" gebruiken als wachtwoord.
Oké ... maar dit is dus gewoon bruteforcen toch? Hoe ik Willem begrijp is dat niet echt gebruikelijk om te bruteforcen op een ge-encrpyt bestand. Dus de vraag is ... hoe doen ze het dan? Via een wiskundig patroon? Dat lijkt me lastig, want dan zul je toch altijd de masterkey moeten hebben lijkt me.
Voorzover ik weet, wordt AES inderdaad meestal gekraakt met een word list aka password list zoals darkc0de.
Oke, dan is het dus een kwestie van een "veilig" password gebruiken. Heb jij trouwens een idee vanaf hoeveel tekens een password veilig (genoeg) is? Vroeger werd gezegd dat een password minimaal 8 tekens moet zijn, maar is dat nu nog steeds zo?
Probleem is dat mensen trucjes gaan uithalen om lange wachtwoorden te onthouden. Daardoor zijn ze niet langer willekeurig, waardoor de wachtwoordsterkte juist afneemt, of worden ze op een onveilige manier bewaard.
>> Probleem is dat mensen trucjes gaan uithalen om lange wachtwoorden te onthouden.
Wat voor trucjes bedoel je dan bijvoorbeeld?
Genereer zelf maar eens met PHP een aselecte string van 20 karakters en probeer die dan uit het hoofd te leren: bijna onmogelijk, zeker als je meerdere van die wachtwoorden moet onthouden.
wilhelmusvannassau
Dit zijn bijv. al 18 tekens. Zet er uitroeptekens tussen, gebruik hoofdletters en je bent al klaar toch? Lijkt me lastig te kraken ...
Wilhelmus!Van!Nassau
Gewijzigd op 18/09/2015 17:08:06 door Ozzie PHP
Werk in lagen.
Hoe zie je dat voor je wanneer het gaat om het encrypten van een bestand via een softwareprogramma?
>> en woorden uit woordenboeken uitprobeert.
> Oké ... maar dit is dus gewoon bruteforcen toch?
Nee, dat is een dictionary attack. Bij een brute force attack probeer je álle mogelijke combinaties van tekens waarmee je een wachtwoord kan maken.
> Zet er uitroeptekens tussen, gebruik hoofdletters en je bent al klaar toch?
Dat zijn standaard permutaties waar een hacker rekening mee zal houden. Je maakt het ze een stuk moeilijker als je spelfouten erin gaat verwerken. ;-) Dus iets als:
Wilhemels!Van!Napsau
>> Dat zijn standaard permutaties waar een hacker rekening mee zal houden.
Denk je dat? Maar hoe moet ik dat voor me zien. Dan moet er dus eerst een hacker zijn die bij zichzelf denkt ... hé, Wilhelmus van Nassau dat zou wel eens als wachtwoord gebruikt kunnen worden. Gaat hij dan vervolgens zelf daar variaties op bedenken? Het lijkt me namelijk niet dat software zoiets kan doen, want dan zou die software precies moeten weten om welke woorden het gaat en waar de spaties staan ... lijkt me vrij custom eigenlijk :)
Ozzie PHP op 18/09/2015 17:40:52:
Hoe zie je dat voor je wanneer het gaat om het encrypten van een bestand via een softwareprogramma?
Verloopt het decrypten ook via een programma? Wat op een PC staat? Die aan een ketting hangt? Of USB stick? Of kan iemand daarmee naar buiten lopen en thuis eens rustig bekijken wat er op de PC staat omdat deze beveiligd is met wachtwoord "hennie123" (met post-it aan de monitor).
Als de veiligheid van de PC ook in het geding is (onbeveiligd netwerk, geen firewall(s), virusscanner of anti-malware) dan kun je ook niet garanderen dat dat soort documenten niet in handen van derden vallen...
Zijn er ook gedragsregels voor omgang met dit soort documenten? Geregeld lees je in de media dat "gevoelige informatie" is gestolen omdat gebruikers het protocol niet volgen (de informatie was even vlug op een stick gezet).
Je "kluis" kan nog zo veilig zijn, maar als de data (tijdelijk) buiten de kluis ligt of de sleutels er langs liggen dan biedt de beveiliging geen beveiliging. Je moet ook kaders scheppen voor veilige omgang en veilig gebruik. Dat zijn ook beveiligingslagen. Simpelweg een hi-tech oplossing op 1 plek is verre van genoeg.
>> Verloopt het decrypten ook via een programma? Wat op een PC staat?
Ja, encrypten en dycrypten gaat via hetzelfde programma. Maar wat wil je daar mee zeggen eigenlijk?
Als ik een softwareprogramma gebruik om een bestand te beveiligen met een wachtwoord, wat kan ik volgens jou dan nog meer doen? Ik denk vrij weinig. Als het bestand gejat zou worden, dan heb ik toch echt vette pech vrees ik.