· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.CRYPTOGRAPHY —› Прошу совета у знатоков криптографии и RSA в частности.

<< . 1 . 2 . 3 . 4 .

Посл.отвђт Сообщенiе


Дата: Ноя 7, 2004 00:18:19

не уйма. Если randseed действительно зависит от даты то получится меньше чем 2^32 и вполне так решаемо.


Дата: Ноя 8, 2004 12:24:05 · Поправил: bogrus

Получается randseed зависит от GetTickCount, т.е. двордового счетчика, который стартует с момента загрузки ОС, и делает полный оборот за 49.7 дней
Но! Многие ли не выключают комп такой период? имхо обычно машина работает до суток

added: trsa я компилил в 6-м дельфи, там в randomize используется GetSystemTime
rtl60.System::Randomize 4>/ PUSH    EBP
40003679                  | MOV     EBP, ESP
4000367B                  | ADD     ESP, -18
4000367E                  | LEA     EAX, DWORD PTR [EBP-18]
40003681                  | PUSH    EAX
40003682                  | CALL    <JMP.&kernel32.GetSystemTime>
40003687                  | MOVZX   EAX, WORD PTR [EBP-10]
4000368B                  | IMUL    EAX, EAX, 3C
4000368E                  | ADD     AX, WORD PTR [EBP-E]
40003692                  | IMUL    EAX, EAX, 3C
40003695                  | XOR     EDX, EDX
40003697                  | MOV     DX, WORD PTR [EBP-C]
4000369B                  | ADD     EAX, EDX
4000369D                  | IMUL    EAX, EAX, 3E8
400036A3                  | MOV     DX, WORD PTR [EBP-A]
400036A7                  | ADD     EAX, EDX
400036A9                  | MOV     DWORD PTR [System::RandSeed], EAX
400036AE                  | MOV     ESP, EBP
400036B0                  | POP     EBP
400036B1                  \ RET
rtl60.System::RandInt 4>  / PUSH    EBX
40004125                  | XOR     EBX, EBX
40004127                  | IMUL    EDX, DWORD PTR [EBX+System::RandSeed],8088405
40004131                  | INC     EDX
40004132                  | MOV     DWORD PTR [EBX+System::RandSeed], EDX
40004138                  | MUL     EDX
4000413A                  | MOV     EAX, EDX
4000413C                  | POP     EBX
4000413D                  \ RET
В этом случае, если предположить, что ключи генерировались автоматически в момент компиляции (сборки) проекта, то это (почти точное) время известно по PE.TimeDateStamp


Дата: Ноя 8, 2004 19:14:53 · Поправил: bogrus

Каков принцип:
Берем начальное значение RandSeed, как в проге генерим 2 простых числа (P и Q), перемножаем и сравниваем с твоим modulus, если не совпало - значит повторяем пока RandSeed<>FFFFFFFF

Как происходит генерация P и Q в этом примере:
Нажимаем "CreateKey" и vcl60.Controls::TControl::Click запускает процедуру.
Она выделяет 2 буфера (обзовем их "Xp" и "Xq", каждый размером 17*4 байт), потом их заполняет (вызывая rtl60.System::RandInt) случайными значениями. Но (видимо хороший глюк:) параметр RandSeed пуст, т.к. не вызывалась ф-ция Randomize, и по этому значения эти не случайны, а всегда одинаковы! Буферы "X" это просто константа, с которыми будут ксорится числа.

Теперь уже вызывается Randomize (один раз), после этого выделяется ещё 2 буфера (пусть "P" и "Q", по 8*4 байт=256 бит для RSA512), в них будут числа P и Q. Далее идет заполнение этих буферов, вот тело цикла для числа P:
CALL    <JMP.&rtl60.System::RandInt> ; в eax псевдослучайное число
XOR     EAX, DWORD PTR [EDI]         ; в edi буфер "Xp"
MOV     DWORD PTR [EDX], EAX         ; в edx буфер "P"
После цикла, чтобы число было простым, видимо делается такая махинация:
OR      [EDX+28],80000000h ; последний дворд P
OR      [EDX],1            ; первый дворд P
Дальше P*Q и modulus готов. Всё, выдираем\пишим, оптимизируем алго и ждём заветные P,Q

man0war Как там в твоей (не тестовой) проге х.з.


Дата: Ноя 9, 2004 09:43:32

Bogrus
Спасибо . В принципе я это давно понял , просто
думал над тем как уменьшить диапазон для перебора.


Дата: Ноя 9, 2004 09:52:12

Вообще я время даже приблизительно не прикидывал, думай, какой там возможен RandSeed в твоей проге...
И потом, ведь ещё можно диапазон RandSeed разбить на части, пропорциональные количеству машин, которые ты можешь задействовать.


Дата: Ноя 9, 2004 11:53:25
Правка

bogrus
„ trsa я компилил в 6-м дельфи“
Я привёл листинг Randomize и RandomInt (есть ещё Random, определённый как function Random():Extended; ), их генерирует Borland Delphi Compiler 15.0 (Delphi v7.0.4.453). Так что придётся посмотреть, что в предыдущих версиях (<6.0) и точно определить версию, которой собран целевое приложение.


Дата: Ноя 9, 2004 12:42:33

„генерирует Borland Delphi Compiler 15.0“
что-то мне подсказывает что исходники VCL, в особенности модуль system, где, скорее всего, находится функция random не меняются уже очень долго между верисями. IMO надо не версию компилятора определить а просто версию делфи (5,6,7) и посмотреть в сырцы соответствующей VCL.


Дата: Ноя 9, 2004 12:50:57

Компилятор не Delphi ,а Builder 5 ,
но это в данном случае безразлично.


Дата: Ноя 9, 2004 21:34:56

Bogrus
В примере , который идёт с компонентом ,
всё просто , в нём заполнение массивов SeedP и SeedQ идёт
с помощью функции Random($FFFFFFFF) . Ничего подобного
в программе , которую я рассматриваю , не используется.
Разработчик скорей всего воспользовался советом создателей
компонента и применил более "правильный" PRNG ,
что-нибудь типа BBS (Blum-Blum-Shub). Это только моё предположение, так как это не выяснить - никакого кода нет.Ключи сгенерированы отдельной программой.
Программа , которая исследовалась , лежит на
www.ptgui.com
Всё , наверное надо тему закрывать.


Дата: Ноя 10, 2004 01:08:57

пропатчи паблик кей - по-моему это наиболее приемлимое решение исходя из вышеизложенного.


Дата: Ноя 10, 2004 08:09:12

„пропатчи паблик кей - по-моему это наиболее приемлимое решение исходя из вышеизложенного.“
Спасибо ,infern0 . Это я давно понял , но не хотел
применять "грязный" битхак :) Всё хотелось сделать
красивей , поэтому и начал эту тему.

<< . 1 . 2 . 3 . 4 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.076