TIM*_*MEX 29 security cryptography api-key secret-key ios
我想存储一个秘密密钥("abc123"),我将在我的REST API请求的标头中使用.我的服务器将检查此密钥.如果它匹配"abc123",则允许发出请求.
我正在考虑一个简单的解决方案,如:
let secret = "abc123"
Run Code Online (Sandbox Code Playgroud)
但这会有任何挫折吗?
Rob*_*ier 26
听起来很疯狂,这可能是最好的解决方案.其他一切都比较复杂,但不太安全.您使用的任何花哨的混淆技术几乎都会像他们找到这个密钥一样快速地进行逆向工程.但是这种静态密钥解决方案虽然非常不安全,但几乎与其他解决方案一样安全,同时几乎没有额外的复杂性.我喜欢它.
它几乎会立即被打破,但所有其他解决方案也将如此.所以保持简单.
您真正想要做的一件事是使用HTTPS并固定您的证书.我会选择一个长长的随机密钥,而不是一个字.理想情况下,它应该是一个完全随机的字节字符串,存储为原始值(而不是字符),因此它在二进制文件中显然不那么突出.如果你想变得疯狂,请在发送之前对其应用SHA256(因此实际的密钥永远不会显示在你的二进制文件中).再次,这是微不足道的,但它很容易,并且不会浪费很多时间来开发.
超过一小时的任何努力都不太可能值得实现此功能.如果您对该主题有更多了解,请参阅针对iPhone应用程序的安全https加密到网页及其链接.
通过在应用程序中对字符串进行硬编码,攻击者可以解密您的二进制文件(通过dumpdecrypt之类的工具)并获得您的字符串而不会遇到太多麻烦(简单的hexdump将包含您应用中的任何字符串).
有一些解决方法.您可以在REST API上实现一个端点,该端点返回您的凭据,然后您可以在启动时调用.当然,这有其非常重要的安全问题,需要额外的HTTP调用.我通常不会这样做.
另一种选择是以某种方式混淆密钥.通过这样做,攻击者将无法在解密后立即识别您的密钥.cocoapods-keys是使用此方法的一个选项.
这里没有完美的解决方案 - 您可以做的最好的事情是让攻击者尽可能地抓住您的密钥.
(另外,请务必在发送请求时使用HTTPS,否则这是破坏密钥的另一种好方法.)
归档时间: |
|
查看次数: |
13235 次 |
最近记录: |