Twofish C(++)

soul720

Member
Hallo,

ich möchte gerne ein bisschen mit dem Twofish Algorithmus rumspielen, und in ein kleines Programm packen. Erstmal nur zum testen, wie es funktioniert, später vielleicht noch mit ner kleinen Gui um das Programm für irgendwas zu benutzen.

Aber irgendwie komm ich mit den Implementierungen auf Schneiers Webseite nicht so ganz klar :) Bin kein großer C(++) Fachmann, und auch ein Cryptographie Professoer (vielleicht keine idealen Startbedingungen), daher die Frage ob mir hier jemand helfen kann. Hab keine wirkliche Doku dazu gefunden, das PDF werde ich mir später ein bisschen durchlesen, um den Algorithmus erstmal ansatzweise zu verstehen.
Eine exterme Lib möchte ich falls es geht nicht verwenden, würde lieber versuchen eine der Implementierungen von Schneiers Seite zu verwenden falls das geht.

Die Block-En/Decrypt Funktionen sollten verständlich sein (von hier), aber es scheitert schon daran dass ich nicht weiß woher ich den "ptr to hex ASCII test representing IV bytes" herbekomme weiß ich aber schon nicht mehr.

Kann mir da jemand helfen? Vielleicht auch einfach nen Link zu einer Doku-Seite, habe auf Anhieb nichts ergoogeln können. Oder so ein grundlegender Ablauf welche Schritte nacheinander kommen, wenn man mit Twofish ver/entschlüsseln möchte.

Danke :)
 
Abend

Ich kann die OpenSSL Cryptographic Library empfehlen, hab selber schon mit Symmetrischer Kryptographie experimentiert.
Dabei würde ich erstmals mit den vorhandenen Chiffre rumspielen und wenn das alles gut klapt, tiefer in den Quellcode schauen, eventuell abschreiben und lernen.

Gruss
bsdagent
 
Truecrypt beinhaltet ebenfalls den Twofish-Algorithmus. Einfach mal den Quellcode runterladen; im Verzeichnis Crypto findest Du eine Datei Twofish.c und die zugehörige Header-Datei.
 
Ich kann die OpenSSL Cryptographic Library empfehlen, hab selber schon mit Symmetrischer Kryptographie experimentiert.
Dabei würde ich erstmals mit den vorhandenen Chiffre rumspielen und wenn das alles gut klapt, tiefer in den Quellcode schauen, eventuell abschreiben und lernen.

Die beinhaltet nur leider keine Twofish-Implementierung. Aber zum Spielen nicht schlecht. Alternativ kann man auch die libgcrypt anschauen, von www.gnupg.org. Hat ein paar Algorithmen mehr als die SSL lib.
 
Nach einiger Zeit hab ich mit entschieden, dass die blanke C-Implementierung zu verwenden doch kein so komfortabler weg ist :D
Habe mich nun doch für eine 3rd party crypto lib entschieden. Zunächst hatte ich crypto++ probiert, aber da hat es mir ehrlich gesagt etwas an doku gemangelt. Nun bin ich bei botan, und damit so weit auch ganz glücklich. :)
 
Morgen

Auf basis des Botan Projektes, gibt es noch eine höhere Lib namens Qt Cryptographic Architecture (QCA).

Gruss
bsdagent

Hatte ich auch schon gesehn, würde sich auch anbieten da die GUI von meinem Programm in Qt geschrieben ist. Möchte den Verschlüsselungspart aber Qt-unabhängig belassen, und nutze daher nur die Botan lib.

Obwohls prinzipiell schon so funktioniert wie ichs mir erhoffe, tu ich mich mit Botan dennoch etwas schwer.
Habe nun 2 Methoden, die mir Dateien ent/verschlüsseln können. Da ich teile davon von den Botan examples kopiert habe, werden die Dateien Base64 encoded bzw decoded. Nun bin ich gerade dabei, das ohne b64 Encodierung zu versuchen, beim entschlüsseln der Datei bringt er mir aber immer nen Decoding Error. Auch wenns unwahrscheinlich ist, dass sich jemand damit auskennt, hab mal das source file angehängt, vllt kann ja jemand was damit anfangen.
Die Methoden Encrypt/Decrypt sind mit b64 encoding (und funktionieren), die Encrypt2/Decrpyt2 sind ohne b64 encoding. Geschrieben wird beim Verschlüsseln 8 bytes salt, 16 bytes mac, dann der Rest der Datei. Beim Entschlüsseln werden erst 8 bytes salt, dann 16 bytes mac gelesen, dann der Rest der Datei in die Pipe.
 

Anhänge

  • sample.txt
    10,4 KB · Aufrufe: 427
Zurück
Oben