Security 安全-在设备上实时生成API密钥

Security 安全-在设备上实时生成API密钥,security,api-key,Security,Api Key,首先,我不确定在哪个Stack Exchange站点上问这个问题,所以如果这是错误的,我道歉 我读过一篇文章,其中谈到了在移动应用程序上存储API密钥的最安全方法,我感兴趣的方法之一是使用一个在本地生成API密钥的函数,并在服务器上使用相同的函数,这样就没有人可以破解您的代码并获取API密钥字符串文本。这篇文章就是这么说的: 您的设备不需要存储任何类型的密钥,也不需要处理保护字符串文字的所有麻烦!这是远程密钥验证等服务使用的一种非常古老的技术 客户机知道一个返回键的函数()。 后端知道在客户端中

首先,我不确定在哪个Stack Exchange站点上问这个问题,所以如果这是错误的,我道歉

我读过一篇文章,其中谈到了在移动应用程序上存储API密钥的最安全方法,我感兴趣的方法之一是使用一个在本地生成API密钥的函数,并在服务器上使用相同的函数,这样就没有人可以破解您的代码并获取API密钥字符串文本。这篇文章就是这么说的:

您的设备不需要存储任何类型的密钥,也不需要处理保护字符串文字的所有麻烦!这是远程密钥验证等服务使用的一种非常古老的技术

客户机知道一个返回键的函数()。 后端知道在客户端中实现的函数() 客户端通过函数()生成一个密钥,并将其传递到服务器。 服务器对其进行验证,并继续执行请求。 你把这些点连起来了吗?与其使用本机函数返回字符串(易于识别),为什么不使用函数返回1到100之间的三个随机素数之和?还是一个函数,它以unixtime表示当前日期,并为每个不同的数字添加1?从设备中获取一些上下文信息,例如所使用的内存量,以提供更高程度的熵,怎么样

现在我想知道的是,怎样才能防止假想的黑客使用与你曾经提出的有效API密钥相同的算法?在我看来,函数应该是这样的(用javascript编写):

函数generateKey(){
var key=0

对于(var i=0;i没有什么可以阻止攻击者这样做。如果攻击者可以对你的应用程序进行反向工程,他们将发现你在其中存储的任何秘密

这篇文章的重点是如何让一个假想的逆向工程师尽可能难以找到你的秘密。这就是为什么在这篇文章中,作者从一个Java方法(易于反编译)转向本机方法(不容易反编译,但可以通过他们使用的长而看似随机的API键来识别)创建一个动态生成的密钥

function generateKey() {
    var key = 0
    for(var i=0; i<4; i++) {
        key *= Math.floor((Math.random() * 10) + 1);
    }
    return key // after encrypting it with unixtime as seed, for example
}