Получение остатка открытого ключа RSA с использованием Bouncy Castle
Я новичок в криптографии, и мне было интересно, есть ли какой-либо уже реализованный метод для получения остатка открытого ключа.
Я нашел следующее утверждение об общественном остатке:Issuer Public Key Modulus
разделен на две части, одна часть, состоящая из N
CA - 36 старших значащих байтов модуля (крайние левые цифры открытого ключа эмитента), и вторая часть, состоящая из оставшихся N
I - (N
CA - 36) наименее значимых байтов модуля (the Issuer Public Key Remainder
)
в этой книге: http://mech.vub.ac.be/teaching/info/mechatronica/finished_projects_2007/Groep%201/Smartcard_files/EMV%20v4.1%20Book%202.pdf
и я использую org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters#getModulus
чтобы получить часть модуля.
Могу ли я получить остаток открытого ключа, используя Bouncy Castle, или я должен вычислить его вручную на основе вышеуказанной спецификации?
1 ответ
Нет, BouncyCastle не предлагает API для получения остатка открытого ключа, потому что BouncyCastle предлагает общую реализацию RSA и, наоборот, остаток открытого ключа не часто используется: он в основном используется только интегральными микросхемами и связанным программным обеспечением,
Итак, если вам нужно получить остаток, вы должны вычислить его самостоятельно. Вы не должны беспокоиться об остатке, если вы не имеете дело с интегральными платами.
Теперь, вот способ вычислить остаток (мы предполагаем, что Ni и Nca определены):
BigInteger modulus = ...;
int nbytes = Ni − (Nca − 36);
BigInteger remainder = modulus.divideAndRemainder(BigInteger.valueOf(2).pow(8*nbytes))[1];