2015-01-23 4 views
2

Я попытался использовать «RSA/ECB/PKCS7Padding» для шифрования. Он не поддерживается в JCE. Поэтому я загрузил Bouncy Castle, но кажется, что Bouncy Castle также не поддерживает это преобразование. Следующие коды:Использование «RSA/ECB/PKCS7Padding» с Bouncy Castle

Security.insertProviderAt(new BouncyCastleProvider(), 1); 
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS7Padding"); 

бросками

Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/ECB/PKCS7Padding 
    at javax.crypto.Cipher.getInstance(Cipher.java:524) 
    .... 
Caused by: javax.crypto.NoSuchPaddingException: Unsupported padding PKCS7Padding 
    at sun.security.pkcs11.P11RSACipher.engineSetPadding(P11RSACipher.java:129) 
    at javax.crypto.Cipher$Transform.setModePadding(Cipher.java:360) 
    at javax.crypto.Cipher.getInstance(Cipher.java:517) 
    ... 4 more 

Правильно ли я это делать?

TIA.

+0

Cipher.getInstance ("RSA/ECB/PKCS1Padding"); работает с bcprov-jdk16-1.46.jar – nayakam

+0

Вы можете использовать алгоритмы в спецификации http://bouncycastle.org/specifications.html – nayakam

+3

PKCS1 указывает дополнение для RSA. PKCS5/7 указывает дополнение для блокпиксеров, что RSA не является. – CodesInChaos

ответ

0

К резюме моего комментария, согласно документу java7. Там список стандартных алгоритмов должен поддерживаться каждой реализацией JCE Cipher API. Bouncy castle поддерживает дополнительные алгоритмы. Я использую «AES/ECB/PKCS7Padding» в своем приложении. Вы можете найти поддерживаемые алгоритмы с помощью надувного замка в algorithm section и "RSA/ECB/PKCS1Padding" или "RSA/NONE/PKCS1Padding" должны работать.

+0

Я хочу использовать« RSA/ECB/PKCS7Padding », а не« AES/ECB/PKCS7Padding ». Надувной кувшин замка, который я загрузил, - bcprov-ext-jdk15on-151.jar. Поддерживается ли поддержка «RSA/ECB/PKCS7Padding»? – user3573403

+3

@ user3573403: Прокладка PKCS7 с RSA на самом деле не имеет никакого смысла. –

+1

Привет @GregS, почему PKCS7 прокладка с RSA не имеет смысла? Это было требование, данное мне. – user3573403

2

Это не возможно реализовать PKCS # 7 отступов, как описано в RFC2315 section 10.3 примечания 2 для всех размеров ключей RSA:

Некоторых алгоритмов контентный шифрования предполагающей длина входа кратно к октетам, где к > 1 и позволяют приложению определять способ обработки входов , длина которых не кратна k октетам. Для таких алгоритмов метод должен вставлять входной сигнал на концевой конец с октетами k - (l mod k), все из которых имеют значение k - (l mod k), где l - длина ввода. Другими слов, вход проложенный на заднем конце с одним из следующих строк

и, в частности:

Этот метод заполнение хорошо определенных тогда и только тогда, когда к < 256; методы для больших k являются открытой проблемой для дальнейшего изучения.

Это означает, что вы могли бы реализовать это для RSA с 2048-битными ключами, но уже 4096-битные ключи слишком много для произвольных данных. Вот почему PKCS7Padding зарезервирован для блочных шифров, где каждый блок обычно составляет от 128 до 256 бит. Именно поэтому библиотеки обычно не поддерживают такую ​​комбинацию.

В приведенной выше спецификации содержится все, что вам нужно знать для реализации схемы заполнения PKCS # 7. Когда вы это сделаете, вы поместите свои данные, используя их, а затем зашифруйте с помощью RSA/ECB/NoPadding. Вы можете столкнуться с проблемой, что, хотя заполненный открытый текст и размер ключа совпадают, шифрование не работает. Это из-за того, что ваш дополненный открытый текст может по-прежнему превышать ключ. Вам может потребоваться добавить нулевой байт в начало открытого текста и только пэд (0x00 + открытый текст), чтобы наиболее значимые биты были отменены.

+2

Недостаток выше - тот факт, что заполнение PKCS # 7 не будет криптографически безопасным (помимо оперативной проблемы с размером, который вы описываете). Также см. Мой ответ для более вероятного сценария, почему требуется PKCS # 7. –

+0

Извините, но у меня есть только базовое понимание шифрования, и то, о чем вы, ребята, говорите, просто вне меня. Мое требование в основном таково: у нас есть случайный одноразовый ключ AES-256, и нам нужно зашифровать этот ключ AES с помощью открытого ключа получателя (RSA-2048). Требование, данное для шифрования этого ключа AES, это «RSA-2048, PKCS7 с заполнением в режиме обертывания». Как мне это сделать? – user3573403

+0

@ user3573403 Это странный запрос, как вы заметили из ответов. Я не совсем уверен, что реализация PKCS # 7 для RSA - такая хорошая идея, учитывая тот факт, что мое предложение превращает его в нечто иное, чем простое дополнение PKCS # 7 (из-за начального нулевого байта). Это требование, по-видимому, продиктовано кем-то вам. Итак, я думаю, это проблема совместимости, и в этом случае вы можете ее реализовать и посмотреть, работает ли она. Я не буду предоставлять код, чтобы сделать это, потому что я думаю, что это плохая идея (как сказал Маартен, это не CPA-безопасно). –

2

Даже если бы такая вещь существовала, использование RSA с дополнением PKCS # 7 или схема, непосредственно полученная из дополнения PKCS # 7, была бы небезопасной (или, точнее, она не была бы CPA-защищенной).

Что бесконечно более вероятно, что клиент не требует PKCS # 7 обивки но что зашифрованные данные должны содержаться в CMS message format. PKCS # 7 является предшественником этого формата, дополнением PKCS # 7 является лишь небольшая часть этой спецификации.

Надувной Замок содержит реализацию этого формата:

Генераторы/Процессоры для S/MIME и CMS (PKCS7/RFC 3852).

В настоящее время содержатся в файлах JAR bcpkix*.

+0

Извините, но у меня есть только базовое понимание шифрования, и то, о чем вы, ребята, говорите, просто вне меня. Мое требование в основном таково: у нас есть случайный одноразовый ключ AES-256, и нам нужно зашифровать этот ключ AES с помощью открытого ключа получателя (RSA-2048). Требование, данное для шифрования этого ключа AES, это «RSA-2048, PKCS7 с заполнением в режиме обертывания». Как мне это сделать? – user3573403

+0

Начните с чтения спецификации CMS, с которой я связан. Извините, но это пространство немного не подходит для полного объяснения CMS.Режим конвертирования, безусловно, является частью спецификации CMS, поэтому вы не просто требуете заполнения PKCS # 7, как я уже упоминал в ответе. –

Смежные вопросы