Gå til innhold

Feedback på encrypter


Anbefalte innlegg

Heisann folkens =)

Har nylig begynt å leke litt med C++ igjen etter en laaang pause, og fant ut at jeg skulle prøve å lage en encrypter.. Føler jeg har kommet frem til et rimelig kjapt og sikkert program, men vil gjerne høre feedback på koden..

Tror det meste skal være ganske godt kommentert også =)

 

Binærfil og kildekode ligger på http://sourceforge.net/project/showfiles.php?group_id=219133

 

På forhånd takk,

Jon

Endret av Jonhoo
Lenke til kommentar
Videoannonse
Annonse

for at algoritmen din skal være sikker, så må nøkkelen være like lang som plaintext.

 

post gjerne en fil med ciphertext (hvor det er brukt repeterende key) så er det sikkert noen her som kan dekryptere.

 

edit: altså, det at du også XOR'er keysize og passordet begge veier gjør ingenting for sikkerheten kontra bare å XOR'e passordet forfra, du må fortsatt ha like lang key som det du skal kryptere for at det skal være sikkert

Endret av charlie di meola
Lenke til kommentar

h e l l o   w o r l d
000102030405060708090a

 

Uansett er ikke XOR alene en spesielt sikker kryptering, men det trenger den heller ikke nødvendigvis være.

Enkel Xor kryptering vil gjøre at man kvitter seg med en god del data-innbrudd.

 

Veldig mange gir opp så fort det ikke er ren-tekst.

Endret av GeirGrusom
Lenke til kommentar
Heisann folkens =)

Har nylig begynt å leke litt med C++ igjen etter en laaang pause, og fant ut at jeg skulle prøve å lage en encrypter.. Føler jeg har kommet frem til et rimelig kjapt og sikkert program, men vil gjerne høre feedback på koden..

Tror det meste skal være ganske godt kommentert også =)

 

Binærfil og kildekode ligger på http://sourceforge.net/project/showfiles.php?group_id=219133

 

På forhånd takk,

Jon

 

Enhver algoritme som bruker XOR er usikker, med mindre du genererer en key som er like lang som selve teksten du skal kryptere. Denne keyen må være 100% tilfeldig. Med tilfeldig menes her tilfeldighet i høyere grad enn å bruke f.eks. Cs rand() eller en hvilken som helst annen random-funksjon. De fleste operativsystem har en pseudo random number generator (PSRNG) som generer svært gode, men ikke gode nok, tilfeldigheter for denne typen kryptering. Det ideelle er å kunne lese av diverse svingninger forbundet med radioaktivitet.

 

Dette er kjent som en One time pad (http://en.wikipedia.org/wiki/One-time_pad), og såfremt keyen er 100% random finnes det ingen måte å knekke det på. Alle løsninger er like sannsynlige, og det er ingen måte å regne seg fram til hvorvidt originalteksten var "negative" eller "bestemor".

 

Boken "Applied Cryptography" av Bruce Schneier regnes for å være bibelen når det kommer til praktisk kryptografi, jeg anbefaler deg absolutt å ta en titt - haugevis å lære.

 

Dette er vel mer eller mindre et direkte sitat av hva han skriver om XOR-kryptering (med unntak av en One Time PAD):

 

Here's how to perform an attack that will break the trivial XOR encryption in a few minutes:

 

Determine how long the key is

 

This is done by XORing the encrypted data with itself shifted various numbers of places, and examining how many bytes are the same. If the bytes that are equal are greater than a certain percentage (6% accoridng to Bruce Schneier's Applied Cryptography second edition), then you have shifted the data by a multiple of the keylength. By finding the smallest amount of shifting that results in a large amount of equal bytes, you find the keylength.

 

Shift the cipher text by the keylength, and XOR against itself.

 

This removes the key and leaves you with the plaintext XORed with the plaintext shifted the length of the key. There should be enough plaintext to determine the message content.

Lenke til kommentar

WoW, takk for mye feedback! =)

Tror ikke sistnevnte metode vil fungere ganske enkelt fordi det ikke kun gjennomføres en enkelt XORing.. Som nevnt innledningsvis så XORes teksten tre ganger.. Først med passordet fra starten, så med passordet fra slutten for å forhindre for eksempel at dersom en eventuell "bad guy" kjenner til de første bytene av teksten så kan han bare putte inn den og få ut passordet.. Og gjennom lengden på passordet for å gjøre opp for symetriske passord og sikre at ikke deler av filen blir kryptert med et ufullstendig passord...

 

Har som sagt nettopp begynt med kryptering, så det er bare å si at jeg er helt på jordet her hvis jeg er det.. =P

 

Av nysgjerrighet: Hvordan fungerer andre krypteringsrgrammer som ikke bruker XOR?

Lenke til kommentar
En snekker og nok en snekker

satt på stillaset og spaset.

Da er det en planke knekker og

vipper dem vekk fra stillaset.

Og A hugg seg fast med sin hammer,

men B la beslag på hans legge,

og en vill og evindelig jammer

steg opp mot det blå fra dem begge.

Og hvinet ble verre og verre,

og folk fulgte med dem i jammer’n.

Slipp, hylte hammerens herre,

slipp, ellers slår jeg med hammer’n.

De hang der, gud bedre, og spaset

for mengdens beundrende blikke.

Men så ble det stilt på stillaset,

og plutselig hang de der ikke.

Men om det var ham som hang fast,

som skal legges til last,

eller ham som sa slipp, som slapp,

det blir hipp som happ.

Og dette vil ergre de store,

men enkelte små vil det more.

;)

Lenke til kommentar

i din algoritme har du

out = plaintext ^ key ^ key[length - i - 1] ^ length;

 

men tenk deg at

altkey = key ^ key[length - i - 1] ^ length;

 

og

out = plaintext ^ altkey;

 

da vil du bare trenge å finne altkey ved hjelp av metoder som brukes til å cracke "vanlig" xor'ing (out = plaintext ^ key).

den originale keyen som du bruker er vanskeligere å finne, men den trenger man ikke for å dekryptere.

og da ser du kanskje hvorfor algoritmen ikke gir mer sikkerhet enn rett frem xor'ing (det blir akkurat det samme).

Endret av charlie di meola
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...