AES-verschlüsselung
AES-verschlüsselung
Hallo zusammen!
Ich weis, das thema AES war/ist ein viel diskutiertes aber ich komme einfach auf keinen grünen Zweig. 2004 hatte sec einmal eine sehr gute userlib geschrieben, die aber leider etwas unsable war, und jetzt mit PB4 auch nichmehr läuft, dann hat sich jetzt einfach jemand eine DLL aus dieser Userlib gemacht, in windows ne sehr feine sache, aber leide unter linux überhaiupt nicht lauffähig... nun hat jemand anderes den Vorschlag gemacht AES nativ in PB einzubinden, aber wer weis wielange es dauert, bis das durchgeführt ist....
nun worauf ich raus möchte ist, ich suche fieberhaft nach einer möglichkeit meine Daten, sowohl unter Linux, als auch unter Windows mit 256Bit AES zu verschlüsseln, weis irgendjemand von euch eine möglichkeit das zu bewerkstelligen??? ich bin hier am verzweifeln.. wirklich. Wir haben schon versucht mit sämtlichen codes von C++/delphi dlls zu erzeugen, aber dafür reichen unsre kenntnisse scheinbar nicht aus, weil die einfach nicht funktionnieren wollen....
Ich wäre euch wirklich sehr sehr dankbar, falls irgendwer eine idee, oder evtl. sogar PB-code hätte!!!!!
Vielen Dank im voraus!
gruß
m0
Ich weis, das thema AES war/ist ein viel diskutiertes aber ich komme einfach auf keinen grünen Zweig. 2004 hatte sec einmal eine sehr gute userlib geschrieben, die aber leider etwas unsable war, und jetzt mit PB4 auch nichmehr läuft, dann hat sich jetzt einfach jemand eine DLL aus dieser Userlib gemacht, in windows ne sehr feine sache, aber leide unter linux überhaiupt nicht lauffähig... nun hat jemand anderes den Vorschlag gemacht AES nativ in PB einzubinden, aber wer weis wielange es dauert, bis das durchgeführt ist....
nun worauf ich raus möchte ist, ich suche fieberhaft nach einer möglichkeit meine Daten, sowohl unter Linux, als auch unter Windows mit 256Bit AES zu verschlüsseln, weis irgendjemand von euch eine möglichkeit das zu bewerkstelligen??? ich bin hier am verzweifeln.. wirklich. Wir haben schon versucht mit sämtlichen codes von C++/delphi dlls zu erzeugen, aber dafür reichen unsre kenntnisse scheinbar nicht aus, weil die einfach nicht funktionnieren wollen....
Ich wäre euch wirklich sehr sehr dankbar, falls irgendwer eine idee, oder evtl. sogar PB-code hätte!!!!!
Vielen Dank im voraus!
gruß
m0
Hi!
Dachte die Verschlüsselung sei viel komplizierter, hab jetzt aber endlich eine gute beschreibnung gefunden (für alle die sich dafür intressieren: http://www.cs.bc.edu/~straubin/cs381-05 ... es2004.swf )
Eine frage hätte ich da aber noch: ich komme nicht drauf, welche operation, anstatt den Multiplikationen bei "mix columns" ausgeführt wird, ich weis, dass statt Addition XOR gemacht wird, aber was hinter den Multiplikationen steckt bleicht für mich ein rätsel, also falls jemand sich mit dieser "mix columns" operation auskennt, wäre es echt nett, wenn ihr mir da weiterhelfen könntet, falls die Routine dann fertig ist stelle ich sie selbstverständlich als source hier online, damit andere es einfacher haben.
Danke schonmal!!
gruß
m0
Dachte die Verschlüsselung sei viel komplizierter, hab jetzt aber endlich eine gute beschreibnung gefunden (für alle die sich dafür intressieren: http://www.cs.bc.edu/~straubin/cs381-05 ... es2004.swf )
Eine frage hätte ich da aber noch: ich komme nicht drauf, welche operation, anstatt den Multiplikationen bei "mix columns" ausgeführt wird, ich weis, dass statt Addition XOR gemacht wird, aber was hinter den Multiplikationen steckt bleicht für mich ein rätsel, also falls jemand sich mit dieser "mix columns" operation auskennt, wäre es echt nett, wenn ihr mir da weiterhelfen könntet, falls die Routine dann fertig ist stelle ich sie selbstverständlich als source hier online, damit andere es einfacher haben.
Danke schonmal!!
gruß
m0
Schon mal die Suchmaschine vom Forum probiert?
http://www.purebasic.fr/german/viewtopi ... 3&start=20
FF
http://www.purebasic.fr/german/viewtopi ... 3&start=20
FF

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Das bei MixColumns schaut auf den ersten Blick wie eine Multiplikation zwischen Vektoren aus. Ich hab mal versucht, das rechnerisch zu belegen, komme aber nicht auf das angezeigte Ergebnis. Jetzt ist guter Rat teuer,
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
ja genau rein mathematisch ist das eine Multiplikation von Matritzen, an sich ja kein thema, aber wie gesagt wenn man das Lösen will müsste man Multiplizieren und addieren. statt den additionen müssen XOR verknüpfungen gemacht werden, soweit bin ich. nur weis ich nicht, was statt den Multiplikationen durchgeführt werden muss, weil es hierbei ja theoretisch auch zu einem überlauf kommen kann, den man verhindern sollte, weils sons nicht mehr entschlüsselt werden kann.
Ich hoffe es weis jemand rat!!!
Ich hoffe es weis jemand rat!!!
Die Multiplikation mit 2 ist ein simpler Links-Shift und die mit 3 ist ein Links-Shift mit anschließendem XOR mit dem Ausgangswert. Ist das Ergebnis dieser Operationen grösser als ein Byte wird nur der unterste Byte-Anteil verwendet, aber "ge-xor-t" mit $1B. Die 4 Ergebnisse werden dann miteinander wieder "ge-xor-t".
Bei dem Flash-Beispiel kommt dann für D4 heraus:
2*D4 -> 1A8 -> A8 XOR 1B -> B3
3*BF -> 17E XOR BF -> 1C1 -> C1 XOR 1B -> DA
1*5D -> 5D
1*30 -> 30
B3 XOR DA XOR 5D XOR 30 -> 4
Gruß
Helle
Bei dem Flash-Beispiel kommt dann für D4 heraus:
2*D4 -> 1A8 -> A8 XOR 1B -> B3
3*BF -> 17E XOR BF -> 1C1 -> C1 XOR 1B -> DA
1*5D -> 5D
1*30 -> 30
B3 XOR DA XOR 5D XOR 30 -> 4
Gruß
Helle
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
Schau dich mal hier um:
http://entwickler.com/itr/news/psecom,i ... id,82.html
Ansonsten frag mal hier nach:
http://www.purebasic.fr/english/viewtopic.php?t=12086
http://entwickler.com/itr/news/psecom,i ... id,82.html
Ansonsten frag mal hier nach:
http://www.purebasic.fr/english/viewtopic.php?t=12086
Habe aus Jux mal eine ASM-Routine für Mix-Columns erstellt:
Eigentlich gar nicht so aufwändig...
Gruß
Helle
Edit: 9.12.2007 ersetzt durch kommentierte Version
Code: Alles auswählen
;Beispiel ASM-Mix-Columns
;Ohne Gewähr!
Global Schleife1.l
Global Schleife2.l=4
!lea esi,[Eingang] ;Hilfskonstruktion, irendwo müssen die Daten ja herkommen
MemA=AllocateMemory(16) ;nur für´s Ergebnis, 16 Bytes reichen
!mov edi,[v_MemA] ;Zeiger auf den Ausgabe-Buffer
;------------------------------------------------
!xor ecx,ecx ;ECX auf Null setzen wegen unten "xor ax,cx" und CH dabei Null sein muss
!S2: ;äussere Schleife, wird 4x (=4 Spalten) durchlaufen
!mov ebx,[esi] ;4 Bytes (von 16) einlesen
!mov [v_Schleife1],4 ;Zähler für die innere Schleife setzen
!S1: ;innere Schleife, wird 16x (16 = 4 Spalten*4 Zeilen) durchlaufen
!xor eax,eax ;EAX auf Null setzen, weil unten AH auf Null getestet wird, AH im Code
; aber auch verändert werden kann
!mov edx,ebx ;die 4 eingelesenen Bytes in EDX kopieren, DL nimmt das erste Element der
; jeweiligen Spalte auf. "mov dl,bl" tät´s auch.
!shl dl,1 ;DL mit 2 multiplizieren. 2 ist das [1,1]-Element der Konstanten-
; Multiplikations-Matrix
!jnc @f ;Test, ob das Ergebnis grösser als 255dez ist
!xor dl,1bh ;war > 255, deshalb Korrektur notwendig. Der Wert ergibt sich aus der
; Moduloreduktion zu 2^4 + 2^3 + 2^1 + 2^0 = 27d = 1bh
!@@:
!ror ebx,8 ;das 2.Byte der jeweiligen Spalte in BL schieben
!mov al,bl ;nach AL kopieren, dieses Byte wird mit 3 multipliziert
!shl ax,1 ;erstmal mit 2 multiplizieren (einmal shift links). Ein eventueller
;Übertrag (Ergebnis > 255d) befindet sich dann in AH, deshalb hier AX
!mov cl,bl ;Ausgangs-Byte nach CL
!xor ax,cx ;dies entspricht dann der Multiplikation mit 3
!or ah,ah ;Test, ob AH Null ist (also kein Übertrag)
!je @f ;kein Übertrag, also nächste Anweisung überspringen
!xor al,1bh ;Korrektur wegen Übertrag
!@@: ;hier haben beide relevante Multiplikationen stattgefunden, die mit 1
; werden natürlich nicht ausgeführt. Ab hier werden jetzt die abschlies-
; senden XOR-Verknüpfungen der 4 Bytes jeder Spalte durchgeführt
!xor al,dl ;DL ist noch das Ergebnis der Multiplikation mit 2
!ror ebx,8 ;das 3.Byte der jeweiligen Spalte in BL kopieren (rotieren)
!xor al,bl ;das 3.Byte verwurschteln
!ror ebx,8 ;das 4.Byte der Spalte ebenso
!xor al,bl
!mov [edi],al ;das Ergebnis für ein Matrix-Element abspeichern
!inc edi ;für´s nächste Element
!ror ebx,16 ;um 2 Bytes rotieren, das nächste Element der jeweiligen Spalte steht
; jetzt an einer Position, die auch die Byte-Rotation der Konstanten-
; Multiplikations-Matrix berücksichtigt (diese einfach mal anschauen!)
!dec [v_Schleife1] ;letztes Element der jeweiligen Spalte?
!jnz S1 ;nein
!add esi,4 ;ja, nächste Spalte kann eingelesen werden
!dec [v_Schleife2] ;oder doch Ende?
!jnz S2 ;nö
;------------------------------------------------
;bei der Anzeige Byte-Reihenfolge (Little-Endian) beachten! Dient ja nur der "Rechen-Kontrolle"!
Debug Hex(PeekL(MemA))
Debug Hex(PeekL(MemA+4))
Debug Hex(PeekL(MemA+8))
Debug Hex(PeekL(MemA+12))
Debug "-----------------------"
;Hilfskonstruktion, um Daten zur Verfügung zu haben
DataSection
!Eingang: ;nicht nachmachen!
Data.b $D4, $BF, $5D, $30
Data.b $E0, $B4, $52, $AE
Data.b $B8, $41, $11, $F1
Data.b $1E, $27, $98, $E5
EndDataSection
Gruß
Helle
Edit: 9.12.2007 ersetzt durch kommentierte Version
Zuletzt geändert von Helle am 09.12.2007 20:42, insgesamt 1-mal geändert.