Answers:
基本上详细说明这里概述的内容。
它是这样工作的:假设我们有一个函数,该函数接受一个从零到九的数字,然后加三个,如果结果大于十,则减去十。因此,f(2)= 5,f(8)= 1,依此类推。现在,我们可以通过添加七个而不是三个来制作另一个函数,称为f'。f'(5)= 2,f'(1)= 8,依此类推。
这是双向函数及其逆函数的示例。从理论上讲,将一个事物映射到另一事物的任何数学函数都可以颠倒。但是,实际上,您可以创建一个功能来很好地加扰其输入,以至于难以逆转。
接受输入并应用单向功能称为“散列”输入,Amazon在其系统上存储的是您的密钥的“散列”。SHA1是这种“单向”功能的一个示例,它也可以抵抗攻击。
该HMAC功能基础上建立的散列函数使用已知的密钥进行身份验证的文本字符串。它是这样的:
此方法与PKI之间的区别在于此方法是RESTful的,允许您的系统与Amazon服务器之间进行最少数量的交换。
问我输入信用卡号或密码并将其存储在他们自己的数据库中,这基本上不是同一件事吗?
是的,尽管某人可以对S3造成的损害似乎仅限于耗尽您的帐户。
他们需要成为什么秘密?这些使用秘密密钥的应用程序是否以某种方式存储了密钥?
在某些时候,您将必须加载密钥,并且在大多数基于Unix的系统上,如果攻击者可以获得root用户访问权限,则他们可以获得密钥。如果对密钥进行加密,则必须具有解密它的代码,并且在某些时候解密代码必须是纯文本,以便可以执行。这是DRM所具有的相同问题,只是您拥有计算机。
在许多情况下,我只是将秘密密钥放在权限受限的文件中,并采取通常的预防措施来防止系统被植根。有一些技巧可使其在多用户系统上正常工作,例如避免使用临时文件等。
公钥密码术用于防御非常特殊的攻击,其中某些攻击很常见。简而言之,这是一个复杂的数学运算,它使人们可以在仅知道公钥的情况下验证个人是否同时具有公钥和私钥对。这与信用卡或静态密码有很大不同。例如,如果您正在使用OpenSSH服务器进行身份验证,则该服务器不需要私钥。
理想的情况是,如果要攻击的Amazon API数据库受到攻击,攻击者将拥有一个公开密钥列表,并且将无法使用此信息访问用户的API。但是,理想的系统并不一定总是付诸实践,我不确定Amazon是否在防御这种攻击媒介,但确实如此。
在公共密钥认证中,统计学上不受暴力侵害。密码通常是字典单词,可以快速打破相对性。但是,私钥是一个很大的数字,不容易猜测。如果攻击者拥有公钥,那么他们可以在超级计算机上“脱机”执行许多猜测,但是即使那样,破解密钥也将花费大量时间和金钱。
AWS设计了自己的自定义身份验证算法。v4于2014年发布。详细信息在此处概述:身份验证请求(AWS签名版本4)。重要的一点是,请求不是使用秘密本身签名的,而是使用使用秘密生成的签名密钥签名的。它还使用HMAC-SHA256进行签名。
使用非对称密钥会更安全,因为AWS仅会存储一个公共密钥,而不是由用户和AWS都存储的秘密。