XML als Dateiformat
-
Hallo Forum,
ich muß eine Anwendung neu implementieren und möchte ein neues Dateiformat entwerfen. Ich möchte XML verwenden. In diesem Dateiformat muß es verschlüsselte Sektionen geben. Außerdem muß für die gesamte Date eine Checksumme gebildet werden. Niemand darf die Datei verändern.
Ich habe im Internet folgende Schlagwörter gelesen: XML-Schema, XML-Signature, XML-Encryption.Ich weiß ungefähr was sie bedeuten, kann sie jedoch nicht "verwenden".
1. XML-Schema
Ich weiß was in der Datei später drin stehen soll. Ich kann also ein XML-Schema entwerfen das mein neues Dateiformat beschreibt. Hilft mir die so erstellte *.xsd beim Schreiben der Datei weiter? Kann ich mit dieser xsd einfacher einen XML-Writer für meine Anwendung schreiben? Oder kann ich mit dieser xsd Datei nur ermitteln ob die geschriebene Datei dem Schema entspricht?2. Signature
Wenn in den Signatur Tags der Algorithmus angegeben wurde nach denen die XML signiert wurde, wie kann ich dann sicherstellen das niemand die XML verändert und dann zB ein RSA-SH1 Programm verwendet um eine neue Checksumme zu generieren? Schützt die Signatur vor Veränderung der XML Datei?2b. Signature
Ist die Signaturüberprüfung schon in den XML Parsern implementiert?3. XML-Encryption
Ich muß Sektionen in dem XML verschlüsseln.
Können die XML-Parser selbst entschlüsseln? (Wo kommt der Key her?) Oder muß ich eine Routine bereitstellen die das Entschlüsseln macht? Was muß ich noch selbst implementieren?Vielen Dank
Mike
-
mifudd schrieb:
1. XML-Schema
Ich weiß was in der Datei drin stehen soll. Ich kann also ein XML-Schema entwerfen das mein neues Dateiformat beschreibt. Hilft mir die so erstellte *.xsd beim Schreiben der Datei weiter? Kann ich mit dieser xsd einfacher einen XML-Writer für meine Anwendung schreiben? Oder kann ich mit dieser xsd Datei nur ermitteln ob die geschriebene Datei dem Schema entspricht?Theoretisch kannst du dir über das XML-Schema automatisch Formulare oder Export-Funktionen oä generieren lassen. Aber ich weiß nicht was es da bereits für Software gibt
2. Signature
Wenn in den Signatur Tags der Algorithmus angegeben wurde nach denen die XML signiert wurde, wie kann ich dann sicherstellen das jemand die XML verändert und dann zB ein RSA-SH1 Programm verwendet um eine neue Checksumme zu generieren? Schützt die Signatur vor Veränderung der XML DateiNö, wie soll die Signatur dort schützen? Die Signatur kann dir nur sagen, ob sie zur aktuellen Datei gehört und wer sie erstellt hat. Das hat ja nichts konkret mit XML zu tun. http://de.wikipedia.org/wiki/Digitale_Signatur
2b. Signature
Ist die Signaturüberprüfung schon in den XML Parsern implementiert?3. XML-Encryption
Ich muß Sektionen in dem XML verschlüsseln.
Können die XML-Parser selbst entschlüsseln? (Wo kommt der Key her?) Oder muß ich eine Routine bereitstellen die das Entschlüsseln macht? Was muß ich noch selbst implementieren?"die XML-Parser"? allgemeine Aussagen über XML-Parser zu treffen ist ein bisschen sinnlos. Besorg dir eben einen XML-Parser, der XML-Signature und XML-Encryption unterstützt.
Ich glaub Libxml2 mit XMLSec können dir da weiter helfen.
-
Warum willst du überhaupt xml? Das bietet sich eigentlich nur an, wenn da auch mal ein Mensch drüberguckt.
Signaturen schützen natürlich _nicht_ vor veränderung (zumindest keine sha hashs). Da hilft dir nur kryptografie weiter, die du beim verschlüsseln eh brauchst.
Was xml parsen können - keine ahnung.
-
<?xml version="1.0" ?> ... <cypher_area> <message_header comment="klartest"> <encrypt_key_owner>mifudd</encrypt_key_owner> <decryt_key_owner>Prof84</decrypt_key_owner> </message_header> <crypt_message> // cyphertext in Base64 <crypt_message> <cypher_area> ...Der Private Key von mifudd bildet mit dem Public Key von Prof84 den Cyphertext. Der Public Key von mufudd bilder mit den Private key von Prof84 den Klartext.
Die Verschlüsselung in Base64 ist notwendig damit die Parsbarkeit des XML nicht gebrochen wird. D.h. für die Übertragung einmal in Base64 verschlüsseln und danach entschlüsseln.
-
Wäre alternativ zur Base64-Kodierung nicht auch die Speicherung in einem CDATA-Tag möglich?
-
ness schrieb:
Warum willst du überhaupt xml? Das bietet sich eigentlich nur an, wenn da auch mal ein Mensch drüberguckt.
Das stimmt so nicht. Wenn viele Anwendungen Daten aus der Datei benötigen und das Format auch mal erweitert wird, dann ist das auch praktisch. Kommen neue tags dazu, können für eine Applikation irrelevante Tags einfach ignoriert werden. Das ist bei weniger strukturierten Dateiformaten meist deutlich schwieriger.
-
dEUs schrieb:
Wäre alternativ zur Base64-Kodierung nicht auch die Speicherung in einem CDATA-Tag möglich?
Nicht wenn es binäre Daten sind. Und wenn es nicht binär ist und damit in ein CDATA-Tag packbar wäre, dann ist der Schlüssel als Radix-64 verwurstelt und damit "aufwendiger" als Base64.
-
Gut zu wissen, danke.
-
Jester schrieb:
ness schrieb:
Warum willst du überhaupt xml? Das bietet sich eigentlich nur an, wenn da auch mal ein Mensch drüberguckt.
Das stimmt so nicht. Wenn viele Anwendungen Daten aus der Datei benötigen und das Format auch mal erweitert wird, dann ist das auch praktisch. Kommen neue tags dazu, können für eine Applikation irrelevante Tags einfach ignoriert werden. Das ist bei weniger strukturierten Dateiformaten meist deutlich schwieriger.
http://de.wikipedia.org/wiki/JSON hat weniger overhead und ist einfacher zu lesen als xml.
-
AlternativeÖkoType schrieb:
Jester schrieb:
ness schrieb:
Warum willst du überhaupt xml? Das bietet sich eigentlich nur an, wenn da auch mal ein Mensch drüberguckt.
Das stimmt so nicht. Wenn viele Anwendungen Daten aus der Datei benötigen und das Format auch mal erweitert wird, dann ist das auch praktisch. Kommen neue tags dazu, können für eine Applikation irrelevante Tags einfach ignoriert werden. Das ist bei weniger strukturierten Dateiformaten meist deutlich schwieriger.
http://de.wikipedia.org/wiki/JSON hat weniger overhead und ist einfacher zu lesen als xml.
leider keine library für c++

-
Nimm den für C, C++ ist doch nur ne erweiterung.
-
rüdiger schrieb:
mifudd schrieb:
1. XML-Schema
Ich weiß was in der Datei drin stehen soll. Ich kann also ein XML-Schema entwerfen das mein neues Dateiformat beschreibt. Hilft mir die so erstellte *.xsd beim Schreiben der Datei weiter? Kann ich mit dieser xsd einfacher einen XML-Writer für meine Anwendung schreiben? Oder kann ich mit dieser xsd Datei nur ermitteln ob die geschriebene Datei dem Schema entspricht?Theoretisch kannst du dir über das XML-Schema automatisch Formulare oder Export-Funktionen oä generieren lassen. Aber ich weiß nicht was es da bereits für Software gibt
In Java kannst Du mit Hilfe von JAXB die XML-Typen des Schemas mit den Klassen des Source-Codes binden und somit das Serialisieren/Deserialisieren der Objektstrukturen automatisieren. KA was es da in C++ gibt...
Ansonsten ist aber auch schon das einfache Validieren gegen ein Schema ne gute Sache, um die Korrektheit des Formats sicherzustellen. So kann man sich einige Überprüfungen im Code sparen.
-
Erstmal vielen Dank für die vielen Antworten

- Ich muß erstmal sehen wie ich das mit der Encryption mache. XMLSec sieht vielversprechend aus...
- Als Entwicklungsumgebung werde ich C++.Net nehmen. JSON möchte ich nicht nehmen. Habe nie was von gehört...
- Base64 nimmt man für die Speicherung der verschlüsselten Daten? Spart gegenüber HEX sicher ein paar Bits. Mal sehen, wenn da schon was implementiert ist nehme ich das gern

-
Wieso nicht den Teil mit den enrypten Daten seperat schicken?
<daten> <name>Devent</devent> <encrypt>meinedaten.dat</encrypt> </daten>
-
DEvent schrieb:
Wieso nicht den Teil mit den enrypten Daten seperat schicken?
Weil einige lieber standardisierte Lösungen verwenden, anstatt proprietär rumzufrickeln?
-
mifudd schrieb:
- Als Entwicklungsumgebung werde ich C++.Net nehmen.
Dann solltest Du Dir mal ansehen, wie man in .NET Klassen mit XML direkt serialisiert, was auch für Java gesagt wurde - Du kannst dann direkt die Attribute eines Objekts nach XML schieben oder daraus holen. Allerdings habe ich dies in C++.NET noch nicht gesehen, sollte da aber auch gehen (oder nötigenfalls schreibst Du diesen Teil in C#, ist ja nur die Klassendefinition, dazu braucht es keine so tiefen Kenntnisse).