Darkleo’s Blog
Ein Schatz, der seinen Besitzer überallhin begleitet.

Eigener mathematischer Datentyp Galois Fields (GF)

January 24th, 2008 by darkleo

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.

Download

Posted in .NET, C#, Klasse

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.