[Release]Verschlüsselungsalgorithmus "ersetzen"

04/21/2013 16:18 CranK™#31
Quote:
Originally Posted by IgorGlock View Post
:) Am besten gleich ganzen Binärdateien von YMIR als Sourcode serviert bekommen. Da stehen dann soviele Türe offen, bis zum Ab____.
Ganz nett. Man könnte gegen schnellere Verschlüsselung dann XTEA austauschen. Ladezeiten währen dann viel optimaler bzw. gartnicht mehr notwendig.
Wenn man es richtig anstellt, kann man auch jeweils verschiedene Algorithmen für Packets, EPack-Archive und Protos verwenden.
04/21/2013 16:23 Padmak#32
Verschlüsseln:
Code:
for(i = 0;i<len;i++)
    data[i] == 0xFF ? data[i] = 0x00 : data[i] += 1;
Entschlüsseln:
Code:
for(i = 0;i<len;i++)
    data[i] == 0x00 ? data[i] = 0xFF : data[i] -= 1;
Müsste performant, sehr sicher und funktionierend sein :P

Padmak
04/21/2013 17:58 CranK™#33
Quote:
Originally Posted by Padmak View Post
Verschlüsseln:
Code:
for(i = 0;i<len;i++)
    [COLOR="Red"]data[i] = ((data[i] == 0xFF) ? 0x00 : data[i] + 1);[/COLOR]
Entschlüsseln:
Code:
for(i = 0;i<len;i++)
    [COLOR="Red"]data[i] = ((data[i] == 0x00) ? 0xFF : data[i] - 1);[/COLOR]
Müsste performant, sehr sicher und funktionierend sein :P

Padmak
??
04/21/2013 18:06 Padmak#34
Das soll einen dieser performanten und kleinen Algo andeuten, die Igor erwähnt hat, mehr nicht :D

Padmak
04/21/2013 20:15 Saeckpfeife#35
SRY, DASS ES NICHT ZUM THREAD PASST!

Quote:
Originally Posted by IgorGlock View Post
:) Am besten gleich ganzen Binärdateien von YMIR als Sourcode serviert bekommen. Da stehen dann soviele Türe offen, bis zum Ab____.
Ganz nett. Man könnte gegen schnellere Verschlüsselung dann XTEA austauschen. Ladezeiten währen dann viel optimaler bzw. gartnicht mehr notwendig.
Quote:
Originally Posted by CranK™ View Post
Wenn man es richtig anstellt, kann man auch jeweils verschiedene Algorithmen für Packets, EPack-Archive und Protos verwenden.
Quote:
Originally Posted by Padmak View Post
Verschlüsseln:
Code:
for(i = 0;i<len;i++)
    data[i] == 0xFF ? data[i] = 0x00 : data[i] += 1;
Entschlüsseln:
Code:
for(i = 0;i<len;i++)
    data[i] == 0x00 ? data[i] = 0xFF : data[i] -= 1;
Müsste performant, sehr sicher und funktionierend sein :P

Padmak
Ihr scheint ja ziemlich erfahren zu sein und ihr wollt euer Wissen bestimmt weitergeben, oder?^^ Würde auch gerne das ganze Zeug verstehen, was ihr da schreibt. Ok, ich weiß was ein Algorithmus ist, aber das war's auch schon zu dem Thema^^ Wäre nett wenn ihr mich in Skype adden könntet und mir bisschen was beibringen (muss ja nicht im Zusammenhang mit Metin2 stehen) :-)
04/22/2013 09:53 ƬheGame#36
Quote:
Originally Posted by Padmak View Post
Verschlüsseln:
Code:
for(i = 0;i<len;i++)
    data[i] == 0xFF ? data[i] = 0x00 : data[i] += 1;
Entschlüsseln:
Code:
for(i = 0;i<len;i++)
    data[i] == 0x00 ? data[i] = 0xFF : data[i] -= 1;
Müsste performant, sehr sicher und funktionierend sein :P

Padmak
Ist das nicht viel zu Simpel 0x00 mit 0xFF zu überschreiben und den rest +1 zu rechnen?
Oder Trollst du nur rum?
04/22/2013 09:57 Mi4uric3#37
Quote:
Originally Posted by Padmak View Post
Verschlüsseln:
Code:
for(i = 0;i<len;i++)
    data[i] == 0xFF ? data[i] = 0x00 : data[i] += 1;
Entschlüsseln:
Code:
for(i = 0;i<len;i++)
    data[i] == 0x00 ? data[i] = 0xFF : data[i] -= 1;
Müsste performant, sehr sicher und funktionierend sein :P

Padmak
Performant ja, sicher nee.
04/22/2013 14:13 TheMarv :<#38
Quote:
Originally Posted by ƬheGame View Post
Ist das nicht viel zu Simpel 0x00 mit 0xFF zu überschreiben und den rest +1 zu rechnen?
Oder Trollst du nur rum?
Man kann es ja noch abändern :P
Man kann auch eine simple Substitution, wie Padmak gepostet hat, erweitern, indem man immer 4 Bytes nimmt, das erste um +3 verändert, das zweite um -2 etc., wäre sicherer & genauso simpel ^.^
04/22/2013 14:38 IgorGlock#39
Also perfomant... es gibt ja Weiterentwicklungen von XTEA, die sind VIELFACH perfomanter. Wieso setzt man die jetzt nicht ein?
Mich würde es persönlich erfreuen wenn jemand aus der Community so ein Art eigen Packer/Entpacker in hoher Qualität entwickeln würde. Für sein Thread würd' ich "Sticky Position" anfordern :)

Das wär' doch was... Drag&Drop uvm. ganz easy und schnell :)
04/22/2013 15:41 CranK™#40
Quote:
Originally Posted by Padmak View Post
Das soll einen dieser performanten und kleinen Algo andeuten, die Igor erwähnt hat, mehr nicht :D

Padmak
Ja schon, aber ich habe mich nur gefragt, ob das nun Pseudocode oder voll funktionstüchtiger Code sein soll, da ich gelernt habe, dass die if mit dem "?"-Operator, nur bei Wertzuweisungen anwendbar ist....
04/22/2013 16:52 TheMarv :<#41
Quote:
Originally Posted by IgorGlock View Post
Also perfomant... es gibt ja Weiterentwicklungen von XTEA, die sind VIELFACH perfomanter. Wieso setzt man die jetzt nicht ein?
Mich würde es persönlich erfreuen wenn jemand aus der Community so ein Art eigen Packer/Entpacker in hoher Qualität entwickeln würde. Für sein Thread würd' ich "Sticky Position" anfordern :)

Das wär' doch was... Drag&Drop uvm. ganz easy und schnell :)
Mein Entpacker ist leider verloren gegangen, da meine Festplatte zerstört wurde <.<

Ich werde heute ein neuen schreiben, falls der auch ordentlich gewürdigt wird e.e

@Crank: Nein, der Code sollte an sich funktionieren :P
04/22/2013 17:58 King Sora#42
Quote:
Originally Posted by IgorGlock View Post
Also perfomant... es gibt ja Weiterentwicklungen von XTEA, die sind VIELFACH perfomanter. Wieso setzt man die jetzt nicht ein?
Mich würde es persönlich erfreuen wenn jemand aus der Community so ein Art eigen Packer/Entpacker in hoher Qualität entwickeln würde. Für sein Thread würd' ich "Sticky Position" anfordern :)

Das wär' doch was... Drag&Drop uvm. ganz easy und schnell :)
Auf deine Frage antworte ich mit einer Gegenfrage: Wieso setzt man denn nicht einen anderen public Verschlüsselungsalgorythmus ein, wie z.B. Blowfish?:
Code:
 uint32_t P[18];       
 uint32_t S[4][0x100]; 
 
 uint32_t f (uint32_t x) {
    uint32_t h = S[0][x >> 24] + S[1][x >> 16 & 0xff];
    return ( h ^ S[2][x >> 8 & 0xff] ) + S[3][x & 0xff];
 }
 
 void encrypt (uint32_t & L, uint32_t & R) {
    for (int i=0 ; i<16 ; i += 2) {
       L ^= P[i];
       R ^= f(L);
       R ^= P[i+1];
       L ^= f(R);
    }
    L ^= P[16];
    R ^= P[17];
    swap (L, R);
 }
 
 void decrypt (uint32_t & L, uint32_t & R) {
    for (int i=16 ; i > 0 ; i -= 2) {
       L ^= P[i+1];
       R ^= f(L);
       R ^= P[i];
       L ^= f(R);
    }
    L ^= P[1];
    R ^= P[0];
    swap (L, R);
 }
 
 void key_schedule (uint32_t key[], int keylen) {
    for (int i=0 ; i<18 ; ++i)
       P[i] ^= key[i % keylen];
    uint32_t L = 0, R = 0;
    for (int i=0 ; i<18 ; i+=2) {
       encrypt (L, R);
       P[i] = L; P[i+1] = R;
    }
    for (int i=0 ; i<4 ; ++i)
       for (int j=0 ; j<0x100 ; j+=2) {
          encrypt (L, R);
          S[i][j] = L; S[i][j+1] = R;
       }
 }
(Quelle: Wikipedia)

Die performanten XTE-Algorythmen sind unsicherer, da die Blöcke weniger bearbeitet werden, was die Performance bringt.

Man kann bei jeder Verschlüsselung mehr Perforcmance erzeugen, aber nur indem man den eigentlichen Algorythmus schwächer oder kürzer macht, es kommt nur drauf an was dir wichtiger ist.

Es würde sicherlich auch locker genügen wenn man sich seine eigene "Verschlüsselung" schreibt und die Bytes nach belieben verdreht. :D

MfG. Sora
04/22/2013 18:34 .Alessa#43
Das müsste man doch dann nur noch in dem archiver und der game ändern. Sehr gutes Tutorial, ich hatte auch schonmal solche Ideen, aber kam nie zur Umsetzung, da mir die Kenntnisse in C++ deutlich fehlen. Aber nun dürfte sich dort schon so einiges machen lassen. Wenn das kein Thanks wert ist, weiß ich auch nicht mehr.
04/22/2013 19:51 CranK™#44
Quote:
Originally Posted by .Alessa View Post
Das müsste man doch dann nur noch in dem archiver und der game ändern. Sehr gutes Tutorial, ich hatte auch schonmal solche Ideen, aber kam nie zur Umsetzung, da mir die Kenntnisse in C++ deutlich fehlen. Aber nun dürfte sich dort schon so einiges machen lassen. Wenn das kein Thanks wert ist, weiß ich auch nicht mehr.
Es kommt drauf an, wie sehr du den Algorithmus verändert hast.
Wenn nur ein paar HEX-Stellen im XTEA-Algorithmus verändert wurden, dann kannst du das so lassen und musst halt den Archiver dementsprechend anpassen.
Aber wenn du extreme Änderungen vornimmst, dann musst du natürlich eine separate DLL schreiben, die das für den Archiver regelt.

Wenn ich Zeit finde, werde ich demnächst auch noch mehr kuhles Zeug mit euch teilen :>
04/23/2013 13:23 ƬheGame#45
Gibt ne Library mit sehr vielen verschlüsselungs methoden([Only registered and activated users can see links. Click Here To Register...])

high speed stream ciphers -> Panama, Sosemanuk, Salsa20, XSalsa20
AES and AES candidates -> AES (Rijndael), RC6, MARS, Twofish, Serpent, CAST-256
other block ciphers -> IDEA, Triple-DES (DES-EDE2 and DES-EDE3), Camellia, SEED, RC5, Blowfish, TEA, XTEA, Skipjack, SHACAL-2

u.s.w

am besten den Privatkey den man ja irgendwo haben muss noch hashen damit er nicht allzu leicht auszulesen ist und dann sollte das ganze +- "sicher" sein, am besten einen ALGO nehmen der zwische 8-24 runden braucht damit das ganze etwas schneller ist als der XTEA der 32 braucht. Ich würde einen AES (Rijndael) 128bit (10 runden) nehmen da dieser ziemlich schnell und sehr sicher ist =) Sofern der Privat key genügend "versteckt" ist. Natürlich wird nichts davon Leute wie Crank davon abhalten euren Client zu entpacken, aber damit sollten die ganzen Noobs die Public-Tools brauchen nicht mehr an eure Daten kommen.