我说的是API、等的系统私钥.(不是用户S私钥)
最好的存放地点在哪里?(Java类、属性、隐藏文件、首选项)(跨平台Win、Mac和Linux)
我需要加密这些密钥吗?在我们开始使用第三方服务之前,我可能需要解密。
发布于 2018-01-12 21:43:59
让我们从这个开始:
1:如果你有通信机器去机器或应用程序,你可以使用加密结合HMAC和初始化向量( iv ),这样你就可以使你的密钥免受MITM和类似的攻击。
他说:但如果你需要用非加密密钥对服务器端进行身份验证,你就无法保护它们。
3:保护您的应用程序不受reverse ->的影响--您不能道歉,但我可以给您一个技术列表,以使您的应用程序非常难以逆转:
·反API喷雾器
·反断点
·抗CrackTools
·抗DumperPro
·密码加密
·“守则”取代
调试器护卫
·动态加密
·GarbageCode
·int DebugShield
·内存保护
·突变式发动机
·多态层
·安全API包装器
安全入境点
·压缩
·变型
·螺纹发动机监视器
你可以搜索谷歌,以获得更多关于这项技术的细节。
如果您使用上面的方法来保护您的应用程序不发生反转,最好将它们放在类中的私有字段中。
在Linux中,其他明智的方法是将它们放入文件中,如您所知,linux或UNIX中的每一件事情都是以600为权限的文件。
在窗口中,把它们放在注册表中。
->你可以使用隐写术(水印)技术
发布于 2018-01-07 02:53:11
您已经说过这是针对桌面应用程序的,因此请注意,无论您做什么,坚定的攻击者/反向工程师将能够恢复这些密钥。如果混淆它们很重要(为了减少这一点),您可以考虑对它们进行加密,然后在运行时解密。当然,你需要把钥匙放在某个地方,这样你就有了一些鸡蛋问题。
如果对这些键有任何实际敏感的东西(例如,不仅仅是),您可能希望为用户生成每个用户的密钥,并将其存储在本地。(如果需要与服务器端组件共享密钥,则可以通过TLS连接上载密钥。)
发布于 2018-01-09 15:21:14
正如David所说,您不能使用任何不希望客户端在客户端设备上访问的数据。无论您做什么,如果您的应用程序可以提取它,用户可以。
在需要仅限制对已批准用户的访问的情况下,需要对用户进行身份验证。要么您需要为每个已批准的用户提供一个API密钥,要么您需要在客户机和(第三方) API之间放置一个验证用户身份的中间件服务。
https://security.stackexchange.com/questions/176299
复制相似问题