Eigener mathematischer Datentyp Galois Fields (GF)
Ich müsste einige Berechnungstabellen für GF erstellen. Hab mir gedacht da könnte mir C# helfen
Und hab mir überlegt machen wir mal einen Typen(GF) mit dem wir einfach Rechnen können.
public static GF operator *(GF g1, GF g2)
{
string ret = mul(g1.Data, g2.Data).TrimStart('0');
return new GF(ret);
}
public static GF operator +(GF g1, GF g2)
{
return new GF(add(g1.Data, g2.Data));
}
public static GF operator -(GF g1, GF g2)
{
return new GF(add(g1.Data, g2.Data));
}
public static GF operator %(GF g1, GF g2)
{
string rest = mod(g1.Data, g2.Data);
return new GF(rest);
}
Weitere Infos zum Überladen von weiteren Operatoren:
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/csref/html/vclrfOverloadableOperators.asp
Wie und was kann ich jetzt damit Rechnen?
Folgende Operationen stehen zur Verfügung: +, -, * und modulo (Restrechnung)
GF a = new GF("1011");
GF b = new GF("1010");
Console.WriteLine("a = " + a+" b = " + b);
Console.WriteLine("+ = " + (a + b));
Console.WriteLine("* = " + (a * b));
a = new GF("1000");
b = new GF("1001");
Console.WriteLine("rest = " + (a * b % new GF(16)));
Addition und Subtraktion
1011+1010=0001
Console.WriteLine("+ = " + (a + b));
out: +=1
Multiplikation
1011*1010=1001110
Console.WriteLine("* = " + (a * b));
out: *=1001110
Rest von GF 2^4
(1011*1010)%10011=0100
Console.WriteLine("rest = " + (a * b % new GF(8)));
out: rest = 100
Rest Algorithmus in 2 Schritten:
Dieser Algorithmus ist dafür da, um den Multiplikationswert zu Normalisieren.
1)Multipliziere:
1000 * 1001= (x^3)*(x^3+1)
erzeugt eine Liste:
4+4=1000000
4+1=0010000
gleicht vorkommende x hoch n die 2 mal und das vielfache von 2 sind, werden entfernt.
die liste wird dann zusammen gesetzt
1000000
0001000
--------
1001000 = x^6+x^3
2)Funktions Mod
1001000 % 10011 =
man setzt so viele 0 ans ende dass es zum XORen passt und XORt die werte
1001000
1001100
_______
0000100 = Lösch die 0en davor
Lösung: 100
Infos zu ECC (Elliptic curve cryptography)
Online Elliptic Curve Cryptography Tutorial
Fazit:
Die GF-Klasse ist nicht Performant geschrieben, da ich einen String als Internen Datentypen verwendet habe.
Wenn jemand es Optimieren möchte kann er das machen.