質問

ご挨拶、

いくつかのバイナリデータをASN.1 derエンコードブロブに単純にエンコードするにはどうすればよいですか?私はC/C ++を使用していますが、データがタイプのオクテット文字列であり、特定の長さの(および長さ1のシーケンスであることを示すいくつかの適切なバイトでバイナリブロブに単純に接頭することができるはずだと思います。推測してみて)。

興味がある場合は背景:

なぜこのようにasn.1を乱用したいのですか?研究プロジェクトの場合、X.509証明書を関連付けたデジタル署名にいくつかのデータを埋め込む必要があります。 (Peter GutmannのCryptlibライブラリのCreatesignatureExを使用してCMS / S / S / MIME-2 /3 / PKCSを作成しています - #7準拠した署名が重要な場合です。私の理解によれば、任意の拡張データを持つ深刻な署名によると、asn.1 derを使用して拡張データをエンコードする必要があります。私のデータはバイナリBLOBであり、アプリケーションにのみ役立つため、適切なASN.1データの各部分をエンコードすることには本当の価値はありません。私はこれを行うためにASN1Cを使用することを学ぶことができるいくつかの作業で考えていますが、それはかなり複雑に見え、私は締め切りをしています。同様に重要なことは、それは不要であるように思われ、この情報は、適切なASN.1エンコーディングの痛みを避けたい他の開発者にとって有用であると思われる。

ありがとう!

役に立ちましたか?

解決

私は使用します ASN.1コンパイラ.

それはデータ構造をエンコードする方法であるため、人々はasn.1を乱用します。攻撃者が問題を制御するデータ構造で動作するC/C ++プログラムがあるときはいつでも。バッファーオーバーフローと整数のオーバーフローが登場します。 ASN.1は、XMLまたはJSONまたはBENCODEと例よりも不安ではありません。これらはすべて障害のポイントである可能性が高いためです。このように、エンコードライブラリに問題がある可能性があります。 厄介なマイクロソフトの脆弱性。 ただし、このステートメントは、使用するエンコード方法に関係なく当てはまります。 ASN.1は、結果のメッセージが非常に小さく、私が知っているあらゆるエンコード方法のスペースを最も効率的に使用するため、素晴らしい選択です。

他のヒント

asn.1のblobをx.509証明書に追加するだけで、証明書の一部になることを期待することはできません。証明書は値のASN.1シーケンスであり、そのため、すべての証明書を含むシーケンスタグと長さから始まります。

証明書構造にフィールドを追加する場合(これはおそらく有効な証明書ではなく、有効なASN.1構造である可能性があることを意味します)、その囲まれたシーケンスの長さを、データを追加します。

はい、04 08 01 23 45 67 89 AB CD EFは、Octet Stringの有効なderエンコードです。最初の04はOctet文字列のタグで、08は文字列の長さです。長さ127が1つのバイトでエンコードされ、長さが大きいほど長いエンコードが使用されることに注意してください。

ASN.1への適切な紹介 - 特に暗号化メッセージでの使用については、「asn.1、berおよびderのサブセットの素人ガイド」を参照してください。サイト。

使用することをお勧めします クイックder, 、そしてその餌を与えます der_pack() 構造の説明を備えたルーチンあなたがそれでコンパイルできる asn2quickder コンパイラ。それが標準構造を使用することの問題である場合、あなたはおそらく #include <quick-der/rfc5280> 事前定義されたデータを使用します。

使用できます der_unpack() 同じ構造的な説明で開梱するため。構造的側面を検証しますが、ASN.1構文が組み込まれる制約ではありません。整数範囲は、それらを入力して取得するユーティリティ関数を使用するときにチェックされます。

ONWライブラリをプッシュして申し訳ありません。しかし、実際には、(オープンソース)C/C ++およびPython開発者向けに簡単にアクセスできるように書かれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top