我刚刚开始思考api密钥和密钥是如何工作的。就在2天前,我注册了Amazon S3并安装了S3Fox Plugin。他们问我的访问密钥和秘密访问密钥,这两个密钥都要求我登录访问。
所以我想知道,如果他们问我的密钥,他们一定要把它存放在某个地方吗?这与询问我的信用卡号码或密码并将其存储在自己的数据库中基本相同吗?
秘密密钥和API密钥如何工作?他们需要有多秘密?这些应用程序是否使用秘密密钥以某种方式存储它?
感谢您的见解。
基本上详细说明了here的概述。
以下是它的工作原理:假设我们有一个函数,它从0到9加一个数,加三,如果结果大于十,则减去十。所以f(2)= 5,f(8)= 1,等等。现在,我们可以通过添加7而不是3来创建另一个函数,称之为f',即向后。 f'(5)= 2,f'(1)= 8等
这是一个双向函数及其逆的例子。从理论上讲,任何将一件事物映射到另一件事物的数学函数都可以颠倒过来。但是,在实践中,你可以创建一个能够很好地对其输入进行加扰的函数,以至于它非常难以反转。
接受输入并应用单向函数称为“哈希”输入,亚马逊在其系统上存储的是您的密钥的“哈希”。 SHA1就是这种“单向”功能的一个例子,它也可以抵御攻击。
HMAC function以已建立的哈希函数为基础,使用已知密钥来验证文本字符串。它的工作原理如下:
这个和PKI的区别在于这个方法是RESTful,允许你的系统和亚马逊的服务器之间进行最少量的交换。
这与询问我的信用卡号码或密码并将其存储在自己的数据库中基本相同吗?
是的,尽管有人可以对S3造成的伤害似乎仅限于耗尽您的帐户。
他们需要有多秘密?这些应用程序是否使用秘密密钥以某种方式存储它?
在某些时候,您将不得不加载密钥,并且对于大多数基于Unix的系统,如果攻击者可以获得root访问权限,他们就可以获得密钥。如果加密密钥,则必须使用代码对其进行解密,并且在某些时候解密代码必须是纯文本,以便可以执行。这与DRM具有相同的问题,除了您拥有计算机。
在许多情况下,我只是将密钥放在权限有限的文件中,并采取通常的预防措施来防止我的系统被植根。有一些技巧可以使它与多用户系统一起正常工作,例如避免临时文件等。
Public Key Cryptography用于抵御非常具体的攻击,其中一些是常见的。简而言之,这是一个复杂的数学运算,它允许人们在只知道公钥时验证个人是否具有公钥和私钥对。这与信用卡或静态密码非常不同。例如,如果您使用OpenSSH服务器进行身份验证,那么服务器doesn't need the private key。
理想情况下,如果亚马逊的API数据库受到攻击,攻击者将拥有公钥列表,并且无法使用此信息访问用户的API。然而,理想的系统并不总是付诸实践,我不确定亚马逊是否正在防范这种攻击媒介,但它们应该是。
在公钥中,身份验证在统计上不受暴力影响。密码通常是字典单词,可以快速打破相对性。然而,私钥是一个不容易猜测的庞大数字。如果攻击者拥有公钥,那么他们可以在超级计算机上执行许多“离线”猜测,但即使这样,也需要花费大量的时间和金钱来破解密钥。
AWS设计了自己的自定义身份验证算法。 v4于2014年发布。详情如下:Authenticating Requests (AWS Signature Version 4) 。重点是请求不是使用秘密本身签名,而是使用秘密生成的签名密钥。它还使用HMAC-SHA256进行签名。
使用非对称密钥会更安全,因为AWS只会存储公钥而不是秘密,由用户和AWS存储。