Причина, по которой расшифровка должна быть невозмутимой, заключается в том, что можно различить части ключа или открытого текста. после модульное возведение в степень при выполнении распаковки. В конце концов, часть распаковки подвержена атакам оракула заполнения.
Модульные операции будут отображать целое число в произвольное значение в диапазоне [0, N), просто выполняя mod N над входным значением. Обычно это так, поскольку это будет математическим эквивалентом — имейте в виду, что оптимизированные библиотеки могут выполнять другие вычисления.
Злоумышленник, который может изменить входное сообщение, обычно может самостоятельно выбрать эквивалентное сообщение в диапазоне [0, N). Таким образом, обработка больших или меньших целых чисел не должна влиять на безопасность алгоритма RSA.
Тем не менее, было бы плохой идеей удалить эти проверки:
- их можно использовать, чтобы попытаться найти переполнение буфера или вызвать переполнение другого типа;
- размер мог быть увеличен для смещения других значений сообщения в рамках протокола;
- они могут использоваться для замедления системы, поскольку у вас все еще будет начальная модульная операция с числом произвольного размера.
В общем: чем выше уверенность в том, что состояние системы находится в допустимых пределах, тем выше безопасность.Предварительные условия и защитные операторы — это относительно дешевые способы убедиться, что входные данные верны и что вычисления не выполняются с использованием значений, выходящих за пределы допустимого диапазона.