Вопрос

Мое приложение использует класс Rijndaelmaned для шифрования данных. В рамках этого шифрования я использую объект SecureString, загруженный паролем, который получается преобразован в байтовый массив и загружен в клавишу RajindaelManaged объекта во время выполнения.

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

Так что в конечном итоге Кеситон сводится к:

Если мне нужно иметь некоторую известную строку или байтовый массив, чтобы загрузить в объект SecureString каждый раз, когда мои приложения работают, как мне это сделать? «Зашифрованные» данные в конечном итоге получают расшифровку другого приложения, поэтому даже если пользователь не указан пароль, мне все равно нужны данные, которые можно зашифровать, когда он идет от одного приложения к другому. Это означает, что я не могу иметь пароль по умолчанию быть случайным, потому что другое приложение не сможет правильно расшифровать его.

Одним из возможных решений, которые я думаю, это создать DLL, которая выплевывает только одну парольную фразу, затем я использую эту парольную фразу и запустите ее через пару различных функций хеширования / реорганизации во время выполнения, прежде чем я в конечном итоге подачу ее в объект SecureString. Будет ли это достаточно безопасно?

Изменить для ясности *: зашифрованные данные передаются через файлы между машинами. Подумайте об этом как файл ZIP, который всегда имеет пароль, предполагается, что по умолчанию предполагается, если пользователь ничего не вводится непосредственно.

Это было полезно?

Решение

Нет смысла симметрично шифрования с помощью строки, которая жестко закодирована в ваш исполняемый файл. Это только даст ложное чувство безопасности. Никакое количество хеширования исправляет эту схему.

Видеть Это часто задаваемые вопросы Pidgin в то же время в другом контексте.

Я неясен, почему вы думаете, что вам нужна связь между приложением, которая должна быть зашифрована. Если это сообщение локально для машины, я не вижу необходимость в шифровании, особенно шифрование, которое не является пользователем. Это схема DRM?

Редактировать: если он передается на другую машину, возможно, вы можете сложно открытый ключ, а затем у другого машины дешифруют с соответствующим закрытым ключом.

Другие советы

Позвольте мне сначала решить ваш последний вопрос.

«Будет ли это достаточно безопасно?»

Единственный, который может ответить, это вы. Никто не знает, что «достаточно безопасно» означает в контексте вашего приложения.

Вы строите приложение, чтобы сохранить дневник девочек-подростков? Конечно, это было бы «достаточно безопасно».

Создаваете ли вы приложение для шифрования информации или аутентификации для безопасных систем военнослужащих? Нет, даже близко.

Вы можете полагаться только на один тип безопасности, если вы намерены хранить пароль в исходном коде и, таким образом, исполняемым, и это Безопасность от безвестности.

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

Тем не менее, мне интересно о чем-то. Вы говорите: «Я должен что-то по умолчанию». Это оно? Вы пытаетесь сохранить значение по умолчанию для строки защищенного пароля в исходном коде? Как насчет «issnotapassword»?

Эрик ЛПППЕРТ Вы хотите соли с этим? (Оригинальный блог Post.)

Также прочитайте его пост Используйте правильный инструмент для работы где он заканчивается следующими советами:

0) Если вы, возможно, можете, просто не ходите туда. Шифрование чрезвычайно трудно получить правильно и часто не является неправильным решением в первую очередь. Используйте другие методы для решения ваших проблем безопасности.

1) Если проблема является ненадежным клиентом, то не создайте решение безопасности, которое требует доверительного клиента.

2) Если вы можете использовать детальные детали, то сделайте это.

3) Если вы не можете использовать запчасти или использовать криптосистему, а затем не используйте криптосистему, которую вы не понимаете.

4) Если вы должны использовать криптосистему, которую вы не полностью понимаете, то, по крайней мере, не используйте его для решения проблем, которые не предназначены для решения.

5) Если вы должны использовать криптосистему на лыжах через деревья, то, по крайней мере, не позволяйте предположительному враждебному клиенту выбрать сообщение, которое зашифровано. Выберите токен самостоятельно. Если токен должен включать информацию от клиента, то каким-то образом определяют его; Требуется только прямой текст ASCII, вставить случайные пробелы и так далее.

6) Если вы должны позволить клиенту выбрать токен, то не зашифруйте саму токен. Подпишите криптографически безопасную хэш токена. Злоубитель гораздо сложнее выбрать токен, который производит желаемое хэш.

7) Не используйте одну и ту же ключевую пару для шифрования исходящих сообщений, поскольку вы делаете для защиты входящих сообщений. Получите пару ключей для каждой логически другой операции, которую вы собираетесь выполнить.

8) Зашифровать связь в обоих направлениях.

9) Подумайте о том, чтобы иметь механизм отзыва, так что, как только вы знаете, что Ева атакует вас, вы можете хотя бы отозвать ее лицензию. (Или вы можете отозвать известную скомпрометированную лицензию и так далее.)

Эта статья о Обеспечение соединительных строк SQL Должно быть, так же, как применимо для хранения зашифрованных паролей, где вы позволяете ОС обрабатывать шифрование семян воспитания для вашей дешифровки.

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

Быстрый поиск Google дал мне это Статья по проекту кода, которая говорит об использовании хранилища сертификата Windows в .NET

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top