API键和秘密键如何工作?如果我必须将我的API和秘密密钥传递给另一个应用程序,这是否安全?

StackOverflow https://stackoverflow.com/questions/2674445

我刚刚开始考虑API键和秘密键的工作方式。就在2天前,我注册了Amazon S3并安装了 S3FOX插件. 。他们要求我提供我的访问密钥和秘密访问密钥,这两者都要求我登录以访问。

因此,我想知道,如果他们问我要我的秘密钥匙,他们一定在一个地方存储它吗?这基本上与要求我提供信用卡号或密码并将其存储在自己的数据库中并不是一样?

秘密键和API键应该如何工作?他们需要如何秘密?这些应用程序使用秘密键以某种方式存储吗?

有帮助吗?

解决方案

基本上阐述了概述的内容 这里.

它的工作方式如下:假设我们有一个功能,该函数从零到九的数字添加了三个,如果结果大于十,则减去十个。因此,f(2)= 5,f(8)= 1等。现在,我们可以通过添加七个而不是三个来制作另一个函数,称其为f'。 f'(5)= 2,f'(1)= 8,等。

这是双向函数及其倒数的一个示例。从理论上讲,任何将一件事映射到另一件事的数学函数都可以逆转。但是,在实践中,您可以制作一个功能,使其输入非常好,以至于难以反转。

获取输入并应用单向功能称为“哈希”输入,并且他们系统上的亚马逊商店是您秘密密钥的“哈希”。 SHA1是这种“单向”功能的一个例子,它也对攻击进行了硬化。

HMAC功能 建立在已建立的哈希函数上,以使用已知键来验证文本字符串。它是这样的工作:

  • 您获取请求和秘密键的文字,并应用HMAC功能。
  • 您将该身份验证标头添加到您的请求中,然后将其发送到亚马逊。
  • 亚马逊查找了他们的秘密键的副本,以及您刚发送的文本并应用了HMAC函数。
  • 如果结果匹配,他们知道您有相同的秘密键。

和PKI之间的区别在于,此方法是 安息, ,允许系统与亚马逊服务器之间的交换数量最少。

这基本上与要求我提供信用卡号或密码并将其存储在自己的数据库中并不是一样?

是的,尽管某人对S3造成的损害似乎仅限于消耗您的帐户。

他们需要如何秘密?这些应用程序使用秘密键以某种方式存储吗?

在某个时候,您将不得不加载秘密密钥,并且使用大多数基于UNIX的系统,如果攻击者可以获得root访问权限,则可以获得键。如果加密密钥,则必须有代码进行解密,在某些时候,解密代码必须是纯文本,以便可以执行。除了您拥有计算机之外,DRM也遇到了同样的问题。

在许多情况下,我只是将秘密键放入具有有限权限的文件中,并采取通常的预防措施以防止我的系统扎根。有一些技巧可以使其与多源系统正常工作,例如避免临时文件等。

其他提示

公共密钥密码学 用于防御非常具体的攻击,其中一些很常见。简而言之,这是复杂的数学,它允许人们验证个人在个人和私钥对中同时只知道公共密钥。这与信用卡或静态密码大不相同。例如,如果您正在使用OpenSSH服务器进行身份验证,则该服务器 不需要私钥.

理想情况下,如果亚马逊的API数据库在哪里被妥协,攻击者将拥有公共钥匙列表,并且将无法使用此信息访问用户的API。但是,理想的系统并不总是付诸实践,我不确定亚马逊是否在保护此攻击矢量,但应该这样做。

在公共密钥中,身份验证在统计学上不受蛮力的影响。密码通常是字典单词,可以快速断裂。但是,一个私钥是一个不容易猜测的巨大数字。如果攻击者拥有公共密钥,那么他们可以在超级计算机上进行许多“离线”猜测,但即使那样,也需要花费大量时间和金钱才能打破钥匙。

AWS设计了自己的自定义身份验证算法。 V4于2014年发布。此处概述了详细信息: 认证请求(AWS签名版本4) . 。一个要点是,该请求不是与秘密本身签名,而是使用秘密生成的签名密钥。它还使用HMAC-SHA256进行签名。

Signature Generation

使用非对称键将更安全,因为AWS只能存储一个由用户和AWS存储的公共密钥而不是秘密。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top