If you have more than a few bank cards, door-entry keycodes, or other small numeric passwords to remember, it eventually gets to be a hassle. The worst, for me, is a bank card for a business account that I use once in a blue moon. I probably used it eight times in five years, and then they gave me a new card with a new PIN. Suk.
Quick, What’s My PIN?
How would a normal person cope with a proliferation of PINs? They’d write down the numbers on a piece of paper and keep it in their wallet. we all know how that ends, right? A lost wallet and multiple empty bank accounts. how would a hacker handle it? write each number down on the card itself, but encrypted, naturally, with the only unbreakable encryption scheme there is out there: the one-time pad (OTP).
The OTP is an odd duck among encryption methods. They’re meant to be decrypted in your head, but as long as the secret key remains safe, they’re rock solid. If you’ve ever tried to code up the s-boxes and all that adding, shifting, and mixing that goes on with a normal encryption method, OTPs are refreshingly simple. The tradeoff is a “long” key, but an OTP is absolutely perfect for encrypting your PINs.
The first part of this article appears to be the friendly “life-hack” pablum that you’ll get elsewhere, but don’t despair, it’s also a back-door introduction to the OTP. The second half dives into the one-time pad with some deep crypto intuition, some friendly math, and hopefully a convincing argument that writing down your encrypted PINs is the right thing to do. Along the way, I list the three things you can do wrong when implementing an OTP. (And none of them will shock you!) but in the end, my PIN encryption solution will break one of the three, and remain nonetheless sound. curious yet? Læs videre.
The PIN Solution
So first the solution to the bank card problem: write your PIN encrypted with a secret that only you know. instead of needing to remember a four-digit number for each new card, you’ll just need one four-digit number forever. The key is to choose an encryption scheme that’s easy enough to undo so that you won’t look too strange when asked to type the PIN in at the bank teller’s window. This is the classic use of the OTP — an encryption that you can undo in your head.
First, randomly select a secret four-digit number. Then, subtract that number from your PIN and write the result on your card. To get your PIN, when standing in front of the bank teller, simply look down at the card and add the secret number back. The teller will think that you’ve written your PIN on the card. feel free to feel smug, because you’ve used an unbreakable encryption scheme.
Instead of normal addition and subtraction, with the carrying and borrowing across digits, you will want to use modulo-10 math — adding or subtracting ten from the result any time it gets outside the range 0-9. We’ll talk about why below, but for now, here’s a working example.
Suppose the PIN is 1234 — it has to happen so someone, right? — and my random secret number is 1337, naturally. Let’s encrypt. Subtracting 1 from 1 gives a zero, so I write that down. Subtracting 3 from 2 gives -1, which is where the modulo-10 arithmetic comes in. In this case, -1 turns into 9 by adding ten. 3 – 3 = 0, and 4 – 7 = 7, mod-10. My card now has 0907 written on it.
Now let’s decrypt. looking down at the card, I see a 0 and add 1. 9 + 3 = 12, however, so we’ll need to subtract ten to get 2. (That’s the reason to choose addition for the decryption stage, it’s easy to just drop any leading 1s.) 0 + 3 = 3 and 7 + 7 = 14 -> 4<. I type in 1234, and the money is mine! Once you get the hang of adding your secret number to any other number, digit-wise mod-10, you’ll be surprised how quickly it will work. try it out and see if you get good at it within ten minutes. One-Time Pads A one-time pad is both the simplest symmetric encryption scheme and also completely unbreakable. It has three crucial features, two of which were demonstrated above, and getting any of them wrong can be catastrophic. The most important feature of an OTP is that the password needs to be random, and the same length as the text that it encrypts — hence the four-digit secret for the PIN. In an OTP, everything revolves around the secret, which is also its Achilles’ heel. For a four-digit number, keeping a four-digit secret is no problem. but imagine that you want to send gigabytes of encrypted photos of your vacation to a friend. That’s a lot of key material to keep on-hand and secret. Original by [Matt_Crypto], Public DomainSecond, the method of combining the message with the secret has to be similar to the modulo arithmetic, in that the set of encrypted characters and the set of plaintext characters — the PIN in our example — have to map en til en. Mod-10 ensures this easily: both are in the range 0-9. maybe you’re familiar with using the XOR operator on binary data, which is the same thing as either additipå eller subtraktion, mod-2. (0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1 og 1 + 1 = 2 -> 0. QED.) Du kan også bruge bogstaver og pakke alfabetet rundt på “Z” som Caesar-chifferen eller rot13, som bare kortlægger alfabetet i tal og gør matematik mod 26.
For det tredje, og måske er dette en Corollary of the First, bør du ikke genbruge hemmeligheden i en engangspude. Du tror, at dette var indlysende, da det endda er i navnet på krypteringsmetoden, men det er svært at gøre i praksis. Og faktisk bryder min pin-krypteringsskema denne regel ved at bruge den samme hemmelighed på tværs af flere nøgler. Vi kommer snart ind i det.
Messing den perfekte kryptering
Hvorfor er en OTP ubrydelig? At bryde de fleste krypteringsordninger koger ofte ned til sandsynlighed og statistik. For eksempel, hvis du krypterer en tekst med Caesar-krypiseringen ovenfor, er hvert bogstav i plaintext kortlagt til et andet enkelt bogstav, hver gang det forekommer i CIPHERTEXT. Hvis du ved, at den oprindelige tekst er på engelsk, hvor det mest almindeligt anvendte brev er “E”, er det en god indsats, at hvis “Q” er det mest almindelige bogstav i CIPHERTEXT, står det for “E”. Det vil sige, vi finder statistiske ligheder mellem plaintext og ciphertext, og bruger dem til at lave en bro mellem de to.
Ved hjælp af en hemmelig nøgle, der er så længe den plaintext, og tilfældigt valgt, bryder ethvert statistisk forhold til CIPHERTEXT. I betragtning af en bestemt CIPHERTEXT, der er skrevet ned på mit kort, er hver pin fra 0000 til 9999 mulig, og hvis nøglen blev valgt tilfældigt, er det lige så sandsynligt. Der er ingen oplysninger om plaintext i CIPHERTEXT – det er i det væsentlige Claude Shannons bevis (absolut klassisk PDF) i en nøddeskal. Og derfor er en OTP ubrydelig.
Diana One-time Pad [US NSA], Public DomainThis er faktisk nøglen til at forstå kryptografien: Det er et forsøg på at scramble op oplysningerne om plaintext under krypteringsprocessen, så selvom en kortere nøgle anvendes, nej, nej Statistisk relevante spor af plaintext forbliver. Dette ønske om korte nøgler er ikke kun et spørgsmål om bekvemmelighed enten: Forestil dig, at du og Hackaday tidligere skulle udveksle 500 kib af tilfældige data for blot at downloade denne artikel og læse den. Forestil dig længden af WiFi-adgangskoden, som du skal skrive ned for gæster! Dette er den følelse, hvor OTP er trivial og uinteressant – det kan være ubrydeligt, men hemmelighederne er lige for lange for de fleste applikationer. Real Crypto handler om at finde algoritmer, der bryder det statistiske forhold med et minimum af nøglemateriale.
Med det i tankerne kan du skrue op en OTP-implementering ved at bruge en kort eller ikke-tilfældig adgangskode. Forestil dig at bruge 1 som din adgangskode og gentage det som nødvendigt; Vores Ciphertext ville læse 2345, og stiften ville gætte på det andet forsøg. Du vil også bruge en tilfældig adgangskode; Plukker 0000 fordi det gør matematikken let er det eneste værre end ovenstående. (Selvom det strengt tales, ville jeg rulle om, hvis jeg fik 0000, 1111, 9999, 1234, 4321, eller lignende.) Anyway, brug ikke din fødselsdag. Gamle telefonnumre af barndoms venner kan være acceptable.
Modulo-aritmetiske rolle er lidt mere subtil. Uanset hvilken funktion der anvendes, skal sætet af mulige tegn i plaintext kortlægge en til-en med CIPHERTEXT. Hvorfor? Forestil dig at du brugte simpel tilføjelse i stedet for MOD-10-tilsætning. For at få det sidste ciffer i vores pin-ciphertext brugte vi 4 – 7 = -3 -> 7 og dekrypterede med 7 + 7 = 14 -> 4. Hvis vi skrev ned -3 i stedet, ville en angriber vide, at vores sidste ciffer kunne ikke kunne ‘t være større end 6, fordi du tilføjer 9, maksimumsværdien, giver kun 6. Vi har lækket information ved at have et større sæt i CIPHERTEXT end i plaintext.
Og det efterlader den sidste vej til at ødelægge: Genbrug af “one-time” pad. Indlysende, ikke? Forkert.
Lorenz Machine, Public Domain
På den ene side er genanvendelse en bestemt forpligtelse. Genbrug af et kodeord i en meget lignende krypteringsskema brød “tunny”, en vigtig kode under WWII. En krypteret meddelelse om 4.000 tegn blev sendt, men ikke modtaget korrekt. Afsenderen sendte beskeden med samme hemmelighed, men lavede små ændringer i teksten ved hjælp af forskellige forkortelser og så videre. Dette gav de allierede nok til at bryde tunny og omvendt ingeniør den maskine, der krypterede den. spil over.
Her er den matematik, der gjorde den tunske dekryptere arbejde, og skulle overbevise dig om næsten aldrig genbruge en nøgle. Hvis vi koder for meddelelserne A og B med den hemmelige nøgle C, og nogen overhaler begge, kan de bare mod dem sammen for at få (en mod c) mod (b mod c) = (A mod b) mod C mod C = A mod B, hvor mod er den bitwise eller nummer-wise modulo operatør, som vi nu er vant til. Da du tager den binære Modulo, er dets eget omvendt, resultatet er noget, der er relateret til både plaintekster og uafhængigt af den hemmelige nøgle.
From here, comparing smart guesses for A and B and comparing them with the A mod B result can break the code. So if you’re pretty sure that “attack” appears in both texts (crypto types always encrypt “attack at dawn”),Så kan du prøve modding “angreb” sammen i forskellige positioner, indtil du får en kamp med en mod B.
En overraskelse slutter.
Men her er det sidste twist! Vi kan komme væk med at genbruge den hemmelige nøgle på tværs af alle vores bankkort, selv på trods af ovenstående matematik. Hvorfor? Fordi stifterne selv er tilfældige. I modsætning til de naturlige sprogmeddelelser, der sendes under krigstid, er en mod B lige så tilfældigt som en mod C, hvis både A og B er tilfældige stifter.
Så det er sådan, at en hacker husker pins: ved at lære meget om engangs pad, hvordan man skal bryde det, og hvordan det alligevel er nyttigt, hvis den besked, den har brug for at beskytte, er kort. Og hvordan, for bestemte meddelelser, kan du endda bryde reglerne.
0