我刚开始思考 API 密钥和秘密密钥是如何工作的。就在两天前,我注册了 AmazonS3并安装了 S3Fox 插件。他们要求我提供访问密钥和秘密访问密钥,两者都需要我登录才能访问。
所以我在想,如果他们要我的秘密钥匙他们一定把它藏在什么地方了,对吧?这和问我要信用卡号或密码然后存入他们自己的数据库不是一回事吗?
密钥和 API 密钥是怎么工作的?需要保密到什么程度?这些应用程序是否以某种方式使用存储它的密钥?
公钥密码术 用于防御非常特定的攻击,其中一些攻击很常见。简而言之,这是一个复杂的数学问题,它允许人们在只知道公钥的情况下验证个人是否同时拥有公钥和私钥对。这与信用卡或静态密码非常不同。例如,如果您使用 OpenSSH 服务器进行身份验证,那么服务器 不需要私钥。
理想情况下,如果亚马逊的 API 数据库在哪里被破坏,攻击者将有一个公钥列表,并将无法访问用户的 API 使用这一信息。然而,理想的系统并不总是付诸实践,我不知道亚马逊是否在保护自己免受这种攻击,但他们应该这样做。
在公共密钥认证统计学上对暴力免疫。密码通常是可以快速破解相对论的字典词。然而,私钥是一个难以猜测的庞大数字。如果攻击者拥有公钥,那么他们可以在超级计算机上“脱机”执行许多猜测,但即便如此,也需要花费大量的时间和金钱来破解密钥。
基本上阐述了什么是概述 给你。
它是这样工作的: 假设我们有一个函数,它从0到9取一个数,然后加上3,如果结果大于10,再减去10。所以 f (2) = 5,f (8) = 1,等等。现在,我们可以创建另一个函数,命名为 f’,这个函数是向后的,通过增加7而不是3。F’(5) = 2,f’(1) = 8,等等。
这是一个双向函数及其逆函数的例子。从理论上讲,任何数学函数,映射一个事物到另一个可以颠倒。然而,在实践中,您可以创建一个函数,该函数可以很好地扰乱其输入,以至于难以逆转。
获取一个输入并应用一个单向函数被称为“散列”输入,亚马逊在他们的系统上存储的是你的密钥的“散列”。SHA1就是这种“单向”函数的一个例子,它也能够抵御攻击。
HMAC 功能建立在已建立的散列函数的基础上,使用已知的密钥对文本字符串进行身份验证。工作原理是这样的:
这个方法和 PKI 的区别在于,这个方法是 宁静,允许在您的系统和 Amazon 的服务器之间进行最少数量的交换。
这不是和 问我的信用卡号码 或密码,并储存在他们的 自己的数据库?
是的,虽然有人可以对 S3造成的损害似乎仅限于抽干您的帐户。
需要保密到什么程度 这些应用程序使用的秘密 钥匙是用来存储的吗?
在某种程度上,您将不得不加载秘密密钥,并且对于大多数基于 Unix 的系统,如果攻击者可以获得 root 访问权限,他们就可以获得密钥。如果你加密了密钥,你必须有代码来解密它,在某些时候,解密代码必须是纯文本,这样才能执行。这是同样的问题 DRM 有,除了你拥有的计算机。
在许多情况下,我只是将密钥放在一个权限有限的文件中,并采取通常的预防措施来防止系统被植入。有一些技巧可以让它在多用户系统中正常工作,比如避免使用临时文件等等。
AWS 设计了自己的自定义身份验证算法。V4发布于2014年。详情概述于此: 认证请求(AWS 签名版本4)。一个主要的问题是,请求不是用机密本身签名的,而是用使用机密生成的签名密钥签名的。它还使用 HMAC-SHA256进行签名。
使用非对称密钥会更安全,因为 AWS 只存储公钥,而不存储用户和 AWS 共同存储的密钥。