ENC(電子航海用電子海図)の署名を確認しようとしています。ファイルは、SHA1でDSAを使用して証明書で署名されます。
個々のENCの署名ファイルは次のようになります
//署名部分R:
0DA3 AFDB CE55 B926 00D6 D97A ADE2 CAAF8AD151C3。
//署名部分S:
1A25 7FDD B1E9 FE28 AE12 15CE 4DF8 76163E324312。
//署名部分R:
53AA DA93 CEA4 162D 01A1 BDB3 2A66 D9A79D4A02F8。
//署名部分S:
7DF3 9C2C EB93 73C6 CC2C 65A1 AE7C C7D65BCBBFBA。
// BIG p
FCA6 82CE 8E12 CABA 26EF CCF7 110E 526D B078 B05E DECB CD1E B4A2 08F3 AE16 17AE 01F3 5B91 A47E 6DF6 3413 C5E1 2ED0 899B CD13 2ACD 50D9 9151 BDC4 3EE737592E17。
// BIG q
962E DDCC 369C BA8E BB26 0EE6 B6A126D9346E38C5。
// BIG g
6784 71B2 7A9C F44E E91A 49C5 147D B1A9 AAF2 44F0 5A43 4D64 8693 1D2D 1427 1B9E 3503 0B71 FD73 DA17 9069 B32E 2935 630E 1C20 6235 4D0D A20A 6C41 6E50BE794CA4。
// BIG y
AA25 DF9E C3CA 96B7 9D01 3ED8 D572 D47C B3F3 80D0 731D EA47 B106 26BA C387 C1FA 3C33 EC55 6845 3744 76BE 5825 6E07 A74D 607F 7A5E 7B7E 3455 71D8 21104C8AC4BF。
以下のテキストは、IHOS-63仕様からの抜粋です。ここにリンクされている完全なPDF。
5.4.2.7ENC署名ファイル形式
署名ファイルには、署名と証明書のペアが含まれている必要があります。署名のみのファイルは、データサーバーのIDを証明しないため、無効です。ENCデジタル署名ファイルには、次の例のような形式、構造、および順序があります。
2番目のRとSのペアは、データサーバーのデジタル証明書(p、q、g、およびy文字列)を認証するために使用されます。検証に成功すると、データサーバーの公開鍵(y文字列)を抽出して、暗号化されたENCのデジタル署名(最初のRとSのペア)を検証するために使用できます。これにより、データクライアントはSAデジタル証明書を検証し、データサーバーの公開鍵を抽出し、ENCデータのデジタル署名を検証できます。
既存の実装から変換された私のコードは次のようになります。
p、q、g、およびyのバイト配列値を使用して新しいDSACryptoServiceProviderを初期化します(スペースと末尾の。は削除されます)
署名ファイル(ヘッダーを含む)のBIG P、Q、G、およびYセクションをバイト配列およびSHA1として読み取ります。配列をハッシュします。
次の文字列のバイト配列を取得します
var asn = string.Format("{0}{1}{2}{3}", "302E021500", rPart, "021500", sPart);
そして電話
dsa.VerifySignature(hashedPQGY,asn);
私はp、q、g、yを検証できていないと言えば十分です。誰かが私にドキュメントや例の良い情報源を指摘したり、私が欠けているものを説明したりできますか?
ありがとう、ベン。