Советы о методе шифрования, который я должен использовать - PullRequest
3 голосов
/ 12 июля 2011

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

Краткое описание работы системы:

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

Я использую библиотеку crypto ++ для своего шифрования, и у меня естьЧитайте, что он может выполнять большинство типов алгоритмов шифрования.Однако я заметил, что большинство алгоритмов используют открытый и закрытый ключи для шифрования / дешифрования данных.Это означало бы, что мне придется хранить закрытый ключ с данными, которые кажутся мне нелогичными.Есть ли способы, которыми я могу выполнить шифрование без сохранения закрытого ключа с данными?

Ответы [ 5 ]

4 голосов
/ 12 июля 2011

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

  1. Храните ключ на сервере. Только если пользователь программы входит на сервер, он возвращает ключ в свое локальное хранилище.
  2. Используйте функцию получения ключа, например PBKDF2, для получения ключа из пароля.

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

3 голосов
/ 12 июля 2011

Краткий ответ: не беспокойтесь.

Длинный ответ: если вы храните файл .DAT вместе с приложением, вам также придется хранить ключ где-нибудь. Скорее всего, в том же месте (может быть, скрыто в коде). Поэтому, если злонамеренный пользователь хочет взломать ваше шифрование, все, что ему нужно сделать, - это найти этот ключ, и все. Неважно, какой метод или алгоритм вы используете. Даже если вы не сохраните ключ дешифрования вместе с приложением, оно в конечном итоге попадет в него, и злоумышленник сможет перехватить его с помощью отладчика во время выполнения (если только вы не используете выделенный защищенный чип памяти и не работаете на устройстве, которое имеет необходимую защиту)

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

2 голосов
/ 12 июля 2011

Обычный способ решения вашей проблемы:

  • Используйте алгоритм симметричного ключа для шифрования ваших данных, общий алгоритм - AES, twofish.Скорее всего, вы хотите использовать цепочку CBC.
  • используйте дайджест (sha-256) и подпишите его асимметричным алгоритмом (RSA), используя свой закрытый ключ: таким образом, вы встраиваете подпись и открытый ключпроверить это, убедившись, что если ваш код шифрования будет взломан, другие люди не смогут подделать ваши личные данные.Конечно, если вам необходимо обновить эти данные, вы не сможете использовать этот механизм закрытого ключа.

В любом случае вам следует проверить

  • симметричный шифр противасимметричные
  • сигнатура против шифрования
  • режим работы, означающий, как вы соединяете один блок с другим для блочных шифров, таких как AES, 3DES (CBC против ECB)

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

1 голос
/ 12 июля 2011

Это называется асимметричным шифрованием при использовании пар открытого и закрытого ключей.

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

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

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

1 голос
/ 12 июля 2011

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

Другими словами,Вся информация, необходимая для расшифровки зашифрованных данных, уже находится в руках злоумышленника.У вас есть проблема «потребитель = злоумышленник» во всех проектах, связанных с DRM, и поэтому люди могут легко дешифровать DVD, BluRays, M4As, зашифрованные электронные книги и т. Д. И т. Д. И т. Д.

...