security - API key 和 key 如何工作?如果我必须将 API 和 key 传递给另一个应用程序,这是否安全?

标签 security amazon-s3 passwords api-key secret-key

我刚刚开始思考 api key 和 secret key 如何工作。就在 2 天前,我注册了 Amazon S3 并安装了 S3Fox Plugin 。他们要求我提供访问 key 和 secret 访问 key ,这两者都需要我登录才能访问。

所以我想知道,如果他们向我索要我的 key ,他们一定将其存储在某个地方,对吗?这与询问我的信用卡号码或密码并将其存储在他们自己的数据库中基本上是一样的吗?

secret key 和 API key 应该如何工作?他们需要保密到什么程度?这些使用 key 的应用程序是否以某种方式存储它?

最佳答案

基本上详细阐述了概述的内容 here .

它的工作原理如下:假设我们有一个函数,它接受从零到九的数字,加三,如果结果大于十,则减十。所以 f(2) = 5、f(8) = 1 等等。 现在,我们可以创建另一个函数,将其称为 f',通过添加 7 而不是 3 来向后执行。 f'(5) = 2、f'(1) = 8 等

这是双向函数及其反函数的示例。理论上,任何将一件事映射到另一件事的数学函数都可以颠倒。但在实践中,您可以创建一个函数来很好地打乱其输入,以至于很难逆转。

接受输入并应用单向函数称为“散列”输入,亚马逊在其系统上存储的是您的 key 的“散列”。 SHA1 是这种“单向”函数的一个例子,它也针对攻击进行了强化。

HMAC function建立在已建立的哈希函数的基础上,使用已知 key 来验证文本字符串。它的工作原理如下:

  • 您获取请求文本和 key 并应用 HMAC 函数。
  • 您将该身份验证 header 添加到您的请求中并将其发送给 Amazon。
  • 亚马逊会查找他们的 key 副本以及您刚刚发送的文本并应用 HMAC 函数。
  • 如果结果匹配,他们就知道您拥有相同的 key 。

这个和PKI的区别在于这个方法是RESTful ,允许您的系统和亚马逊服务器之间进行最少数量的交换。

Isn't that basically the same thing as asking me for my credit card numbers or password and storing that in their own database?

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

How secret do they need to be? Are these applications that use the secret keys storing it somehow?

在某些时候,您必须加载 key ,对于大多数基于 Unix 的系统,如果攻击者可以获得 root 访问权限,他们就可以获得 key 。如果您加密 key ,则必须有代码来解密它,并且在某些时候解密代码必须是纯文本,以便可以执行。这与 DRM 存在的问题相同,只不过您拥有计算机。

在许多情况下,我只是将 key 放在权限有限的文件中,并采取通常的预防措施来防止我的系统被 root。有一些技巧可以使其在多用户系统中正常工作,例如避免临时文件等。

关于security - API key 和 key 如何工作?如果我必须将 API 和 key 传递给另一个应用程序,这是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2674445/

相关文章:

c# - 如何在 C# 中创建 PKCS12 .p12 文件?

asp.net-mvc - 为什么 WebSecurity.Logout *立即*将 IPrincipal.User 更新为空用户

amazon-web-services - 用于复制到 Redshift 的 Java sdk

google-chrome - Google Chrome 扩展程序中密码的存储

php - 基本 mysql sha1 密码有效性检查

javascript - AngularJS - 如何使控制台或恶意攻击无法访问 token ?

java - 生成数字证书:InvalidKeyException: Illegal key size

javascript - 使用预签名 URL 从 PUT 到 S3 的 400 错误请求

amazon-web-services - 如何保护传输中的 AWS S3 上传/下载数据?

php - 如何比较 Symfony 3 中的密码(Bcrypt 哈希)?