在OCSP中,某个eIDAS PKI的响应每隔一段时间就会得到签名值,当从它们的位字符串解压缩时,该签名包含一个ECDSA签名,其整数成分有一个不必要的前导00字节,因此没有DER编码。
376 10: . . . . . SEQUENCE {
378 8: . . . . . . OBJECT IDENTIFIER ecdsaWithSHA256 (1 2 840 10045 4 3 2)
: . . . . . . . (ANSI X9.62 ECDSA algorithm with SHA256)
: . . . . . . }
388 71: . . . . . BIT STRING, encapsulates {
391 68: . . . . . . SEQUENCE {
393 32: . . . . . . . INTEGER
: . . . . . . . . 6D 7F 95 D5 8E 9B E1 18 m.......
: . . . . . . . . 60 DC A6 D6 91 37 0D B4 `....7..
: . . . . . . . . AF D5 C9 A0 E8 21 40 4A .....!@J
: . . . . . . . . 94 8B 9F AA 6C DC F2 8C
427 32: . . . . . . . INTEGER
: . . . . . . . . 00 1B FD 92 CB 1E E2 A8 ........
: . . . . . . . . 2B 18 FC 37 ED 42 D0 66 +..7.B.f
: . . . . . . . . E6 52 63 88 47 88 EE 00 .Rc.G...
: . . . . . . . . FF 37 CF 20 8F F8 3C C1
: . . . . . . . . Error: Integer has non-DER encoding.
: . . . . . . . }
: . . . . . . }在这里,ASN.1转储实用程序已经声称这种非DER编码是错误的,当前的BouncyCastle版本也是如此(2016年10月提交时引入了对DER编码的检查,不幸的是,注释中没有任何问题或规范引用)。
我想知道BouncyCastle是否太严格,或者OCSP响应程序确实会产生无效的响应。不幸的是,我还没有找到任何规范(与eIDAS PKI相关),它清楚地指出了可以在那里使用哪种编码。
OCSP上的RFC 6960说
响应值应为BasicOCSPResponse的编码。BasicOCSPResponse ::=序列{ tbsResponseData ResponseData,signatureAlgorithm AlgorithmIdentifier,签名位字符串,证书0显式序列可选}
但这只需要对BIT STRING signature进行DER编码,而不是封装在其中的任何数据。
TR-03111 (德国联邦信息安全办公室椭圆曲线密码技术指南)说
在X9.62格式中,ECDSA-签名(r;s)被编码为ASN.1结构,其语法如下:ECDSA值::=序列{r整数,S整数}将签名嵌入到位字符串中。编码的ECDSA-Sig-值应为位字符串的值(包括标签和长度eld)。
但是,德国联邦信息安全办公室的一项要求对eIDAS的PKI总体来说几乎是不规范的。
在X9.62中我只找到
虽然这些ASN.1定义很可能将使用区分编码规则(DER)进行编码,但也可以使用其他编码规则。
发布于 2018-02-16 13:04:03
根据ISO/IEC 8825-1:2003,BER/DER编码整数应该是:
8.3.2如果整数值编码的内容八进制包括一个以上的八进制,则第一个八位组和第二个八位组的第八位: a)不应全部为八位;b)不全部为零。注意-这些规则确保整数值总是以最小的八进制编码。
显然,dumpasn1确实检查了这一点:
if( i == 0 )
{
if( ( value == 0x00 ) && ( ( ch & 0x80 ) == 0x00 ) )
warnNonDER = TRUE;
if( ( value == 0xFF ) && ( ( ch & 0x80 ) == 0x80 ) )
warnNonDER = TRUE;
if( warnNonDER )
{
intBuffer[ 0 ] = ( int ) value;
intBuffer[ 1 ] = ch;
}
}请参阅:https://github.com/clibs/dumpasn1/blob/master/dumpasn1.c#L1398
因此,由于编码表明它是BER/DER编码整数,所以应该是。
https://security.stackexchange.com/questions/179914
复制相似问题