2015-05-12 3 views
5

Я знаю, что эти вопросы задавались несколько раз отдельно, и большинство ответов, которые я нашел, - «Python нелегко запутать, потому что это характер языка. Если вам действительно нужна обфускация, используйте другой инструмент »и« В какой-то момент вам нужен компромисс »(см. How do I protect Python code и How to keep the OAuth consumer secret safe, and how to react when it's compromised?).Сохраняйте секретный ключ в Python

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

вопрос (ы), то есть:

  • Можно ли Кодирую секрет в приложение, а затем запутать его эффективным образом?
  • Если нет, то какой был бы лучший способ использования OAuth в Python? Я подумал о «доставке» зашифрованного тайника клиента вместе с приложением и с помощью жестко закодированного ключа для его восстановления, но проблема остается прежней (как защитить ключ); имея секрет пользователя на сервере, и попросите приложение получить его при запуске (если информация будет отправлена ​​незашифрованной, было бы еще проще, если бы злоумышленник мог просто использовать Wireshark и получить секрет пользователя от сетевого трафика, чем декомпилировать байт-код , а также как я могу убедиться, что я отправляю этот секрет в свое приложение, а не злоумышленнику? Любая форма проверки подлинности, которую я знаю, потребует наличия секретной информации в стороне приложения, проблема остается прежней); смесь обоих (сервер посылает ключ шифрования, те же проблемы, что и раньше). Основная проблема одна и та же: как у вас есть что-то секретное, если невозможно скрыть важную информацию?

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

+1

Кто является «пользователем» в этом вопросе, ваш клиент? (Вы предложили «отгружать» приложение вместе с ключом, но я не уверен, если вы имели в виду это буквально.) –

+0

Пользователь только я, это не серьезный проект.Мне было интересно, как кто-то, кто действительно отправляет (например, делает его доступным на своем веб-сайте), использует приложение Python, используя OAuth. – user2891462

+0

Связано ли это с обсуждаемой проблемой [здесь] (http://blog.codinghorror.com/keeping-private-keys-private/)? – TigerhawkT3

ответ

-1

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

+0

Ухаживать за развитием? AFAIK, реализующий ваши собственные функции криптографии, крайне нецелесообразен, и проблема все равно останется: где я могу хранить симметричный ключ? – user2891462

+0

Кодирование вашей собственной очень простой, но жесткой функции реверсивного склепа занимает около 1-3 часов в зависимости от вашей фантазии). Рядом с ключом «Знать» не раскрывает данные, не зная алгоритм шифрования. Также вы можете использовать случайные ключи, созданные на лету. – psyskeptic

0

Если вы хотите развернуть на своих серверах (или ноутбуках) свои собственные, вы можете хранить секреты в env var или files. Если вы хотите развернуть для пользователя, предположим, что вы или ваш пользователь должны зарегистрировать ключ API, сгенерировать ключ ssl или аналогичный.

-1

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

Более типичным сценарием является то, что вы разрабатываете клиент Twitter, и каждый, кто хочет его запустить локально, должен будет ввести свои собственные OAuth token, прежде чем сможет его запустить. Вы просто не кодируете токен и требуете, чтобы пользователь подавал токен.

+0

Если я правильно понимаю OAuth Twitter, секрет потребителя и потребительский ключ идентифицируют моего клиента в API. Все экземпляры клиента будут делиться ими, и это токен доступа, который отличается для каждого пользователя (см. Примеры в https://dev.twitter.com/oauth/overview/single-user). Я бы не дал им доступ к моей учетной записи, но они могли бы олицетворять моего клиента в глазах API Twitter. – user2891462

+0

Да, точно, любой, кому вы даете токен OAuth, прямо или косвенно, встраивая его в приложение, может олицетворять вас в отношении Twitter. Итак, есть большая проблема ИМО; это действительно что-то, что вы хотите сделать? (Подсказка: нет, скорее всего, нет.) – deceze

+0

Ну, первое, что нужно сделать клиенту, это проверить подлинность в Twitter, чтобы использовать API (см. Https://github.com/bear/python-twitter#api), и для этого нужен ключ для потребителя и секрет. Насколько мне известно, нет никакого способа обойти это. Какую схему вы бы предложили для клиента на основе Python, который не утечка секрет? – user2891462

Смежные вопросы