我正在尝试验证ENC(电子导航图)的签名。这些文件使用带有 SHA1 的 DSA 的证书进行签名。
单个 ENC 的签名文件如下所示
//签名部分R:
0DA3 AFDB CE55 B926 00D6 D97A ADE2 CAAF 8AD1 51C3。
//签名部分S:
1A25 7FDD B1E9 FE28 AE12 15CE 4DF8 7616 3E32 4312。
//签名部分R:
53AA DA93 CEA4 162D 01A1 BDB3 2A66 D9A7 9D4A 02F8。
//签名部分S:
7DF3 9C2C EB93 73C6 CC2C 65A1 AE7C C7D6 5BCB BFBA。
//大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 BDC14 3EE7 3759。
// 大 q
962E DDCC 369C BA8E BB26 0EE6 B6A1 26D9 346E 38C5。
//大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 6E50 BE79 4CA4.
// 大
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 7B210 3455 71CBF.A74D 607F 7A5E 7B210 3455 74CBF8
以下文本摘自 IHO S-63 规范。完整的 PDF 链接在这里。
5.4.2.7 ENC 签名文件格式
签名文件必须包含签名和证书对。仅带有签名的文件是无效的,因为它不能证明数据服务器的身份。ENC 数字签名文件的格式、结构和顺序如下例所示:
第二个 R 和 S 对用于验证数据服务器数字证书(p、q、g 和 y 字符串)。如果验证成功,可以提取数据服务器公钥(y 字符串)并用于验证加密 ENC 的数字签名(第一个 R 和 S 对)。这允许数据客户端验证 SA 数字证书,提取数据服务器公钥,并验证 ENC 数据的数字签名。
我从现有实现转换的代码执行以下操作:
使用 p、q、g 和 y 的字节数组值初始化一个新的 DSACryptoServiceProvider(空格和尾随 . 已删除)
将签名文件(包括标题)的 BIG P、Q、G 和 Y 部分作为字节数组读取,然后对数组进行 SHA1.Hash。
取以下字符串的字节数组
var asn = string.Format("{0}{1}{2}{3}", "302E021500", rPart, "021500", sPart);
并打电话
dsa.VerifySignature(hashedPQGY,asn);
可以说我还没有设法验证 p、q、g 和 y。有人可以向我指出一个很好的文档、示例来源,或者只是解释我所缺少的。
谢谢,本。