Определить «безопасный».
DES более безопасен, чем обычный текст, но из-за 56-битного размера ключа он обычно больше не используется. Если вы защищаете данные от своей семьи или случайного упрощения, это может быть хорошо.
Если в наши дни люди используют DES, то это Triple DES, который по сути запускает DES три раза для каждого блока данных.
В наши дни алгоритм симметричного шифрования (которым является DES) является AES, который похож на духовного преемника DES.
AES с достаточно большим ключом 256 (на самом деле сегодня 512 или выше) криптографически безопасен для большинства приложений.
Несколько предостережений AES:
- Это по-прежнему ограничено экспортным контролем США
- АНБ может расшифровать вашу информацию, если они хотят (да
это жесть мышление)
Что касается вашей ошибки, сначала попробуйте переключиться на AES и посмотрите, не возникла ли у вас проблема.
Относительно AES:
Важен выбор ключа, а также защита ключа.
Выбор ключа
Если вы хотите «защитить паролем» свои данные, используя AES, то вам необходимо преобразовать свой пароль в ключ AES. Это распространенная ошибка для многих разработчиков компьютерной безопасности. Adobe по существу уничтожил всю защиту AES в своих PDF-файлах, используя в качестве ключа хеш-пароль MD5 пользователя. Излишне говорить, что вы умнее всех инженеров Adobe вместе взятых, поэтому вы не совершите эту ошибку.
Правильный способ генерации ключа из пароля - это использование RFC2898 или PBKD2 (функция получения ключа на основе пароля). В .NET удобно есть метод, который делает это: Rfc2898DeriveBytes (). По сути, это криптографически надежно хэширует ваш пароль, с предоставленной солью (подробнее об этом немного), несколько раз, предоставленной пользователем. Это обеспечивает несколько уровней защиты от атак с использованием грубой силы против вашего пароля (при условии, что ваш ключ достаточно велик, чтобы предотвратить атаки с использованием грубой силы!)
Каждая итерация PBKD2 занимает минимальное количество времени для запуска. Чем больше у вас интерактивности (я думаю, что рекомендуемое число> 1000), тем больше компьютерного времени требуется. Это время все еще меньше, чем человек мог бы распознать, но в компьютерное время это похоже на столетие. Таким образом, не зная точного количества итераций, это делает очень длительный процесс взлома паролем.
Соль. Вместо прямого хеширования вашего пароля, соль добавляет дополнительную информацию к вашему входному паролю, создавая уникальный хеш. Это предотвращает атаки радужного стола, если вы сохраняете свою ценность соли защищенной.
Хранение ключей
Другая сторона криптографии - хранилище ключей. Если вы защищаете свои данные паролем, вам необходимо надежно сохранить пароль. Самый простой способ - использовать встроенную безопасность ОС. В Windows это использует DPAPI в реестре и Unix, filepermissions.
AES в качестве ключа сеанса
Если вы ищете безопасную передачу данных по небезопасному каналу (или даже добавляете свою собственную дополнительную защиту поверх SSL), вы можете рассмотреть возможность использования AES в качестве шифрования сеанса.
По сути, это система шифрования с двумя схемами, которая работает следующим образом:
Вы генерируете пару открытый / закрытый ключ, используя ваше любимое ассиметричное шифрование (RSA!) Для вашего сервера.
Каждому доверенному клиенту предоставляется открытый ключ.
Во время сеанса клиент генерирует новый случайный ключ AES 256 бит или выше.
Этот ключ сеанса AES зашифрован с использованием открытого ключа RSA.
Эти зашифрованные данные, содержащие сеансовый ключ AES, отправляются на сервер.
Сервер расшифровывает данные, используя свой закрытый ключ RSA, и сохраняет ключ сеанса AES.
В течение оставшейся части сеанса все данные шифруются с помощью ключа AES сеанса.
В конце сеанса ключ AES сбрасывается.
Хотя это требует большего количества рукопожатий, это дает вам дополнительную защиту от ограничения воздействия.Поскольку ключ AES хорош только для сеанса, если он обнаружен, ущерб ограничивается только одним сеансом.