2014-01-11 4 views
9

Не могли бы вы помочь мне указать, что такое отступ по RSA по умолчанию.По умолчанию RSA padding в SUN JCE/Oracle JCE

Точно, если я создаю экземпляр шифрования, как показано ниже, уверен, что java использует какое-то дополнение, поскольку длина зашифрованного текста в байтах всегда показывает 256 байтов для ключа RSA 2048, независимо от обычного текста, - это один символ или 10 символов.

Cipher.getInstance("RSA") 

Я хотел бы знать, что по умолчанию использовать заполнение Java внутренне, если нет набивки не указана в Cipher.getInstance («RSA»). заключается в том, что PKCS # 1 v 1.5?

Спасибо, Sam

ответ

15

Это идентично "RSA/ECB/PKCS1Padding" где ЕЦБ немного некорректным, так как он не реализует режим блочного шифра работы (он не обрабатывает открытого текста больше, чем «размер блока»). "RSA/None/PKCS1Padding" было бы лучшим именем или "RSA/None/RSASSA-PKCS1-v1_5", так как ваше предположение о механизме заполнения является правильным.

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

PKCS # 1 v1.5 padding также означает, что вход ограничивается максимальным размером ключа минус 11 байтов. Обратите внимание, что размер полученного зашифрованного текста всегда совпадает с размером ключа в PKCS # 1; даже если результирующее целое число меньше, оно будет оставаться заполненным нулевыми байтами. Я предполагаю, что размер ключа кратен 8.

Вы не должны полагаться на значения по умолчанию для спецификации алгоритма. Это усложняет понимание кода, и по умолчанию разработчики могут действительно различаться (хотя большинство из них попытается следовать примеру Oracle, чтобы избежать несовместимости). Поэтому используйте это только для того, чтобы понять, какой алгоритм сконфигурирован в существующем коде. Единственное место, где значение по умолчанию для платформы имеет смысл, - это, на мой взгляд, SecureRandom.

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