API密钥和密钥如何工作?

Lan*_*ard 134 security passwords amazon-s3 api-key secret-key

我刚刚开始思考api密钥和密钥是如何工作的.就在2天前,我注册了Amazon S3并安装了S3Fox插件.他们问我的访问密钥和秘密访问密钥,这两个密钥都要求我登录访问.

所以我想知道,如果他们问我的密钥,他们一定要把它存放在某个地方吗?这与询问我的信用卡号码或密码并将其存储在自己的数据库中基本相同吗?

秘密密钥和API密钥如何工作?他们需要有多秘密?这些应用程序是否使用秘密密钥以某种方式存储它?

感谢您的见解.

小智 90

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

以下是它的工作原理:假设我们有一个函数,它从0到9加一个数,加三,如果结果大于十,则减去十.所以f(2)= 5,f(8)= 1,等等.现在,我们可以通过添加7而不是3来创建另一个函数,称之为f',即向后.f'(5)= 2,f'(1)= 8等

这是一个双向函数及其逆的例子.从理论上讲,任何将一件事物映射到另一件事物的数学函数都可以颠倒过来.但是,在实践中,你可以创建一个能够很好地对其输入进行加扰的函数,以至于它非常难以反转.

接受输入并应用单向函数称为"哈希"输入,亚马逊在其系统上存储的是您的密钥的"哈希".SHA1就是这种"单向"功能的一个例子,它也可以抵御攻击.

HMAC功能基础上建立的散列函数使用已知的密钥进行身份验证的文本字符串.它的工作原理如下:

  • 您获取请求的文本和密钥并应用HMAC功能.
  • 您将该身份验证标头添加到您的请求并将其发送到亚马逊.
  • 亚马逊查找他们的密钥副本,以及您刚刚发送的文本并应用HMAC功能.
  • 如果结果匹配,则表示您具有相同的密钥.

这与PKI的区别在于此方法是RESTful,允许您的系统与Amazon服务器之间进行最少量的交换.

这与询问我的信用卡号码或密码并将其存储在自己的数据库中基本相同吗?

是的,尽管有人可以对S3造成的伤害似乎仅限于耗尽您的帐户.

他们需要有多秘密?这些应用程序是否使用秘密密钥以某种方式存储它?

在某些时候,你将不得不加载密钥,而对于大多数基于Unix的系统,如果攻击者能够获得root访问权限,他们就可以获得密钥.如果加密密钥,则必须使用代码对其进行解密,并且在某些时候解密代码必须是纯文本,以便可以执行.这与DRM具有相同的问题,除了您拥有计算机.

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

  • 首先你说"亚马逊在他们的系统上存储的是你的秘密密钥的"哈希",然后"亚马逊查找他们的密钥副本".这些似乎相互矛盾.我认为第一个陈述是错误的. (21认同)
  • "接受输入并应用单向函数称为"散列"输入,亚马逊在其系统中存储的是您的密钥的"哈希"" - 如果亚马逊存储了您的密钥的HASH,它是如何进行的亚马逊可能会发送给他们的HASH文本? (14认同)
  • "从理论上讲,任何将一件事物映射到另一件物品的数学函数都可以颠倒过来" - 这不是真的,哈希函数就是一个例子.这很容易展示.假设我们有一个函数可以根据值的总和(a = 1,b = 2,c = 3等)将单词转换为数字.例如,"SO"将是18 + 14 = 32.所以我们将SO改为32但是如果我向某人透露这个功能,给他32号,他就无法知道我们的基本单词是"SO"还是"ZF"(26 + 6)或其他几十种可能性之一 (10认同)
  • 此网址提供有关Amazon S3 Auth实施的更多详细信息 - http://docs.aws.amazon.com/AmazonS3/latest/dev/S3_Authentication2.html (3认同)

roo*_*ook 7

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

理想情况下,如果亚马逊的API数据库受到攻击,攻击者将拥有公钥列表,并且无法使用此信息访问用户的API.然而,理想的系统并不总是付诸实践,我不确定亚马逊是否正在防范这种攻击媒介,但它们应该是.

在公钥中,身份验证在统计上不受暴力影响.密码通常是字典单词,可以快速打破相对性.然而,私钥是一个不容易猜测的庞大数字.如果攻击者拥有公钥,那么他们可以在超级计算机上执行许多"离线"猜测,但即使这样,也需要花费大量的时间和金钱来破解密钥.

  • _不需要私钥_链接现在已经破坏了. (2认同)