GM RSA stellt einige Funktionen zur Benutzung des RSA Algorithmus
mit dem Game Maker bereit. Weiter enthalten sind einige weitergehende
Funktionen, die auf den Basisfunktionen aufbauen.
Inhalt:
1) Was ist RSA?
2) Funktionsweise der Dll
3) Keyfiles
4) Funktionen
5) Erweiterte Funktionen
[hide=1) Was ist RSA]RSA ist - grundlegend gesagt - ein Algorithmus zur Verschlüsselung von
Daten. Genauer gesagt ein Asymetrisches Verfahren. Das heißt, dass im
Gegensatz zu gängigen Symmetrischen Verfahren es zwei Schlüssel gibt:
Einen zum Entschlüsseln und einen zum Verschlüsseln, wobei sich die beiden
Schlüssel nicht auseinander berechnen lassen.
Der Schlüssel zum Verschlüsseln heißt dabei Public Key, der Schlüssel zum
Entschlüsseln Private Key. Das kann z.B. für den Aufbau einer sicheren
Chatverbindung benutzt werden: Person A und Person B generieren beide
RSA Schlüsselpaare und schicken sich jeweils den Public Key zu. Person A
schickt also an Person B Nachrichten, die mit dessen Public Key verschlüsselt
wurden. Nur Person B kennt den zugehörigen Private Key und kann die
Nachrichten von A entschlüsseln.
Ein Key besteht dabei immer aus zwei Werten: Zunächst einmal aus dem eigentlichen
Private/Public Key und dann noch aus dem RSA Modul. Dieses ist bei beiden Schlüsseln
gleich.
Private und Public Key werden dabei von der Dll zusammen mit dem RSA Modul erzeugt,
sie stehen in einem bestimmten mathematischen Zusammenhang (der im Prinzip durch einige
Zahlen gegeben ist, die allerdings nach der Key Erzeugung aus Sicherheitsgründen gelöscht
werden).
Die eigentliche Ver/Entschlüsselung ist dabei die mathematische Funktion
A=B^(key) mod modul
wobei key bei der Entschlüsselung von B für den Public Key und bei der Verschlüsselung
von B für den Private Key steht.
Genaueres über RSA findet sich bei Wikipedia: de.wikipedia.org/wiki/RSA-Kryptosystem
[/hide]
[hide=2) Funktionsweise der Dll]Die Dll hat intern drei Variablen deklariert, Public Key, Private Key und RSA Modul.
Diese lassen sich entweder von der Dll selber befüllen (indem sie einfach Keys erzeugt)
oder durch Verwendung der Set Funktion (dabei sollte aber auf korrekte Keys geachtet werden).
Beim Setzen der Keys kann man allerdings, wenn man nur vorhat zu Verschlüsseln, der Private Key
auf 0 gesetzt, bzw genauso wenn man Entschlüsseln möchte, der Public Key auf 0 gesetzt
werden.
Ver- bzw Entschlüsseln greift dabei intern immer auf die gespeicherten Keys zurück, wobei es aus
Sicherheitsgründen ratsam ist, diese nach Benutzung mit der Set Funktion wieder zu löschen.[/hide]
[hide=3) Keyfiles]Viele der erweiterten Funktionen bieten die Arbeit mit Keyfiles an. Diese werden von den entsprechenden
EnCrypt Funktionen erzeugt, wenn die angegebene Keyfile nicht existiert. Keyfiles haben einen Namen,
der eigentliche Dateiname setzt sich dabei zusammen wie folgt: <Keyfilename>+_public.key für Public Keys
und <Keyfilename>+_private.key für Private Keys. Die eigentlichen Dateien sehen dabei wie folgt aus:
<Public/Private Key 1>
<RSA Modul 1>
<Public/Private Key 2>
<RSA Modul 2>
...
Die meisten Funktionen benutzen allerdings nur Keyfiles mit einem gespeicherten Key.[/hide]
[hide=4) Funktionen]RSA_GenKey()
erzeugt neue RSA Schlüssel
RSA_SetKey(public,private,modul)
setzt die verwendeten Schlüssel
und den RSA Modul
RSA_Crypt(Val)
Verschlüsselt den angegebenen
Wert mit dem aktuell gesetzten
public key und dem RSA Modul
RSA_DeCrypt(Val)
Entschlüsselt den angegebenen Wert
mit dem aktuell gesetzten public
key und dem RSA Modul
RSA_GetPublic()
Gibt den aktuellen Public Key
zurück
RSA_GetPrivate()
Gibt den aktuellen Private Key
zurück
RSA_GetModul()
Liefert den RSA Modul zurück[/hide]
[hide=5) Erweiterte Funktionen]RSA_EnCrypt_File(file,keyfile/public,target/modul,target)
Verschlüsselt die Datei file wahlweise mit Angabe
einer Keyfile (wobei diese den Namen <keyfile>+_public.key haben
muss), wobei neue Keys erzeugt werden, wenn die Datei
<keyfile>+_public.key nicht existiert (sie werden dann
unter <keyfile>+_public.key und <keyfile>+_private.key gespeichert)
oder durch direkte Angabe des Public keys und des RSA Moduls.
Das Ergebnis wird unter target gespeichert.
RSA_DeCrypt_File(file,keyfile/private,target/modul,target)
Entschlüsselt die Datei file entweder mit dem Private Key
<keyfile>+_private.key oder mit dem angegebenen Private Key
und dem RSA Modul. Das Ergebnis wird unter target gespeichert.
RSA_Multi_EnCrypt_File(file,keyfile,keynumb,target)
Verschlüsselt eine Datei mit mehreren Schlüsseln; deren Zahl
wird entweder durch die Anzahl der in keyfile enthaltenen
Schlüssel oder (falls <keyfile>+_public.key nicht existiert)
es werden keynumb Schlüssel generiert und als keyfiles gespeichert.
die verschlüsselte Datei wird nach target geschrieben.
RSA_Multi_DeCrypt_File(file,keyfile,target)
Entschlüsselt die Datei file mit den in keyfile enthaltenen Schlüsseln
und schreibt das Ergebnis nach target.
RSA_EnCrypt_String(String,keyfile/public,modul)
Verschlüsselt den String String mit dem in <keyfile> enthaltenen
Key oder dem Public Key und dem angegebenen RSA Modul.
RSA_DeCrypt_String(String,keyfile/private,modul)
Entschlüsselt den String String mit dem in <keyfile>+_private.key
enthaltenen key oder mit dem angegebenen Private Key und dem RSA
Modul.[/hide]
Kurz gesagt: GM RSA ist eine Verschlüsselungserweiterung für den Game Maker.
Interessant ist sie besonders für Fälle, in denen Maps und Ressourcen extern gelagert
werden sollen, ohne dass ein Spieler sie einfach durch andere Ressourcen ersetzen kann.
In diesem Fall kann dem GM einfach der Private Key gegeben werden, während die Ressourcen
mit dem zugehörigen Public Key verschlüsselt werden (der dann natürlich nicht im Programm
gespeichert wird), sodass der Spieler im schlimmsten Fall die Ressourcen auslesen, aber sie
nicht verändern kann.
Anmerkung: Die Codes sind teilweise nicht von mir selber geschrieben, sondern von Wikipedia
zusammengeklaut - nur um mich nicht mit fremden Lorbeeren zu schmücken.
Sollte jemand ein paar brauchbare Skripts mit GM RSA schreiben, wäre ich sehr erfreut drüber,
wenn er sie mir zuschickt, die Extension lässt sich jederzeit erweitern
Download (Dort findet sich auch ein kleines Beispiel)
Zur Benutzung: Ich würde mich natürlich über einen Credits Eintrag freuen, muss aber nicht unbedingt
sein, wenns nicht ins Spiel reinpassen würde. Sollte jemand vorhaben die Extension in einem kostenpflichtigen
Spiel zu verwenden, bitte ich im vorhinein um eine Benachrichtigung.
PS: Ach ja und ich warne euch, wenn ihr es auch nur ansatzweise gut findet, dann gibts ein Update!!!!
___________________________________________________________
Beware of wild pointers______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
Beware of wild pointers______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____