API密钥和密钥如何工作?
我刚刚开始考虑api密钥和密钥如何工作。 就在2天前,我注册了Amazon S3并安装了S3Fox Plugin 。 他们要求我的访问密钥和秘密访问密钥,这两个都需要我login访问。
所以我想知道,如果他们要求我提供我的密钥,他们必须把它存储在某个地方? 和问我信用卡号码或密码并将其存储在自己的数据库中基本上不是一回事吗?
秘密密钥和api密钥应该如何工作? 他们需要如何保密? 这些应用程序使用秘密密钥以某种方式存储它吗?
感谢您的洞察力。
基本上阐述了这里概述的内容。
下面是它的工作原理:假设我们有一个从零到九的数字,增加三个,如果结果大于十,则减去十个。 所以f(2)= 5,f(8)= 1等等。现在我们可以做另外一个函数,称之为f',这个函数倒过来,加上7而不是3。 f'(5)= 2,f'(1)= 8等
这是一个双向函数及其逆向的例子。 从理论上讲,任何将一个事物映射到另一个事物的math函数都可以颠倒过来 但是,在实践中,你可以创build一个function,将input加扰得很好,以至于难以扭转。
input和应用单向函数称为“散列”input,亚马逊在其系统中存储的是您的密钥的“哈希”。 SHA1就是这种“单向”function的一个例子,它也抵御了攻击。
HMAC函数build立在已build立的哈希函数上,使用已知的密钥validation一串文本。 它是这样工作的:
- 你把你的请求和秘密密钥的文本,并应用HMACfunction。
- 您将authentication头添加到您的请求并将其发送到亚马逊。
- 亚马逊查找他们的密钥副本,以及刚刚发送的文本并应用HMACfunction。
- 如果结果匹配,他们知道你有相同的密钥。
这和PKI的区别在于这种方法是RESTful的 ,允许你的系统和亚马逊服务器之间进行最less数量的交换。
和问我信用卡号码或密码并将其存储在自己的数据库中基本上不是一回事吗?
是的,虽然S3可以做的损害似乎只限于stream失您的帐户。
他们需要如何保密? 这些应用程序使用秘密密钥以某种方式存储它吗?
在某些时候,你将不得不加载秘密密钥,并且在大多数基于Unix的系统中,如果攻击者可以获得root权限,他们可以获得密钥。 如果你encryption的密钥,你必须有代码解密,并在某些时候解密代码必须是纯文本,因此可以执行。 这是DRM所具有的相同问题,除了您拥有计算机。
在很多情况下,我只是把密钥放在一个权限有限的文件中,并采取一般预防措施来防止我的系统被植根。 有一些技巧可以使其在多用户系统中正常工作,例如避免临时文件等。
公钥密码被用来防御非常具体的攻击,其中一些是常见的。 简而言之,这是一个复杂的math运算,可以validation个人是否拥有公钥和私钥,而只知道公钥。 这与信用卡或静态密码非常不同。 例如,如果您使用OpenSSH服务器进行身份validation,则服务器不需要私钥 。
理想情况下,如果亚马逊的API数据库被攻击者破坏,将有一个公钥列表,并将无法使用这些信息访问用户的API。 然而,理想的系统并不总是付诸实践,我不确定亚马逊是否能够防范这种攻击媒介,但他们应该是。
在公钥authentication方面,在统计上免疫力强。 密码通常是可以快速打破相对性的字典单词。 然而,私钥是一个很难猜测的庞大数字。 如果攻击者拥有公钥,那么他们可以在超级计算机上“离线”地进行许多猜测,但是即使这样做也需要花费大量的时间和金钱来破解密钥。