2013-11-28 6 views
1

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

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

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

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

ответ

2

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

Вот как Bouncy Castle code выполняет проверку цифровой подписи 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; 
} 
+0

извините за сумбур, но если я правильно понимаю теперь, имея кривую brainpoolp256r1 означает, что я 256bits порядок основания (означающего ключ 512bit) и с помощью того, что я могу иметь SHA1 хэш в BouncyCastle без него жаловаться. Есть ли что-то, чего я еще не вижу? – Petr

+0

Я обновил ответ. Вы также должны изменить вопрос, чтобы упомянуть, что ваш ключ основан на кривой из семейства brainpoolp256r1. – divanov

+0

Спасибо за обновление, я обновил свой квест, надеюсь, теперь он имеет больше смысла. Итак, в основном, что это значит, значение 'e' (' z' в моем вопросе) дополняется нулями слева в том случае, когда я описывал? – Petr