Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中确保密钥的安全_Python_Security_Oauth_Obfuscation - Fatal编程技术网

在Python中确保密钥的安全

在Python中确保密钥的安全,python,security,oauth,obfuscation,Python,Security,Oauth,Obfuscation,我知道这些问题之前已经被分别问过好几次了,我发现的大多数答案都是“Python不容易混淆,因为这是语言的本质。如果确实需要混淆,请使用另一种工具”和“在某个时候需要权衡”(请参阅和) 然而,我刚刚制作了一个小型Python应用程序,它使用Twitter的API(因此需要OAuth)。OAuth需要一个消费者秘密,这是要远离用户的。应用程序需要这些信息,但用户不应该能够轻松访问这些信息。如果这些信息无法得到保护(我使用模糊处理和保护作为同义词,因为我不知道其他方法),首先为Python提供OAut

我知道这些问题之前已经被分别问过好几次了,我发现的大多数答案都是“Python不容易混淆,因为这是语言的本质。如果确实需要混淆,请使用另一种工具”和“在某个时候需要权衡”(请参阅和)

然而,我刚刚制作了一个小型Python应用程序,它使用Twitter的API(因此需要OAuth)。OAuth需要一个消费者秘密,这是要远离用户的。应用程序需要这些信息,但用户不应该能够轻松访问这些信息。如果这些信息无法得到保护(我使用模糊处理和保护作为同义词,因为我不知道其他方法),首先为Python提供OAuth API有什么意义?

问题是:

  • 是否可以在应用程序中硬编码秘密,然后 以有效的方式混淆它?
  • 如果没有,在Python中使用OAuth的最佳方式是什么?我曾想过将加密的消费者机密与应用程序一起“发送”,并使用硬编码密钥来恢复,但问题仍然是一样的(如何保护密钥);在服务器中保存使用者机密,并让应用程序在启动时检索该机密(如果信息未加密发送,恶意攻击者仅使用Wireshark从网络流量中获取消费者机密比反编译字节码更容易,另外,我如何确保我将该机密发送到我的应用程序而不是恶意攻击者?我知道的任何形式的身份验证都需要se。)应用程序端的可信信息,问题仍然相同);两者的混合(让服务器发送加密密钥,问题与以前相同)。基本问题是相同的:如果关键信息无法隐藏,你怎么能拥有秘密

我还看到一些评论说,应该为这些关键部件使用C/C++扩展,但我对此一无所知,因此如果这是答案,我将非常感谢您提供一些额外信息。

您可以编写自己的简单符号密码功能,并进行大量数据操作,以使其更难反转。

如果您希望服务器(或笔记本电脑)上的eploy您拥有,您可以将机密存储在env var或文件中。如果您想部署到用户,建议您或您的用户注册API密钥、生成ssl密钥或类似密钥。

不清楚您为什么需要随脚本提供OAuth密钥。这意味着允许任何人访问您的Twitter帐户,无论该密钥本身是否有效在应用程序内部被混淆


更典型的情况是,您开发了一些Twitter客户端,任何想在本地运行它的人都必须输入自己的OAuth令牌才能运行它。您只需不硬编码令牌,而要求任何用户提供令牌。

在这个问题中,谁是“用户”,您的客户?(您建议“发货”用户只是我自己,这不是一个严肃的项目。我想知道实际发货的人是如何发货的(例如,在他们的网站上提供)使用OAuth的Python应用程序可以做到这一点。这与讨论的问题有关吗?是否需要开发更多?好吧,实现您自己的加密函数是非常不可取的,问题仍然存在:我在哪里安全地存储对称密钥?编写您自己的非常简单但硬可逆的加密函数大约需要1-3个小时在你的幻想中)。此外,在不知道加密算法的情况下,密钥不会泄露数据。如果我正确理解Twitter的OAuth,那么消费者机密和消费者密钥将在API中标识我的客户机。客户端的所有实例都将共享它们,每个用户的不同之处在于访问令牌(请参见中的示例)。我不会让他们访问我的帐户,但他们可以在Twitter API的眼中模仿我的客户。是的,确切地说,任何你将OAuth令牌直接或间接嵌入到应用程序中的人都可以模仿你,就Twitter而言。因此,在国际海事组织,还有一个更大的问题;这真的是你想做的吗?(提示:不,可能不会。)好的,客户端需要做的第一件事是向Twitter进行身份验证,以便使用API(请参阅),并且需要用户密钥和密码。据我所知,没有办法解决这个问题。你会为一个基于Python的Twitter客户端提出什么样的模式,它不会泄露秘密?这是一个这样的应用程序通常会做的例子:在这种情况下,我强烈推荐一个服务器与应用程序一起使用,其中服务器存储秘密,并且是OAuth流的一部分。我决不会以任何形式在公开代码中嵌入秘密,因为没有办法完全混淆它们。