Это страница обсуждения для обсуждения улучшений статьи RSA (криптосистема) . Это не форум для общего обсуждения темы статьи. |
|
Найти источники: Google (книги · новости · ученые · бесплатные изображения · ссылки WP) · FENS · JSTOR · TWL |
Архивы : 1Период автоматического архивирования : 365 дней |
Эта статья уровня 5 жизненно важна и имеет рейтинг C-класса по шкале оценки контента Википедии . Она представляет интерес для следующих WikiProjects : | ||||||||||||||||||||||||
|
To-do list for RSA (cryptosystem):
|
This page has archives. Sections older than 365 days may be automatically archived by Lowercase sigmabot III when more than 10 sections are present. |
Я думаю, что необходимо больше информации о . Что это значит? Возьмите 2 простых числа, уменьшите их на 1, умножьте их друг на друга, но затем ? Сохраните результат в пустом множестве под номером 'n' ? Как пустое множество может что-то содержать ? -- Garo 21:52, 17 августа 2005 (UTC)
Tuntable ( обсуждение ) 00:46, 8 января 2024 (UTC)
в оригинальной статье RSA функция тотиента Эйлера φ(n) = (p − 1)(q − 1) используется вместо λ(n) для вычисления частной экспоненты d. Поскольку φ(n) всегда делится на λ(n), алгоритм тоже работает.Функции тотиента трудно избежать при объяснении алгоритма, и я думаю, что объяснение было бы сложнее понять, если бы мы попытались это сделать, но вы, конечно, можете предложить формулировку, которая, по вашему мнению, будет яснее. CodeTalker ( talk ) 02:40, 8 января 2024 (UTC)
Привет,
Я читал эту статью об алгоритме RSA и что-то показалось мне проблемой в генерации ключей. Действительно, что произойдет, если мы выберем
(Условия « и » — единственные два условия, упомянутые в статье.) Тогда это всегда действительный закрытый ключ.
На самом деле, мы ищем
Итак, если , то работает! Итак, когда известен открытый ключ, если тест верен, сообщение можно расшифровать.
Я считаю, что это общеизвестный факт, поскольку простой пример — открытый ключ (и его всегда рекомендуется избегать). Действительно выбрал
Таким образом, (3,15) не является допустимым открытым ключом, однако он удовлетворяет условиям, изложенным в статье Википедии.
Итак, каковы правильные условия? Во-первых, нам нужно спросить, что
Однако мы видим, что если , то
Итак, даже условие
не очень хорошо сформулировано, поскольку может включать в себя то, что запрещено .
Поэтому я бы предложил следующие условия:
Имеет ли это смысл?
Клемент Джастин (обсуждение) 12:45, 24 июня 2016 (UTC)
В настоящее время статья гласит: «...вычислить тотиент лямбда(n) = lcm((p-1, q-1)». Но это не тотиент, тотиент равен (p-1)(q-1), что по крайней мере вдвое больше лямбды (потому что оба p-1, q-1 четные). Согласно более ранним комментариям, кажется, что раньше на странице говорилось «вычислить тотиент фи (или лямбда?) = (p-1)(q-1)». Теперь не очевидно, что два варианта дадут один и тот же результат (даже не ясно, что означает результат... может быть: модульная обратная величина?). Да? Если да, то это заслуживает замечания, по крайней мере. Если нет, то что следует использовать? — MFH : Talk 21:16, 22 мая 2018 (UTC)
Я видел множество известных сайтов и книг, использующих тотиент Эйлера, но он не используется в Википедии. Я создавал код RSA на основе вашей программы, только чтобы понять, что есть более быстрый и эффективный способ его кодирования, но он не был включен в статью. По крайней мере, тонкое упоминание было бы оценено. Cyclone26 ( обсуждение ) 23:06, 9 апреля 2019 (UTC)
Я разместил ссылку на эту заметку здесь: https://en.wikipedia.org/wiki/RSA_(cryptosystem)#CryptoStrengthOfPQ
и здесь (старый отменённый кэш правок): https://en.wikipedia.org/w/index.php?title=RSA_(cryptosystem)&diff=983454044&oldid=983447902#CryptoStrengthOfPQ
Но мои правки были отменены: https://en.wikipedia.org/w/index.php?title=RSA_(cryptosystem)&oldid=983456104
Я все описал, затем поставил якорь и добавил эту ссылку на страницу определения безопасных простых чисел: https://en.wikipedia.org/w/index.php?title=Безопасные_числа_и_простые_числа_Софи_Жермен&diff=983441331&oldid=983436407
Главное, что там описано - исключить общие множители (общие делители) для чисел (p-1) и (q-1), и оставить только 2 в качестве общего множителя этого числа,
чтобы предотвратить простую факторизацию (n-1) и сделать ее такой сложной.
Когда p и q — безопасные простые числа, то p' = (p-1)/2, q' = (p-1)/2, где p' и q' — тоже простые числа, более того, это некоторые простые числа Софи-Жермен.
Итак, из-за этого числа (p-1) и (q-1) - имеют только один общий делитель (число 2).
Поскольку каждое из этих чисел можно разложить на множители только как (p-1) = 2*p'; (p-1) = 2*q',
и только 2 является общим множителем (результатом факторизации, делителем), в то время как p' и q' - разные простые числа, и это не общие делители.
Да, эти p' и q' являются простыми числами Софи-Жермен, но они не используются при генерации ключей,
и использовали безопасные простые числа - p и q, и это безопасные простые числа, а не простые числа Софи-Жермен.
Я все это там описал, и я не знаю, что еще нужно добавить,
объяснить решение этой проблемы с общими делителями (p-1) и (q-1),
проблема, которая была описана в предыдущей версии.
Но посмотрите на это:
p, q - простые числа;
n = p*q;
фи(n) = (p-1)*(q-1);
λ(n) = lcm((p−1),(q−1)); где λ — функция тотента Кармайкла.
НОК можно вычислить с помощью алгоритма Евклида, поскольку НОК(a,b) = |ab|/НОД(a,b), НОД — наибольший общий делитель.
λ(n) = |((p-1)*(q-1))|/НОД((p-1),(q-1)) = |фи(n)| / НОД((p-1),(q-1)) = фи(n)/НОД((p-1),(q-1)), так как фи(n) - положительное натуральное число;
Теперь давайте определим некоторые: g = gcd((p-1),(q-1));
λ(n) = фи(n)/g
g*λ(n) = фи(n);
g = фи(n)/λ(n);
Каждый x, который является взаимно простым с n = p*q, является делителем для ( (n-1) = (p*q-1) = ( (p−1)*(q−1) + (p−1)+(q−1) ) ), для (p-1), для (q-1) и для λ(n).
Таким образом, для вычисления d можно использовать формулу ( d*e === 1 ( mod λ(n) ) ), вместо ( d' * e === 1 ( mod phi(n) ) ).
Поскольку g = phi(n)/λ(n), ( d*e === 1 ( mod phi(n) ) ) -> ( d*e === 1 ( mod λ(n) ) ), поэтому d = d' mod λ(n) и (d !== d' mod phi(n));
После всего этого мы видим, что (d, d'+1*λ(n), d'+2*λ(n), ..., d'+(g-1)*λ(n)) - это и есть приватные ключи, криптоэквивалентные приватному ключу d.
Это означает, что g = gcd((p-1),(q-1)) — это число криптоэквивалентно закрытых ключей,
и когда это число растет, это снижает криптостойкость RSA-системы.
Лучший случай, когда g = gcd((p-1),(q-1)) = 2, и в этом случае p = 2*p'+1, q = 2*q'+1, где gcd(p',q')=1,
и где p' и q' – простые числа (простые числа Софи-Гермен), а где p и q - безопасные простые числа, поэтому, по определению.
В этом случае (p-1) и (q-1) имеют только один общий множитель (общий делитель) = 2.
Обсуждать.
Я не знаю, какие "надежные источники" вы хотите, для очевидных вещей. Возможно, эта старая книга вас "убедит":
https://studfile.net/preview/5367570/page:7/
Пункт 8.4, ключевые слова: "Очевидно, в наилучшем возможном случае..." - есть Безопасные Праймы.
После этого было описано использование сильных простых чисел, а также алгоритм для их генерации — алгоритм Гордона.
213.231.62.76 ( обсуждение ) 02:36, 15 октября 2020 (UTC)
Я знаю, что статья не претендует на то, чтобы быть окончательным списком всех атак. Но поскольку в статье упоминается сокращение CRT для подписи/расшифровки и есть целый раздел атак против неотбитых сообщений RSA, вероятно, следует упомянуть атаку Bellcore, когда кто-то заставляет вас подписать одно и то же сообщение дважды, где одна из подписей является допустимой, а другая неисправна из-за ошибки в одном из возведений в степень CRT, что позволяет кому-то обнаружить один из простых множителей, что полностью решает 2-простой RSA. Защита заключается в выполнении операции с открытым ключом с использованием «e» против подписи, чтобы гарантировать, что результат соответствует исходному подписываемому сообщению. Детерминированное заполнение так же уязвимо, как и отсутствие заполнения, но такие методы, как OAEP, должны предотвратить повторный просмотр одного и того же ввода «сообщения». Silversplash ( обсуждение ) 06:56, 26 января 2023 (UTC)
Возможно, следует создать раздел для RSA, использующего более двух простых чисел, поскольку найти информацию об этом может быть сложно.
Хотя в наиболее распространенном использовании RSA модуль «n» представляет собой произведение двух простых чисел, его можно использовать и как «мультипростой RSA», где «n» представляет собой произведение трех или более простых чисел.
Текущие алгоритмы факторизации зависят от размера 'n', но если простые множители достаточно велики, они не способны определить, является ли 4096-битное 'n' произведением 2 2048-битных простых чисел или произведением 4 1024-битных простых чисел. Чтобы ограничить, насколько малыми могут быть простые числа, OpenSSL ограничивает количество простых чисел на основе размера 'n', с максимальным значением по умолчанию в 5 простых чисел.
Дэниел Дж. Бернстайн описывает экстремальный постквантовый вариант многопростого RSA в https://cr.yp.to/papers/pqrsa-20170419.pdf, где «n» — это произведение огромного количества 4096-битных простых чисел, но расшифровка/подписание ускоряются с помощью вычислений CRT.
Преимущество многопростого RSA в том, что он имеет более высокую скорость без уменьшения длины бит 'n'. Потому что когда есть 'k' простых чисел одинаковой длины, есть 'k' возведений в степень чисел, размер которых равен bits(n)/k. Таким образом, вычисление CRT подписей с использованием 8192-битного 'n' может быть выполнено быстрее с CRT, если есть 4 простых числа по 2048 бит, чем CRT, когда есть 2 простых числа по 4096 бит.
Математика для RSA, которая не использует сокращение CRT, та же самая, за исключением того, что вычисления для 'phi' и 'lambda' включают умножение более двух чисел 'prime less 1', и при наличии более 2 простых чисел больше не верно, что НОК всегда является произведением простых чисел, деленных на НОД. Кроме того, больше невозможно гарантировать, что 'n' имеет правильную длину в битах, принудительно сделав верхние 2 бита всех простых чисел равными 1. Необходимо соблюдать осторожность, чтобы НОК не был значительно меньше 'n' из-за больших множителей, общих только для 2 из 3 или 4 'prime less 1's', и не отраженных в объединенном НОД.
Для многопростых RSA CRT, выполняемая OpenSSL, включает создание дополнительного d(простого) и обратного простого числа для каждого из простых чисел, превышающих сумму 2. Изменение примера статьи с 2 простыми числами для использования предварительно вычисленных переменных OpenSSL выполняется следующим образом.
1. Выберите различные простые числа p=61 q=53 r=59 s=83 (те же p и q, дополнительные r и s)
2. Вычислите 'n' = произведение всех простых чисел, n = 61 x 53 x 59 x 83 = 15832001
3. totient(n) = lcm(60,52,58,82) = 927420
4. e = 17 и проверено как взаимно простое с totient, поскольку gcd(17,927420) = 1
5. d = обратное число 17 mod 927420 = 436433, так как 436433 * 17 mod 927420 = 1
6. Открытый ключ e=17 и n=15832001, а шифрование c(m) = m^e mod n = m^17 mod 15832001
7. Если открытый текст меньше, чем p*q, то переменные CRT для 3-го и 4-го простых чисел не имеют никакого эффекта, поэтому в этом примере m=65 меняется на m=12345678.
8. Шифрование: c=12345678^17 mod 15832001 = зашифрованный текст c=8765942
9. Сокращенные переменные CRT вычисляются заранее:
d_p = d mod p-1 = 436433 mod 60 = 53 (то же самое, что и в примере с 2-мя простыми числами, потому что p такое же)
d_q = d mod q-1 = 436433 mod 52 = 49 (то же самое, что и в примере с 2-мя простыми числами, потому что q такое же)
d_r = d mod r-1 = 436433 mod 58 = 41
d_s = d mod s-1 = 436433 mod 82 = 29
10. Хотя обратное число для «q» такое же, как и в расчете с 2-мя простыми числами, предварительно вычисленные обратные числа для простых чисел после 2-го простые числа вычисляются по-разному, где значение вместо этого является обратным произведением предыдущих простых чисел, mod 'это простое число':
qInv = 1/q mod p = 53 ^-1 mod 61 = 38 (то же самое, что и в примере с 2 простыми числами)
rInv = 1/(p*q) mod r = (61*53) ^-1 mod 59 = 54
sInv = 1/(p*q*r) mod s = (61*53*59)^-1 mod 83 = 32
11. Частичные сообщения здесь помечены с использованием букв(ы) простых чисел вместо нумерации как m1 и m2, но в остальном 1-й шаг является идентичным методом для всего вычисления, когда есть 2 простых числа:
m_p = c ^ d_p mod p = 8765942^53 mod 61 = 10
m_q = c ^ d_q mod q = 8765942^49 mod 53 = 17
m_r = c ^ d_r mod r = 8765942^41 mod 59 = 46
m_s = c ^ d_s mod s = 8765942^29 mod 83 = 9
h_q = (qInv * (m_p - m_q)) mod p = (38 * (10-17)) mod 61 = 39
m_pq = (m_q + h_q * q) = 17 + 39 * 53 = 2084 (те же переменные, что и в 2-prime)
12. Для оставшихся шагов вычисления для K-го простого числа составляют h_K = Kinv * (m_K - m_(pq...K-1) ) mod K-го простого числа, а m_(pq...K) равно m_K + h_K * product_primes_previous_to_K
13. Следующий шаг расширяет вычисление 2-го простого числа шага 11 для использования переменных CRT для 3-го простого числа:
h_r = (rInv * (m_r - m_pq)) mod r = (54 * (46-2084)) mod 59 = 42
m_pqr = (m_pq + h_r * p*q) = (2084 + 42 * 61*53) = 137870
14. Следующий шаг расширяет вычисление шага № 13 для использования переменных CRT для 4-го простого числа:
h_s = (sInv * (m_s - m_pqr)) mod s = (32 * (9-137870)) mod 83 = 64
m_pqrs = (m_pqr + h_s * p*q*r) = (137870 + 64 * 61*53*59) = 12345678
Silversplash ( обсуждение ) 06:57, 26 января 2023 (UTC)
RSA (криптосистема)#Генерация ключей Что именно это означает?
Можно ли это сделать более понятным? InverseCosine (обсуждение) 20:57, 27 марта 2023 (UTC)
Привет, спасибо за этот превосходный вклад, я прочитал его на всех языках, которые я понимаю, на немецком, испанском, французском, все эти версии среди них, и в отношении вашего супервклада, вклады на других языках математически ошибочны, какой позор, основы этого алгоритма разработал Леонард Эйлер примерно в 1880 году на немецком языке, но худшие страницы о RSA Lobito060454 (обсуждение) 12:11, 4 апреля 2023 (UTC)
https://www.researchgate.net/publication/374155658_High_temperature_QC_breaking_RSA-2048 2601:205:8081:BC40:4071:2248:4EE5:1D8 (обсуждение) 23:30, 4 августа 2024 (UTC)