PAJ s Thuis Cryptography vigenèrecijfer

PAJ s Thuis Cryptography vigenèrecijfer Voor elke brok

Invoering

Dit cijfer werd uitgevonden in de 16de eeuw, en de eerste die door een Franse diplomaat, Blaise de Vigen geschrevenèopnieuw. Voor een lange tijd werd gedacht uncrackable te zijn, en het was populair voor het coderen van gevoelige gegevens voor verzending via het telegram systeem in de loop van de 19e eeuw. Het werd voor het eerst gekraakt door Kasiski in 1863.

Ik heb een programma waarmee u het coderen en decoderen van berichten en bestanden met behulp van de oorspronkelijke vorm van de code, die alleen behandelt hoofdletters geschreven. Het kan ook breken de cipher – decoderen van een gecodeerde tekst zonder de sleutel – gegeven genoeg tekst.

Door de normen van vandaag het cijfer is zwak. Toch is het nog steeds gebruikt, licht gewijzigd in de "opslaan document met een wachtwoord" functie in sommige toepassingen. De modificatie maakt het mogelijk om omgaan met alle bytes in plaats van alleen hoofdletters (via XOR), maar heeft nog steeds hetzelfde zwakke plekken.

Met behulp van het Programma

Het downloadpakket bevat een Windows 32-bit uitvoerbare, HTML documentatie en C-broncode. Tot nu toe heb ik de code met behulp van DevStudio en gcc onder Windows NT getest, maar het zou moeten werken op de meeste platforms. Als je bekend bent met computers en elementaire cryptografie zijn dan is het programma is grotendeels voor zichzelf, hoewel deze punten zijn de moeite waard benadrukken:

  • Om te werken met een bestand in te voeren! Bestandsnaam wanneer u wordt gevraagd voor een string. De uitgang wordt geschreven filename.vig
  • Op elk prompts eindigt (suggereren.). gewoon op Enter om de voorgestelde waarde te gebruiken
  • Terwijl het proberen om uit te werken een onbekende sleutel, wordt een monster van de versleutelde tekst weergegeven in kleine letters, samen met een monster van de onbedekte plaintext in hoofdletters.

Hoe de Cipher Works

Het cijfer heeft een plaintext / cijfertekst en een sleutel om te beginnen. Deze worden opgeruimd door het verwijderen van alle niet-alfabetische tekens, en kapitaliseren wat er overblijft. De opgeruimd sleutel moet niet nul lengte. Ten eerste wordt elk teken in de tekst is toegewezen aan een karakter in de sleutel, zoals deze:

Dan, elk personage heeft een Caesar shift toegepast, waarbij de mate van verschuiving wordt bepaald door de sleutel karakter. De onderstaande tabel toont precies wat er gebeurt. Om een ​​teken te coderen, vinden de kolom met de plaintext aan de top, en de rij met de toets aan de linkerkant. De cijfertekst is het karakter dat deze rij en kolom elkaar kruisen op. Decoderen, zoekt u de rij met de toets aan de linkerkant, en kijk langs deze totdat u de versleutelde tekst te vinden. Het leesbare is het teken op de top van deze kolom.

De cijfertekst voor het bovenstaande voorbeeld werkt te zijn:

Het kraken van de Cipher

Decoderen van een versleutelde tekst zonder is doorgaans mogelijk, mits het bericht aanzienlijk langer dan de sleutel (programma werkt alleen met sleutels minder dan 255 tekens), en de taal van de plaintext bekend is (het programma werkt alleen met het Engels). Natuurlijk kan het programma niet zeker zijn van wat het belangrijkste is – het kan alleen vinden de meest waarschijnlijke mogelijkheid. Hierdoor wordt informatie over elke beslissing aan de gebruiker, die vervolgens een kans om de automatische suggestie overschrijven.

De eerste stap is de lengte van de sleutel vast te stellen volgens de methode van toeval indexen. Om een ​​toeval index te berekenen, verschuiven de cijfertekst en vergelijk tegen zichzelf, tellen karakter wedstrijden:

In dit voorbeeld, voor een verschuiving van drie, zijn er twee wedstrijden op een totaal zeven, zodat het samenvallen index 28,57%. Voor willekeurige tekst de verwachte waarde is 3,85%, maar dit aantal is vaak hoger voor niet-willekeurige tekst in elke taal zijn, omdat sommige letters vaker dan andere. Voor Vigenere ciphertexts, het toeval index is hoger voor verschuivingen die een veelvoud van de sleutellengte dan anders (zie je waarom?). Het programma berekent de eerste 256 verschuift, en vindt de kortste waarvoor alle verschuivingen die een veelvoud van deze lengte zijn een toevallig getal groter dan 6%, wat suggereert de sleutellengte.

Het kennen van de sleutellengte, kan de cijfertekst up in stukken, die elk zijn gecodeerd door hetzelfde karakter in de sleutel te breken. Voor elk blok, probeer het decoderen van het met elke mogelijke sleutel letter (A. Z). Vergelijk de brief frequenties in elke mogelijke plaintext met een tafel van het Engels brief frequenties. De toetsletternaam waardoor de minste kwadraat afwijking is de meest waarschijnlijke kandidaat, die stelt het programma.

Om het kraken code te testen, gebruikte ik / usr / share / dict / woorden uit een Linux-systeem, een lijst met veel Engels woorden. Met dit veel cijfertekst, kan toetsen zolang 200 tekens worden ontdekt zonder dat de gebruiker dwingende eventuele automatische suggesties.

programma Ontwerp

  • Het algemene idee is om de code te maken eruit zien alsof het in een functionele taal zijn geschreven, zoals ML. Dit is niet strikt echter gehandhaafd, bijv. lussen worden gebruikt in plaats van diepe recursie.
  • Fouten worden door bellen vig_error zodra de fout wordt gedetecteerd. Deze maakt gebruik van setjmp / longjmp om terug te ontsnappen naar het hoofdmenu, dus er is geen null terugkeer codes aan de hand.
  • vig_malloc wordt gebruikt in plaats van malloc. Dit houdt toegewezen geheugen, dus roepen vig_freeall bevrijdt alles.
  • Functionele stijl low-level routines zijn geschreven, bijv. vig_loadfile neemt een bestandsnaam en laadt het in nieuw toegewezen geheugen.
  • Voor draagbaarheid, grootte en endian van data types doet er niet toe, en slechts POSIX-systeem oproepen worden gebruikt. Het programma gaat uit ten minste een 80 x 25 karakter terminal.
  • Globale variabelen worden vermeden, tenzij dit noodzakelijk is in lage functies niveau, bijv. opslaan van de stapel omgeving voor foutafhandeling. Functienamen hebben allemaal het voorvoegsel vig_.

Bron: pajhome.org.uk

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

9 + 16 =