Zasadniczo omówienie tego, co tutaj opisano .
Oto jak to działa: powiedzmy, że mamy funkcję, która pobiera liczbę od zera do dziewięciu, dodaje trzy i, jeśli wynik jest większy niż dziesięć, odejmuje dziesięć. Zatem f (2) = 5, f (8) = 1 itd. Teraz możemy utworzyć inną funkcję, nazwijmy ją f ', która idzie wstecz, dodając siedem zamiast trzech. f '(5) = 2, f' (1) = 8 itd.
To jest przykład funkcji dwukierunkowej i jej odwrotności. Teoretycznie wszystkie funkcje matematyczne, które odwzorowują jedną rzecz na drugą, można odwrócić. W praktyce jednak można utworzyć funkcję, która tak dobrze szyfruje swoje dane wejściowe, że niezwykle trudno jest ją odwrócić.
Pobranie danych wejściowych i zastosowanie funkcji jednokierunkowej nazywa się „haszowaniem” danych wejściowych, a to, co Amazon przechowuje w ich systemie, jest „hashem” Twojego tajnego klucza. SHA1 jest przykładem tego rodzaju funkcji „jednokierunkowej”, która jest również zabezpieczona przed atakami.
Funkcja HMAC opiera się na ustalonych funkcjach skrótu, aby użyć znanego klucza do uwierzytelnienia ciągu tekstu. Działa to tak:
- Bierzesz tekst swojego żądania i swój tajny klucz i stosujesz funkcję HMAC.
- Dodajesz ten nagłówek uwierzytelniania do swojego żądania i wysyłasz go do Amazon.
- Amazon sprawdza swoją kopię tajnego klucza oraz właśnie wysłany tekst i stosuje funkcję HMAC.
- Jeśli wynik pasuje, wiedzą, że masz ten sam tajny klucz.
Różnica między tym a PKI polega na tym, że ta metoda jest RESTful , umożliwiając minimalną liczbę wymian między Twoim systemem a serwerami Amazon.
Czy to nie to samo, co pytanie mnie o numer mojej karty kredytowej lub hasło i przechowywanie ich w ich własnej bazie danych?
Tak, chociaż szkody, które ktoś może wyrządzić za pomocą S3, wydają się ograniczać do opróżnienia konta.
Jak bardzo muszą być tajni? Czy te aplikacje używają tajnych kluczy, które je w jakiś sposób przechowują?
W pewnym momencie będziesz musiał załadować tajny klucz, a w przypadku większości systemów opartych na Uniksie, jeśli atakujący może uzyskać dostęp do roota, może uzyskać klucz. Jeśli szyfrujesz klucz, musisz mieć kod, aby go odszyfrować, aw pewnym momencie kod odszyfrowywania musi być zwykłym tekstem, aby można go było wykonać. To ten sam problem, który ma DRM, z wyjątkiem tego, że jesteś właścicielem komputera.
W wielu przypadkach po prostu umieszczam tajne klucze w pliku z ograniczonymi uprawnieniami i podejmuję zwykłe środki ostrożności, aby zapobiec zrootowaniu mojego systemu. Jest kilka sztuczek, aby działał poprawnie w systemie wielu użytkowników, takich jak unikanie plików tymczasowych i tym podobne.
Kryptografia klucza publicznego służy do ochrony przed bardzo specyficznymi atakami, z których niektóre są powszechne. Krótko mówiąc, jest to złożona matematyka, która pozwala zweryfikować, czy dana osoba ma zarówno klucz publiczny, jak i prywatny, znając tylko klucz publiczny. To bardzo różni się od karty kredytowej lub hasła statycznego. Na przykład, jeśli uwierzytelniasz się za pomocą serwera OpenSSH, serwer nie potrzebuje klucza prywatnego .
Idealnie byłoby, gdyby baza danych API Amazon, w której ma zostać przejęta, miałaby napastnik posiadający listę kluczy publicznych i nie byłby w stanie uzyskać dostępu do API użytkownika przy użyciu tych informacji. Jednak idealne systemy nie zawsze są wprowadzane w życie i nie wiem na pewno, czy Amazon chroni przed tym wektorem ataku, ale tak powinno być.
W przypadku uwierzytelniania za pomocą klucza publicznego jest statystycznie odporne na brutalną siłę. Hasła są często słowami słownikowymi, które można szybko złamać z teorii względności. Jednak klucz prywatny to ogromna liczba, której nie jest łatwo odgadnąć. Gdyby osoba atakująca miała klucz publiczny, mogłaby wykonać wiele prób „offline” na super komputerze, ale nawet wtedy złamanie klucza zajęłoby dużo czasu i pieniędzy.
źródło
AWS zaprojektował własny niestandardowy algorytm uwierzytelniania. v4 została wydana w 2014 roku. Szczegóły przedstawiono tutaj: Żądania uwierzytelnienia (AWS Signature Version 4) . Główną kwestią jest to, że żądanie nie jest podpisane samym sekretem, ale kluczem podpisu, który jest generowany przy użyciu klucza. Do podpisywania używa również HMAC-SHA256.
Używanie kluczy asymetrycznych byłoby bezpieczniejsze, ponieważ AWS przechowuje tylko klucz publiczny zamiast klucza tajnego, który jest przechowywany zarówno przez użytkownika, jak i przez AWS.
źródło