id: Гость   вход   регистрация
текущее время 21:01 28/03/2024
Автор темы: Гость, тема открыта 15/04/2004 17:01 Печать
http://www.pgpru.com/Форум/ПрактическаяБезопасность/ГенерацияКлючейRSAСПомощьюPGP
создать
просмотр
ссылки

Генерация ключей RSA с помощью PGP


Как с помощью PGP сгенерировать, например, 1024-битовый открытый ключ (m=p*q) в виде 128-байтовой последовательности или, что ещё лучше, десятичного числа, а также узнать 512-битовые числа p и q (в том же виде), которые использовались для его генерации? Жедательно для PGP 2.6.3i. Но можно и для более новых версий PGP.
При генерации ключей PGP, в частности, создаёт файл Pubring.pgp. Но в этом файле кроме ключа находится ещё что-то. Хотелось бы знать, можно ли выделить ключ из этого файла и, если это возможно, как это сделать?


 
На страницу: 1, 2 След.
Комментарии
— SATtva (15/04/2004 18:02)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Есть специальная утилита pgpdump, предназначенная для раскодировки различных пакетов OpenPGP в удобочитаемый формат. Можно получить значения модуля и экспоненты любого ключа в виде шестнадцатеричного числа; перевести исчисление на любое другое основание труда не составит.

Обычным способом установить сомножители m Вам не удастся — они участвуют только в процессе генерации ключа, не покидая ОЗУ, после чего уничтожаются. Так что либо адаптируйте код программы, чтобы просто выдавала сомножители m, либо, что предпочтительней, используйте специализированное ПО, коего немало.

pgpdump с веб-интерфейсом:
http://www.pgpdump.net/
pgpdump в исходных текстах под unix:
fileftp://pgp.iijlab.net/pub/pgp/tools/pgpdump-0.22.tar.gz
— Kent (16/04/2004 01:57)   профиль/связь   <#>
комментариев: 437   документов: 30   редакций: 15
pgpdump для Windows:
filehttp://pgpngpg.front.ru/gpg/pgpdump.zip
— SATtva (16/04/2004 02:15)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
О, спасибо! Я уж думал не найду его нигде после закрытия сайта Имада.

Добавлено:

Только версия старовата...
— Гость (20/04/2004 13:48)   <#>
Всем большое спасибо!
— Гость (21/04/2004 10:42)   <#>
Уважаемый SATtva, у меня ещё два вопроса.

1. О каком специализированном ПО Вы говорите? (Линки и т.д., плиз :-))
2. С каким объёмом энтропийных данных работает гамма-генератор PGP? (Вопрос не совсем по теме, но всё-таки)
— SATtva (25/04/2004 19:45)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
1. См. на sourceforge. Возможно, OpenSSL и другие криптобиблиотеки к месту придутся (точные ссылки Paranoid Ant приводил, воспользуйтесь поиском по форуму).
2. Постоянно обновляемый пул произвольных значений, получаемый от движений мыши, интервалов между нажатиями клавиш, показаний системного таймера, сопровождающих каждое из событий. Это истинные непредсказуемые случайности. Случайные числа для векторов инициализации, ключевого и прочего материала генерируются по методике ANSI X9.17.
— Гость (27/04/2004 13:44)   <#>
У меня ещё два вопроса.

Первый вопрос.

При расшифровке файла, содержащего открытый ключ, программа PGPDump, в частности, выдаёт

RSA e(5 bits) – 11

Это и есть экспонента шифрования? И, если да, не слишком ли она мала? Не являются ли данные ключи слабыми? Возможна ли в данном случае атака по методу low-exponent attack?

Второй вопрос, вытекающий из первого, ещё интереснее.

Сначала цитата (откуда – неважно, везде одно и то же):

"Итак, генерация RSA-ключей (чисел m/d/e) заключается в следующем:

    • Найти большие простые числа p и q, длина произведения (сумма длин) которых (в битах) равна длине искомого RSA-ключа. Простые — значит не имеющие делителей кроме единицы, например 7, 11, 23. Обычно длины p и q принимаются одинаковыми – например по 128 бит для 256-битного ключа.
    • Число m принимается равным m = p * q. Выбирается число e, взаимно простое с произведением (p-1)*(q-1). Взаимно простое — значит не имеющее общих делителей, кроме единицы. Так как числа p и q – простые, а значит – нечётные (ибо не делятся на 2), то (p-1)*(q-1) — число чётное, и, соответственно, e будет нечётным. При этом e не может быть равно 1, ибо тогда шифровка не имеет смысла, так что минимально допустимое е равно 3.
    • Обычно выбирают некоторое начальное e, и пробуют e, e+2, e+4, e+6 и т.п., до тех пор, пока числа e и (p-1)*(q-1) не окажутся взаимно простыми. Записывается это условие так: GCD(e, (p-1)*(q-1)) = 1, что равносильно GCD(e, p-1)=1 и GCD(e, q-1)=1. Здесь GCD (Greatest Common Divisor) есть не что иное как НОД (Наибольший Общий Делитель)..."

Так вот – вопрос. Как осуществляется подбор чисел p и q, чтобы экспонентой шифрования оказалось некое заранее заданное число? Какие условия для этого необходимо задать? И почему это число, как правило задаётся жёстко? В PGP 2.6.3i – 11 (?). Для RSA Factoring Challenge числа генерировались с использованием экспоненты 65537 (F4).
И ещё, можно ли при генерации ключей с помощью PGP 2.6.3i самому произвольно задать экспоненту шифрования?

И как генерировать только открытый ключ, без закрытого? (Чтобы не надо было набирать произвольный текст)
— SATtva (27/04/2004 17:48)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Малая экспонента повышает скорость выполнения криптографических операций; надёжность схемы понижается только тогда, когда реализация допускает шифрование множества (собственно, множества, равного e) идентичных сообщений разными ключами с одинаковым показателем e. В PGP это невозможно, ибо шифруемые сообщения представляют собой шифртексты, произведённые с помощью абсолютно случайных сеансовых симметричных ключей.

Если малая экспонента Вас всё же смущает (PGPdump, кстати, выдаёт числовые параметры в шестнадцатеричном виде, и Ваше "11" в десятичном счислении равно 17) поставьте версию PGP поновее. Текущие восьмые используют упомянутый показатель e = 65537.

Второй вопрос сложнее, алгоритм генерации привести не могу. Вы сами лучше разберётесь, если посмотрите на исходный текст программы. Но примерно процедура сводится к следующему: берётся некоторое начальное значение, от него по возрастающей (или по убывающей) производится поиск подходящего кандидата на простое число, проверяя каждый на удовлетворение определённому комплексному критерию. Если тест пройден, поиск прекращается. Если нет — продолжается дальше по возрастающей (или по убывающей). В нашем случае НОД является одним из критериев проверки.

И ещё, можно ли при генерации ключей с помощью PGP 2.6.3i самому произвольно задать экспоненту шифрования?

Без внесения изменений в исходный код — нет.

И как генерировать только открытый ключ, без закрытого?

Могу я поинтересоваться, зачем нужен открытый ключ без закрытого? Это односторонняя функция получится. Сейф, из которого ничего достать нельзя.
— Гость (29/04/2004 15:41)   <#>
Поинтересоваться, конечно можно. Открытые ключи без закрытых нужны мне для проверки моих теорий в отношении факторизации ключей. Преимущественно, массовой. То есть, меня интересует возможность факторизации не одного ключа, а одного ключа из n. Сам я PGP в целях, для которых она создана, пока не пользуюсь. А изучение возможностей факторизации ключей RSA является моим хобби. Очень увлекательное занятие, понимаете ли :).

Большое спасибо за ответы на мои вопросы.
— SATtva (29/04/2004 15:56)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Всегда пожалуйста, DimP. Держите в курсе своих изысканий.
— Kent (27/06/2004 18:32)   профиль/связь   <#>
комментариев: 437   документов: 30   редакций: 15
Только версия старовата...

PGPDUMP v 0.19 от 15.06.03
filehttp://www.chez.com/winterminator/pgpdump.zip
— Гость (21/12/2004 21:12)   <#>
По RSA:
Подскажите пожалуйста, можно ли с помощью pgpdump получить закрытый ключ (private key) в виде шестнадцатеричной последовательности.
Открытый я получил (с Вашей помощью ;) ) – это, я так понимаю, e
а по закрытому в дампе: Encrypted RSA d

ПС: Поиском пользовался :)
— SATtva (21/12/2004 21:36)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Да, можно и закрытый: так же скармливаете пгпдампу private key block, предварительно сняв с ключа парольную фразу (иначе закрытые показатели будут encrypted).

ПС: Поиском пользовался :)

Респект :)
— Flame_xXx (26/09/2008 19:10)   <#>
Мне нужно сгенерировать ключ из с++ 6.0. Тоже ничего найти не могу толком..
— SATtva (26/09/2008 19:44)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Flame_xXx, Вам сюда, в третий пункт.
На страницу: 1, 2 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3