Как обрабатывать короткий хэш с более длинным порядком базовой точки в ECDSA

Я использую сертификаты CVC (если вы не слышали о них, представьте, что это X509) с подписью эллиптической кривой с кривой brainpool256r1 и хэшем SHA1. В java с bouncycastle я просто проверяю их так:

Signature sign = Signature.getInstance("SHA1withECDSA", "BC");
sign.initVerify(key);
sign.update(certificate_data_to_be_verified);
sign.verify(signature);

И все работает нормально. Однако мне нужно проверить их также на встроенном устройстве, и я столкнулся с проблемой, потому что я должен использовать крайние левые 256 бит хеша, чтобы получить значение z по крайней мере в соответствии с статья в Википедии ECDSA. Но SHA1 имеет только 160 бит.

Как это решается с помощью bouncycastle, и есть ли какая-то общая теория о том, как с этим справиться?


person Petr    schedule 28.11.2013    source источник


Ответы (1)


Вы путаете порядок базовой точки с длиной ключа.

Вот как Код Bouncy Castle выполняет проверку цифровой подписи ECDSA.

private BigInteger calculateE(BigInteger n, byte[] message)
{
    /* n is curve order value */
    int log2n = n.bitLength();
    /* and message is a hash */
    int messageBitLength = message.length * 8;

    BigInteger e = new BigInteger(1, message);
    /* If message is longer than curve order */
    if (log2n < messageBitLength)
    {
        /* only log2n bits are taken from the left */
        e = e.shiftRight(messageBitLength - log2n);
    }
    return e;
}
person divanov    schedule 28.11.2013
comment
извините за путаницу, но если я правильно понимаю сейчас, наличие кривой brainpoolp256r1 означает, что у меня 256-битный порядок базы (что означает 512-битный ключ), и с его помощью я могу иметь хеш SHA1 в bouncycastle без жалоб. Есть ли что-то, чего мне еще не хватает? - person Petr; 29.11.2013
comment
Я обновил ответ. Вы также должны изменить вопрос, указав, что ваш ключ основан на кривой из семейства brainpoolp256r1. - person divanov; 29.11.2013
comment
Спасибо за обновление, я обновил свой вопрос, надеюсь, теперь он имеет больше смысла. Итак, в основном, что это означает, значение e (z в моем вопросе) дополняется нулями слева в случае, который я описал? - person Petr; 02.12.2013
comment
Ну, это, я считаю, означает то же самое. :) - person Petr; 05.02.2014