Jak działają klucze API i tajne klucze? Czy byłoby bezpieczne, gdybym musiał przekazać moje API i tajne klucze do innej aplikacji?

136

Właśnie zaczynam myśleć o tym, jak działają klucze API i tajne klucze. Zaledwie 2 dni temu zarejestrowałem się w Amazon S3 i zainstalowałem wtyczkę S3Fox . Poprosili mnie o mój klucz dostępu i tajny klucz dostępu, które wymagają zalogowania się, aby uzyskać dostęp.

Zastanawiam się więc, jeśli proszą mnie o mój tajny klucz, to muszą go gdzieś przechowywać, prawda? 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?

Jak mają działać klucze tajne i klucze API? Jak bardzo muszą być tajni? Czy te aplikacje używają tajnych kluczy, które je w jakiś sposób przechowują?

Lance Pollard
źródło

Odpowiedzi:

90

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.

ben
źródło
14
„Pobranie danych wejściowych i zastosowanie funkcji jednokierunkowej nazywa się„ haszowaniem ”danych wejściowych, a to, co Amazon przechowuje w swoim systemie, jest„ hashem ”Twojego tajnego klucza” - Jeśli Amazon przechowuje HASH twojego tajnego klucza, jak to jest Czy Amazon może HASHować wysłany do nich tekst?
Franklin
21
Najpierw mówisz „to, co Amazon przechowuje w swoim systemie, jest„ hashem ”Twojego tajnego klucza”, a później „Amazon sprawdza swoją kopię tajnego klucza”. Wydaje się, że są ze sobą sprzeczne. Uważam, że pierwsze stwierdzenie jest błędne.
Sean
3
Ten adres URL zawiera więcej szczegółów na temat implementacji uwierzytelniania Amazon S3 - docs.aws.amazon.com/AmazonS3/latest/dev/S3_Authentication2.html
asyncwait
10
„Teoretycznie wszystkie funkcje matematyczne, które odwzorowują jedną rzecz na drugą, można odwrócić” - To nieprawda, przykładem są funkcje skrótu. bardzo łatwo to pokazać. powiedzmy, że mamy funkcję, która zamienia słowa na liczby na podstawie sumy wartości (a = 1, b = 2, c = 3 itd.). Np. „SO” będzie równe 18 + 14 = 32. Więc zmieniliśmy SO na 32, ale jeśli ujawnię komuś tę funkcję i podam mu liczbę 32, nie ma możliwości, aby wiedział, czy naszym podstawowym słowem było „SO” lub „ZF” (26 + 6) lub jedna z kilkudziesięciu innych możliwości
Leo
1
Zgodnie z dokumentem powiązanym z @asyncwait, amazon zdecydowanie przechowuje Twój tajny klucz, a nie tylko jego skrót. W rzeczywistości wygląda na to, że jedyne haszowanie dzieje się wewnątrz funkcji HMAC
cowlinator,
7

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.

wieża
źródło
2
nie potrzebuje klucz prywatny link jest uszkodzony teraz.
setzamora
@Joset zaktualizował link wskazujący na kopię w internetowej maszynie zwrotnej z 2008 roku
oligofren
1

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.

Generowanie podpisu

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.

JBaczuk
źródło