RSA: как создать открытый и закрытый ключи RSA на основе ключевой фразы (.net) - PullRequest
2 голосов
/ 24 марта 2011

Я работаю в среде .net (все версии) и использую vb.net.Я хочу создать открытый и закрытый ключи RSA на основе ключевой фразы.

Мое понимание алгоритма RSA ограничивается только использованием класса, предоставленного .net, т.е. System.Security.Cryptography.RSACryptoServiceProvider Class.Я знаю, как генерировать случайные открытые / закрытые ключи RSA и выполнять шифрование / дешифрование.

Но этот класс .net не позволяет нам создавать открытые / закрытые ключи RSA на основе ключевой фразы.

Хотя я использую vb.net, любой, у кого есть решения на c #, c, c ++ или любом .net-совместимом языке, может внести свой вклад, так как я могу получить доступ к решению с помощью ссылки p / invoke или dll.

Заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 24 марта 2011

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

3 голосов
/ 24 марта 2011

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

Предположим, что на клавиатуре примерно 94 клавиши, которые генерируют символы, и далее предположим, что пользователи действительно нажмут на них в случайном порядке . (Не очень хорошее предположение, но терпите меня.)

Это log(94)/log(2) == 6.55 бит энтропии на символ. Чтобы получить 2048 битов энтропии, вам нужно запросить фразу-пароль длиной 313 символов: 2048 / 6.55... == 312.45.

Как вы думаете, что ваши пользователи будут чувствовать, когда вас попросят ввести 300+ символьную фразу? И помните, это при оптимистическом предположении, что пользователи будут нажимать каждый из 94 символов случайным образом; это кажется невероятным для меня. Я думаю, что 40 с лишним символов станут пределом реального творчества людей: 26 букв, 10 цифр и знаки пунктуации, которые не требуют сдвига. Это будет примерно 384 символа в вашей парольной фразе.

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

2 голосов
/ 24 марта 2011

Вам не понадобится RSA, если вам не нужно шифрование с открытым ключом.

Используйте симметричное шифрование с функцией получения ключа на основе пароля (например, AES с PBKDF2 ).Это будет быстрее и безопаснее.

2 голосов
/ 24 марта 2011

Насколько я знаю, ключи Rsa никогда не основаны на парольной фразе. Вы можете защитить ключи rsa только парольной фразой.

...