Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 19

Как к переводу вопросов вообще нет, но статья же трижды переваренный к**, да и к тому же по уязвимостям, недостаткам, подводным камням от силы три предложения наберётся и то в виде сносок по типу "Что я для себя узнала".

А у меня есть вопросы и к переводу. Например

 Секретный ключ также можно использовать для генерации сигнатуры

почему не выработки подписи?

Соглашусь, в этом контексте грамотнее употребить термин "подпись", но вот понятие "выработки" здесь вряд ли подойдет.

А также handwaving — это вовсе не «махание руками», а скорее «пустой трёп».

А также Euler's totient — это просто функция Эйлера.

А также factoring the product of large prime numbers — это не факторизация больших простых чисел (простые числа потому и простые, что они факторизуются тривиальным образом).

А также wrapping operations — это не «обёртывающие операции», а скорее «вычисления по модулю».

Насчет hand-waving благодарю. Не знал про метафоричное значение этой фразы. В словаре оно оказалось скрыто под слитным написанием. Под раздельным там все то же "размахивание руками". Меня смущал этот момент... Тем не менее здесь явно не подойдет предложенный вами "пустой треп". Речь о том, что автор не стала углубляться в технические детали и попросила "поверить ей..." как бы на слово. Исправил.

Насчет тотиента, у автора под этим словом идет ссылка на функцию Кармайкла, не Эйлера. Что же касается функции Эйлера, то ее значения в Википедии именуются тотиентами. Уместно ли в свете этих двух фактов использовать здесь сей термин?

Далее, насчет "factoring the product of large prime numbers" я специально взял определение из той же Википедии: "RSA — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел". Это ошибочное определение?

Насчет "wrapping operations" меня тоже насторожила эта формулировка, но иной ее интерпретации я найти не смог. Вывести из этого выражения "вычисления по модулю" сложновато. Вы уверены, что значение именно такое, или это просто догадки?

По поводу handwaving, тут скорее всего имелся в виду этот смысл, что наверное лучше перевести как «бездоказательно». Так что «поверьте на слово» — адекватный перевод.

Насчёт тотиента, в Википедии в этом месте упоминается именно функция Эйлера, называемая на английском totient function. (Я, кажется, вовсе не встречал слова «тотиент» в русскоязычном употреблении.)

По поводу факторизации, правильно не «факторизации больших простых чисел», а «факторизации произведений больших простых чисел». Смысл в том, что перемножить два больших простых числа легко, а вот извлечь из произведения эти простые числа обратно (то есть, разложить произведение на множители) сложно.

По поводу wrapping operations, имеется в виду поведение при переполнении. Если при сложении 32-битных чисел результат выходит за 32 бита, то можно либо завершить операцию аварийно (checked operations), либо игнорировать биты старше 32, при этом значение как бы «заворачивается» (wraps around maximum), и получается результат, верный лишь по модулю 2³² (описано, например, здесь). [Примечание для зануд: да, я знаю о представлениях отрицательных чисел не в дополнительном коде.] То же происходит и при умножении.

В английской версии той же статьи Википедии:

The most common result of an overflow is that the least significant representable digits of the result are stored; the result is said to wrap around the maximum (i.e. modulo a power of the radix, usually two in modern computers, but sometimes ten or another radix).

Спасибо за развернутое пояснение.

В Википедии я упустил, что в ее определении речь идет не о простых, а о целых числах. Нюанс.

По поводу "заворачивания" при переполнений тоже ясно. Не ожидал этого значения в текущем контексте.

В общем, правки внес. Благодарю еще раз.

Большой вычислительной сложностью обладает операция факторизации n. Так как это число было получено в результате произведение двух простых чисел p и q, то существует единственная нетривиальная (то есть p != 1 и q != 1) пара целых чисел, произведение которых равно n. В этом и заключена сложность взлома RSA грубой силой.

То есть факторизуется составное число n. А задачи факторизации «больших простых чисел» не существует по определению — у простых чисел всегда только два делителя: 1 и само число.

больших целых чисел.

тут же ЦЕЛЫХ чисел, а не простых. факторизация подразумевает, что вы ищите все простые числа, являющиеся делителями. Поэтому факторизация ПРОСТЫХ чисел тривиальна, т.к. делителей ровно два. Ну и про факторизацию из статьи вам верно сказали - "факторизация произведений больших простых чисел".

Да, проглядел это слово. Но мы уже подробно разобрались с этим нюансом. Отдельное спасибо VladD-exrabbit

Недавно, читая книгу Real-World Cryptography, я узнала об атаке Блейхенбахера, иначе называемой атакой миллионом сообщений. Этот вид атаки Даниэль Блейхенбахер продемонстрировал в 1998 году, взломав RSA через функцию шифрования PKCS #1. В книге об этой атаке было сказано немного, поэтому я решила изучить её сама и в конечном итоге реализовать.

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

Ну вот скажем, отсюда неявно как-бы следует, что атака Блейхенбахера была обнаружена (в 1998) и устранена. На самом же деле, модификации этой атаки были продемонстрированы намного позже, много раз, в том числе где-то в 2019 году. Что в общем-то и привело к тому, что RSA не рекомендуется больше применять в некоторых случаях (типа ssh-rsa).

Ну то есть, основной вопрос ровно в том же, что уже указано выше - нафига этот материал вида "ой что я тут для себя узнала" вообще нужно переводить? На Хабре уже есть с пяток статей, раскрывающих эту же тему, причем более детально, про новые вариации атаки в том числе.

И да, PKCS#1 (как и другие стандарты этой серии) - это ни про какие-то "функции шифрования", а скорее про форматы файлов. Ну или точнее не файлов, а скорее форматы хранения ключей. То есть, взлом относился к RSA, у которого ключи хранятся и передаются в формате PKCS#1.

Я ошибаюсь, или RSA deprecated? Сам недавно просто читал про него в ключе tls

В некоторых сценариях.

Я до сих пор путаюсь с порядком байтов little-endian и big-endian. Постоянно забываю, какой из них и что означает. Думаю, надо уже написать по этой теме статью в качестве личной справки.

Статью? Для запоминания очевидного соответствия little/big - наименее/наиболее значащая часть числа? Тут даже мнемоника из Гулливера про тупой/острый конец яйца лишняя, т.к. название без всяких мнемоник замечательно справляется с передачей смысла.

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

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

Недавно искал информацию по генерации p и q, не нашёл ответа, в исходники залезть пока времени не было.

Вопрос вот в чём - как именно выбираются большие p и q? Как я понимаю, их выбор должен быть максимально случайным, чтобы атакующий не мог воспроизвести у себя выбор этих чисел. Каков алгоритм их выбора?

Берётся случайное нечётное большое число, проверяется, простое ли оно. Если нет, то прибавляется 2 и проверяется, и т.д. пока не найдётся простое. Как нашли простое - просто используем его. Проверка на простоту для таких больших чисел делается вероятностным методом, например, тестом Ферма.

Спасибо, стало понятнее. Интересно, насколько "разряженно" числовое пространство в плане простых чисел, как много итераций обычно приходится сделать чтобы найти первое простое число?

Разрежено, но тем не менее за секунду найти пару простых длиной в 2048 бит на современном процессоре не представляет проблемы.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий