C/C++ lille introduktion til Xor kryptering
|
23-07-2014, 13:43
(Denne besked var sidst ændret: 30-07-2014, 15:49 af havregrød.)
|
|||
|
|||
C/C++ lille introduktion til Xor kryptering
Vil i nær fremtid smide et par tråde op omkring kryptering samt netværk. Spørg endelig hvis i har et emne, I gerne vil have taget op!
Introduktion til Xor
Allerførst, jeg vil forsøge at skære det meste ud i pap, så selv lycia-slænget har en chance. Hvad skal jeg bruge det til? Enhver programmør vil på et eller andet tidspunkt kommer ud for, at skulle behandle sensitiv data. Men udover at kryptere data for at beskytte mod sniffing data leaks .o.l., kan kryptering anvendes til mange andre formål. Lad os forestille os, at vi har lavet et server-klient login-system. Systemet skal være sikkert, så man får et nyt kodeord, hvergang man logger ind (ligesom nemid). Systemet ser således ud:
En anden mulighed til et lign. system, kunne laves ved at benytte assymetriske krypteringsalgoritmer. Assymetriske chipers bruger en key til at kryptere, og en anden til at dekryptere. Jeg vil dog komme ind på en lidt simplere krypteringsalgoritme, også kaldet chiper, kaldet Xor. Fordelen ved Xor er, at det er meget nemt at forstå, og ikke kræver meget forhåndsviden, før man kan gå i gang. Hvad er kryptering? Kryptering har til formål at omdanne data til en 'ulæsbar' version, der umuliggør, at den oprindelige data kan læses uden brug af den modsatte process, der indebærer at man har den originale nøgle. En krypteringsalgoritme eller cipher, skal egentlig bare betragtes som en hvilken som helst anden algoritme. Altså, en slags opskrift på, hvordan noget skal håndteres. Lad os kigge på RSA algoritmen: p = 3 and q = 11 // Vælg to primtal n = p * q = 3 * 11 = 33 // Beregn φ(n) = (p - 1) * (q - 1) = 2 * 10 = 20 // Beregn e = 7 // e skal være 1<e< φ(n) og e samt n er indbyrdes primisk // Bestem end værdi hvor (d * e) % φ(n) = 1. // F.eks. d = 3 [(3 * 7) % 20 = 1] (e, n) => (7, 33) // Public key (d, n) => (3, 33) // Private key m = 2 is c = 27 % 33 = 29 // Encrypting c = 29 is m = 293 % 33 = 2 // Decryption Overstående eksempel var mest for at forklare en algoritme, og ikke et forsøg på, at lære jer hvordan RSA algoritmen fungerer. For at lave et par RSA keys, skal man altså bare følge 'opskriften'. Hvordan virker Xor? Som en start kan jeg afsløre, at chiperen ikke kun hedder Xor, fordi det lyder |337!1. Xor er et sammendrag af "exclusive or", og er en bitwise boolean operator i C++. Den kan altså returnere TRUE eller FALSE. Hvis den ene Xor gate er TRUE og den anden er FALSE, i vilkårlig rækkefølge, returneres altid TRUE. Hvis begge er TRUE eller False Returneres FALSE. Kode: |0||0|=|0| // FALSE Men hvordan kan vi bruge det til at kryptere noget? Lad os forestille os, at vi ville kryptere bogstavet 'P'. 'P's' ascii værdi er 80. Vi skriver 80 om til det binære talsystem (2-tals) , i stedet for det decimale (10 tals). Kode: P-->80-->1010000 Vi finder et bogstav, vi vil anvende som "nøgle". Kode: A-->65-->1000001 Tror egentlig ikke jeg behøver forklare det her... Kode: 1010000 // P For at dekryptere vores bogstav igen, gør vi det samme. Kode: 0010001 // ASCII 17 -------- // Xor 1010000 // P [/code] TADA! Simpelt? Prøv selv! Hvis vi ville have krypteret et ord eller end string, havde vi benyttet samme fremgangsmåde, bare med alle tegn. Xor i C++ I C++ er Xor operatoren '^' tegnet. Lad os starte med, at kryptere og dekryptere en variabel af 'char' data typen.
Hvis vi skulle gøre dette ved en string, er alt vi behøver, som førnævnt at 'køre' det hele igennem. Lad os slutte af med, at lave et program med en Xor encrypt / decrypt function.
Så let kan kryptering være.Blev skrevet i går kl. 3 :D. Kan godt være jeg kommer til at rette lidt i den... |
|||
23-07-2014, 18:15
|
|||
|
|||
RE: C/C++ lille introduktion til Xor kryptering
Super godt forklaret :) Jeg lavede engang to XOR kryperingsfunktioner i PHP, men det er meget vigtigt at gøre opmærksom på at det er en meget svag kryptering, og kan nemt brydes hvis den samme passphrase bruges flere gange.
|
|||
23-07-2014, 20:35
|
|||
|
|||
RE: C/C++ lille introduktion til Xor kryptering
Kode: #ifndef C_XORSTRING_H XorStr<0x58,9,0xE76FE99B>("\x35\x36\x34\x34\x72\x39\x32\x33"+0xE76FE99B).s = mono.dll |
|||
24-07-2014, 06:15
|
|||
|
|||
RE: C/C++ lille introduktion til Xor kryptering
Tak for det dejlige læsestof. +1
|
|||
24-07-2014, 08:37
|
|||
|
|||
RE: C/C++ lille introduktion til Xor kryptering
Godt arbejde havre!
Det er et stykke tid siden jeg ar arbejdet med den slags, så altid godt at få opfrisket lidt på sagerne.
Don't learn to hack, hack to learn
|
|||
24-07-2014, 12:34
|
|||
|
|||
RE: C/C++ lille introduktion til Xor kryptering
Bedste tutorial/guide/introduktion på Shellsec i rigtig lang tid. Du fortjener +rep for den.
Hemmeligt medlem af Team Rocket. Ash finder aldrig ud af hvem der stjal hans pikachu!
|
|||
19-05-2020, 15:21
(Denne besked var sidst ændret: 19-05-2020, 15:22 af evil.)
|
|||
|
|||
C/CPP XOR
https://www.shellsec.pw/traad-c-c-lille-...kryptering
Q: Hvad skal jeg bruge det til? A: OTP keystreams otp_keystream [ -k key ] || [ -K keystream [-o offset]] < in_file > out_file / pipe / etc # dd if=/dev/sda bs=$((1024*1024*10)) | ./otp_keystream -K bigrandom | nc -v yesyoumayhaveacopy.com 10101 Kode: /* begin otp_keystream.c */ |
|||
|
User(s) browsing this thread: 1 Gæst(er)