Frage

Grüße,

Wie kann ich einfach codieren einige binäre Daten in eine ASN.1 DER-codiert Blob? Ich verwende C / C ++, und ich heraus soll es möglich sein, einfach die binäre blob dass Signify mit irgendeine angemessenen Präfixbytes, dass die Daten vom Typ Octet String sind und aus einer gegebenen Länge (und in einer Sequenz mit einer Länge von 1 I guess).

Hintergrund, wenn Sie interessiert sind:

Warum will ich ASN.1 missbrauchen auf diese Weise? Für ein Forschungsprojekt, muß ich einige Daten in einem digitalen Signatur einbetten, die ein zugehöriges ein X.509-Zertifikat hat. (Ich verwende createSignatureEx in Peter Gutmann cryptlib Bibliothek zu CMS / S erstellen / MIME-2/3 / PKcs # 7-konformen Signaturen, wenn es darauf ankommt. Ich bin nicht die Daten signieren ich zu kodieren will, nur um es als Metadaten hinzufügen zur Unterzeichnung es zu bereichern.) nach meinem Verständnis, schwere Signaturen mit beliebigen Erweiterungsdaten erfordern die Erweiterungsdaten unter Verwendung von ASN.1 dEN codiert werden. Meine Daten ist ein binäres Blob und ist nur nützlich, um meine Anwendung, so gibt es keinen wirklichen Wert in der richtigen ASN.1 tun Codierung jedes Teil meiner Daten. Ich Figur mit etwas Arbeit, die ich lernen konnte asn1c zu verwenden, um dies zu tun, aber es sieht ziemlich kompliziert, und ich bin zu den Fristen. Ebenso wichtig ist, wie es scheint unnötig und es scheint, wie diese Informationen an andere Entwickler nützlich sein könnte, die den Schmerz der richtigen ASN.1-Codierung zu vermeiden.

Danke!

War es hilfreich?

Lösung

würde ich die ASN.1 Compiler .

Menschen missbrauchen ASN.1, weil es eine Art und Weise zu kodieren Datenstrukturen ist. Jedes Mal, wenn Sie ein C / C ++ Programm arbeitet mit einer Datenstruktur, dass die Angreifer Kontrollen Probleme wie; Pufferüberläufe und Ganzzahl überläuft, ins Spiel kommen. ASN.1 ist nicht unsicherer als etwa XML oder JSON oder bencode können, da diese alle wahrscheinlich Fehlerpunkte sind. Es kann Probleme mit der Codierung Bibliothek seines selbst sein, wie dieses fies Microsoft Verwundbarkeit . Aber diese Aussage gilt unabhängig von der Codierung verwendeten Methode. ASN.1 ist eine gute Wahl, da die resultierende Nachricht extrem klein ist, und es ist die effizienteste Nutzung von Raum von jeder Kodierungsmethode, die ich kenne.

Andere Tipps

Sie können nicht nur einen Klecks ASN.1 zu einem X.509-Zertifikat anhängen und erwarten, dass es Teil des Zertifikats werden. Das Zertifikat ist eine ASN.1-Sequenz von Werten, und als solche er beginnt mit einer Sequenz-Tag und einer Länge, die alle des Zertifikats umfasst.

Wenn Sie ein Feld an die Zertifikatsstruktur hinzugefügt werden soll (was bedeutet wahrscheinlich, dass es nicht mehr ist ein gültiges Zertifikat, aber es könnte noch eine gültige ASN.1 Struktur sein), dann werden Sie die Länge, dass sich ändern müssen umschließt Ihre Datensequenz sowie anhängt.

Ja, 04 08 01 23 45 67 89 ab cd ef ist eine gültige DIE Codierung eines Oktett-String. Die 04 am Anfang ist der Tag für OCTET STRING und die 08 ist die Länge der Saite. Man beachte, dass Längen von bis zu 127 in einem Byte kodiert werden, und dass größere Längen verwenden, um eine längere Codierung.

Für eine gute Einführung in ASN.1 - und vor allem auf seine Verwendung in kryptographischen Nachrichten - siehe „Ein Laien 's Guide to einen Subset von ASN.1, BER und DER“, die Sie sollen sich auf das zu finden, der Lage sein, rsa.com Website.

würde ich vorschlagen, Schnell DER zu verwenden, und füttern ihre der_pack() Routine mit einer Strukturbeschreibung dass Sie mit ihrem asn2quickder Compiler kompiliert werden. Wenn es darum geht, eine Standardstruktur verwenden, können Sie wahrscheinlich nur #include <quick-der/rfc5280> und seine vordefinierten Daten verwenden.

Sie können der_unpack() verwenden, um mit der gleichen Strukturbeschreibung Auspacken. Es wird strukturelle Aspekte validieren, wenn auch nicht die Einschränkungen, die ASN.1-Syntax enthalten kann. Integer Bereiche überprüft werden, wenn Sie die Utility-Funktionen verwenden, die Put sie und erhalten.

Leider meine eingene Bibliothek zu drängen; aber es war eigentlich zum Zweck des leicht zugänglichen ASN.1 geschrieben für (Open Source) C / C ++ und Python-Entwickler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top