首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ECDSA签名值( OCSP响应的签名值)是否需要编码

ECDSA签名值( OCSP响应的签名值)是否需要编码
EN

Security用户
提问于 2018-02-16 10:52:28
回答 1查看 348关注 0票数 2

在OCSP中,某个eIDAS PKI的响应每隔一段时间就会得到签名值,当从它们的位字符串解压缩时,该签名包含一个ECDSA签名,其整数成分有一个不必要的前导00字节,因此没有DER编码。

代码语言:javascript
复制
 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)进行编码,但也可以使用其他编码规则。

EN

回答 1

Security用户

回答已采纳

发布于 2018-02-16 13:04:03

根据ISO/IEC 8825-1:2003,BER/DER编码整数应该是:

8.3.2如果整数值编码的内容八进制包括一个以上的八进制,则第一个八位组和第二个八位组的第八位: a)不应全部为八位;b)不全部为零。注意-这些规则确保整数值总是以最小的八进制编码。

显然,dumpasn1确实检查了这一点:

代码语言:javascript
复制
    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编码整数,所以应该是。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/179914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档