Java - надежно хранить данные учетной записи пользователя, необходимые для использования в коде - PullRequest
2 голосов
/ 30 января 2011

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

Я не хочу использовать жесткий код в моих данных, например:

String username = "MyUsername";
String password = "MyPassword";

Я думал о шифровании деталей и сохранении их в файле, но, несмотря на это, любой, кто имеет некоторый опыт программирования, может легко восстановить информацию, посмотрев мой исходный код:

File f = load("mydetails.txt");
String[] = recoverDetails(f); //or something like that

Какой самый безопасный способ для меня хранить эту информацию?

Ответы [ 6 ]

3 голосов
/ 30 января 2011

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

2 голосов
/ 30 января 2011

Чтобы сохранить его в файле, но сделать файл доступным только для чтения и читаемым только сервисным процессом.

Если вы хотите отдать свое приложение, НЕТ СПОСОБА защитить его таким образом, чтобы невозможно было восстановить информацию для входа в систему. К сожалению.

Обычно это достигается путем обеспечения безопасности на стороне сервера и предоставления каждому пользователю вашего общедоступного API своих учетных данных. Это похоже на Google Maps, где вы должны получить специальный ключ и использовать его для использования API, поэтому Google может отслеживать, если вы используете API законным способом.

1 голос
/ 31 января 2011

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

Если код, выполняющий вызов веб-службы, находится на вашем сервере, то у вас есть та же проблемано, по крайней мере, контролировать окружающую среду.В какой-то момент сервер ДОЛЖЕН преобразовать зашифрованные учетные данные в пригодную для использования форму, чтобы сделать запрос веб-службы, поэтому вы можете зашифровать учетные данные веб-службы, но для доступа к ним должен быть доступен пароль или сертификат.Если только человек не слоняется вокруг, чтобы вводить парольную фразу для сертификата каждый раз, все, что он делает, это вкладывает учетные данные, но не защищает их.

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

0 голосов
/ 31 января 2011

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

Если вы не контролируете сервер (например, вы запускаете свое приложение на общем хосте), то:

  • Убедитесь, что вы используете учетную запись веб-службы (с MyUsername / MyPassword)имеет только минимальные разрешения, необходимые для целей этого приложения.
  • Используйте эту учетную запись только для одного развертывания (так что, если она когда-либо скомпрометирована, вы можете заблокировать эту учетную запись, не затрагивая другие приложения/installations).

А если вы действительно управляете сервером, то дополнительно :

  • Защищайте сервер, т.е. обычные текущие задачи сисадмина, такие каккак брандмауэр, установка последних исправлений, мониторинг журналов и т. д.
0 голосов
/ 30 января 2011

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

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

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

Приветствие.

0 голосов
/ 30 января 2011

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

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

  • Получите электронную подпись на смарт-карте
  • Зашифруйте пароль с помощью общедоступнойвведите и сохраните его

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

Как упомянул Пойнти, если не существует человеческого элемента, владеющего секретом (ПИН-код к секретному ключу и физическое владение смарт-картой), невозможно обеспечить 100% защиту информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...