Генерация ключа RSA с использованием 32 случайных байтов или больше на устройстве Android - PullRequest
0 голосов
/ 22 августа 2011

Я генерирую случайное число 32 байта (которое из микрочипа PIC24F).Когда устройства Android получают случайные 32 байта от PIC24F через вспомогательную USB-среду Android, я хотел бы создать ключ RSA.Можно ли создать открытый и закрытый ключ через случайные 32 байта?

32 байта относительно слаб, поскольку у меня были некоторые знания о том, как работает RSA.Большой RSA может потребовать много вычислительной мощности!Я использую это только на мобильном телефоне Android.

Если возможно, я бы хотел знать, каково ограничение вычислительной мощности для вычисления безопасного ключа RSA (я знаю, что разные производители телефонов с разными ресурсами могут отличаться).Какой самый большой ключ я могу генерировать с разумным ресурсом на мобильном телефоне Android (Если приложение, которое я запрограммировал, не будет зависать / не отвечать / закрываться)

Использованные инструменты: Nexus One (Android 2.3.4)

1 Ответ

1 голос
/ 23 августа 2011

Я очень мало знаю об Android API, но могу рассказать, как вы поступите с этим.Я сомневаюсь, что в API есть способ сделать это напрямую, но, возможно, этой информации вам будет достаточно, чтобы собрать воедино, что делать.

Чтобы сгенерировать ключ RSA, вам нужно сгенерировать два относительнобольшие простые числа.Я бы сгенерировал два числа с не менее чем 768 битами на штуку.

Техника генерации этих простых чисел заключается в использовании криптографически безопасного генератора псевдослучайных чисел (PRNG) для генерации 766-битных значений.По сути, генерируем 96 байтов и отбрасываем верхние 2 бита.Затем вы сдвигаете значение на бит вверх и устанавливаете младший и старший бит, чтобы у вас было нечетное число, которое> = 2**767 + 1 (и для этого требуется 768 бит для представления).Затем вы передаете сгенерированное число в вероятностный простой тест.Сначала вы проверяете делимость на первые несколько нечетных простых чисел, так что 3, 5, 7, 11, 13 и 17. Затем вы запускаете несколько итераций Миллера-Рабина.

Если число проходит эти тесты, выСкорее всего, есть простое число, если это не так, вы начинаете сначала и генерируете новый номер.

Создайте два таких простых числа, и у вас есть ключ RSA.

Для генерацииэти простые числа из 32 байтов случайных данных, вам нужно заполнить PRNG этими данными.

Лично я бы рекомендовал получить 128 байтов случайных данных.Вы заполняете PRNG первыми 64 байтами, а затем каждый раз, когда вызываете его, добавляете еще один байт ваших случайных данных в пул энтропии вашего PRNG.Любой криптографически безопасный PRNG будет иметь метод для этого.

...