RSA в bouncycastle для Java - Как достигается рандомизация шифротекста? - PullRequest
3 голосов
/ 19 мая 2011

Я активно использую библиотеку bouncycastle для своих приложений RSA crypto.Мой вопрос: когда я шифрую один открытый текст два раза одним и тем же ключом, это приводит к двум различным шифротекстам, поэтому в реализации bouncycastles должна быть какая-то рандомизация (сам RSA не рандомизирован, поэтому enc (a, k)всегда одно и то же).

Может кто-нибудь сказать, пожалуйста, как это делается?Я кое-что узнал о криптослеплении, но мне показалось, что для этого мне понадобится какой-нибудь ослепляющий движок.

Вот мой исходный код:

private byte[] encRSA(byte[] in, java.security.PublicKey publicKey) {
    try {
        Cipher rsaCipher = Cipher.getInstance("RSA/NONE/PKCS1Padding", "BC");
        rsaCipher.init(Cipher.ENCRYPT_MODE, publicKey);
        rsaCipher.update(in);
        return rsaCipher.doFinal();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

Может кто-нибудь пожалуйстапомогите мне?

Спасибо !!!

1 Ответ

5 голосов
/ 19 мая 2011

RSA-вывод не является случайным, но PKCS1Padding - это, каждый раз приводя к другому выходу.См. RFC 3218 для получения дополнительной информации.

Случайное заполнение фактически необходимо для противодействия атакам, когда злоумышленник может попытаться угадать сообщение, зашифровав его и сравнив с зашифрованным выводом, который он перехватил.

...