none
署名文字列の作り方 RRS feed

  • 質問

  • お世話さまです。

    FrameWork2.0で採用されたSystem.Security.Cryptography.X509Certificatesを使って ファイルの署名文字列を作成するプログラムを作成しています。
    署名結果の検証プログラム(既存の電子申請プログラム)で結果の検証を行うとエラーになります。
    既存の電子申請プログラムで作成した署名文字列と比較すると(GUIDumpASNを使用)

    既存のプログラムの署名文字列
     省略・・・・
     2232 30  108:             SEQUENCE {
    2234 06    9:               OBJECT IDENTIFIER
                :                 sMIMECapabilities (1 2 840 113549 1 9 15)
    2245 31   95:               SET {
    2247 30   93:                 SEQUENCE {
    2249 30   10:                   SEQUENCE {
    2251 06    8:                     OBJECT IDENTIFIER
                :                       des-EDE3-CBC (1 2 840 113549 3 7)
                :                     }
    2261 30   14:                   SEQUENCE {
    2263 06    8:                     OBJECT IDENTIFIER rc2CBC (1 2 840 113549 3 2)
    2273 02    2:                     INTEGER 128
                :                     }
    2277 30   13:                   SEQUENCE {
    2279 06    8:                     OBJECT IDENTIFIER rc2CBC (1 2 840 113549 3 2)
    2289 02    1:                     INTEGER 64
                :                     }
    2292 30    7:                   SEQUENCE {
    2294 06    5:                     OBJECT IDENTIFIER desCBC (1 3 14 3 2 7)
                :                     }
    2301 30   13:                   SEQUENCE {
    2303 06    8:                     OBJECT IDENTIFIER rc2CBC (1 2 840 113549 3 2)
    2313 02    1:                     INTEGER 40
                :                     }
    2316 30   11:                   SEQUENCE {
    2318 06    9:                     OBJECT IDENTIFIER
                :                       sha1withRSAEncryption (1 2 840 113549 1 1 5)
                :                     }
    2329 30   11:                   SEQUENCE {
    2331 06    9:                     OBJECT IDENTIFIER
                :                       md5withRSAEncryption (1 2 840 113549 1 1 4)
                :                     }
                :                   }
                :                 }
                :               }
    以下省略

    となっているのですが 自分が作成したプログラムでは
    2137 30   13:             SEQUENCE {
    2139 06    9:               OBJECT IDENTIFIER
                :                 sMIMECapabilities (1 2 840 113549 1 9 15)
    2150 31    0:               SET {}
                :               }

    となってしまい
    このSet の中に各種のOIDの記述を入れる方法がわかりません。

    以下に署名文字列を取得している部分のコーディングを記述します。
     省略・・ binaryData() As Byte 指定されたファイルをByte配列に読み込む
            Dim content As ContentInfo = New ContentInfo(binaryData) ' ContentInfo作成
            Dim signedMessage As SignedCms = New SignedCms(content, True)  ' SignedCms から署名データを取得する

          Dim signer As CmsSigner = New CmsSigner(gcert) ' 署名オブジェクトを作成

          signer.IncludeOption = X509IncludeOption.WholeChain

          Dim SigningTime As New Pkcs9SigningTime(Now())
            signer.SignedAttributes.Add(SigningTime)

            Dim attobj As New CryptographicAttributeObject(New Oid("1.2.840.113549.1.9.15"))   'SMIMECapabilities
            signer.SignedAttributes.Add(attobj)
         ↑
     これだけではだめだとはわかるのですが 解決方法がヘルプをみてもわかりません。
    よろしくお願いします。



    2007年7月2日 10:39

すべての返信

  • 自己レスです。
    解決したわけではないのですが^^

    いろいろ調べてみたら crypt32.dllを使ったサンプルをみつけました。
    C++のサンプルは結構あるみたいですが C++は知りません(泣き^^)
    唯一(??)C#のサンプル http://www.jensign.com/JavaScience/dotnet/AuthAttr/source/AuthAttr.txt
    を見つけました。
    今回の署名方式はデタッチ方式を実現したいのですが 引数として渡すファイル名は??
    思いつくままに 署名対象ファイル 証明書ファイルなどと試してみたのですが どっちの場合も 
    『ASN1 タグの値が間違っています。』とのエラーになってしまい 必要な処理まで進んでいないようです。
    おそらく処理の手順を間違えているような気がしますが 解決策にあぐねてます。

    ご存じのかたがいらっしゃれば・・

    2007年7月18日 11:59
  • またまた自己レスです。今度は事故レス^^
    見つけたサンプルは残念ながら 署名文字列から 署名内容を解析するToolでした。
    早とちりです。 すみません。
    2007年7月19日 2:07