Jaka jest różnica między szyfrowaniem niektórych danych a podpisywaniem niektórych danych (przy użyciu RSA)?
Czy po prostu odwraca rolę kluczy publiczno-prywatnych?
Na przykład chcę używać mojego klucza prywatnego do generowania wiadomości, więc tylko ja mogę być nadawcą. Chcę, aby mój klucz publiczny był używany do czytania wiadomości i nie obchodzi mnie, kto je czyta. Chcę mieć możliwość szyfrowania niektórych informacji i używania ich jako klucza produktu dla mojego oprogramowania. Obchodzi mnie tylko to, że tylko ja mogę je wygenerować. Chciałbym dołączyć mój klucz publiczny do mojego oprogramowania, aby odszyfrować / odczytać podpis klucza. Nie obchodzi mnie, kto może odczytać dane w kluczu, dbam tylko o to, że jestem jedynym weryfikowalnym, który może je wygenerować.
Czy podpisywanie jest przydatne w tym scenariuszu?
źródło
f(key, message)
, żef(private, f(public, message)) === f(public, f(private, message)) === message
W krypto RSA, gdy generujesz parę kluczy, jest całkowicie arbitralne, który z nich wybierzesz jako klucz publiczny, a który klucz prywatny. Jeśli zaszyfrujesz jednym, możesz odszyfrować drugim - działa to w obu kierunkach.
Tak więc dość łatwo jest zobaczyć, jak można zaszyfrować wiadomość za pomocą klucza publicznego odbiorcy , aby odbiorca mógł ją odszyfrować za pomocą klucza prywatnego .
Podpis jest dowodem, że osoba podpisująca ma klucz prywatny, który pasuje do jakiegoś klucza publicznego. Aby to zrobić, wystarczy zaszyfrować wiadomość za pomocą klucza prywatnego tego nadawcy i dołączyć zaszyfrowaną wersję wraz z wersją zwykłego tekstu. Aby zweryfikować nadawcę, odszyfruj zaszyfrowaną wersję i sprawdź, czy jest ona taka sama jak zwykły tekst.
Oczywiście oznacza to, że twoja wiadomość nie jest tajna. Każdy może go odszyfrować, ponieważ klucz publiczny jest dobrze znany. Ale kiedy to robią, udowodnili, że twórca tekstu zaszyfrowanego ma odpowiedni klucz prywatny.
Oznacza to jednak podwojenie rozmiaru transmisji - tekstu jawnego i tekstu zaszyfrowanego razem (zakładając, że chcesz, aby ludzie, którzy nie są zainteresowani weryfikacją podpisu, przeczytali wiadomość). Zamiast tego zazwyczaj podpis jest tworzony przez utworzenie skrótu w postaci zwykłego tekstu. Ważne jest, aby nie można było tworzyć fałszywych skrótów, dlatego wykorzystywane są algorytmy szyfrujące, takie jak SHA-2.
Więc:
źródło
Istnieją dwa wyraźne, ale ściśle powiązane problemy w ustanowieniu bezpiecznej komunikacji
Oba te problemy można elegancko rozwiązać za pomocą kryptografii klucza publicznego.
I. Szyfrowanie i deszyfrowanie danych
Alice chce wysłać wiadomość do Boba, której nikt nie powinien przeczytać.
Więc jeśli chcesz wysłać do mnie wiadomość, powinieneś znać i użyć mojego klucza publicznego, który ci dostarczam, i tylko ja będę w stanie odszyfrować wiadomość, ponieważ jestem jedynym, który ma dostęp do odpowiedniego klucza prywatnego.
II. Zweryfikuj tożsamość nadawcy (uwierzytelnianie)
Alice chce ponownie wysłać wiadomość do Boba. Problem szyfrowania danych rozwiązuje się powyższą metodą.
Ale co, jeśli siedzę między Alicją a Bobem, przedstawiając się Bobowi jako „Alice” i wysyłając Bobowi własną wiadomość zamiast przekazywać tę wysłaną przez Alice. Chociaż nie mogę odszyfrować i odczytać oryginalnej wiadomości wysłanej przez Alicję (która wymaga dostępu do prywatnego klucza Boba), przejmuję całą rozmowę między nimi.
Czy istnieje sposób, w jaki Bob może potwierdzić, że wiadomości, które otrzymuje, są w rzeczywistości wysyłane przez Alice?
źródło
Tak, pomyśl o podpisywaniu danych jako nadaniu im własnej pieczęci woskowej, której nikt inny nie ma. Robi się to w celu osiągnięcia integralności i niezaprzeczalności . Szyfrowanie jest tak, że nikt inny nie może zobaczyć danych. Odbywa się to w celu zachowania poufności . Zobacz wikipedia http://en.wikipedia.org/wiki/Information_security#Key_concepts
Podpis to skrót wiadomości podpisany przy użyciu klucza prywatnego.
źródło
Podpisywanie powoduje wygenerowanie „skrótu” za pomocą klucza prywatnego, który można zweryfikować za pomocą klucza publicznego. Tekst zostanie wysłany w czystej postaci.
Szyfrowanie wykorzystuje klucz publiczny odbiorcy do szyfrowania danych; dekodowanie odbywa się za pomocą ich klucza prywatnego.
Tak więc użycie kluczy nie jest odwrócone (w przeciwnym razie Twój klucz prywatny nie byłby już prywatny!).
źródło
Opisujesz dokładnie, w jaki sposób i dlaczego podpisywanie jest używane w kryptografii klucza publicznego. Pamiętaj, że podpisywanie (lub szyfrowanie) wiadomości arytmetycznych dostarczanych przez inne osoby jest bardzo niebezpieczne - pozwala to na ataki na algorytmy, które mogłyby naruszyć twoje klucze.
źródło
Podpisywanie oznacza, że naprawdę jesteś źródłem lub gwarantem podpisanego obiektu. Jednak każdy może odczytać obiekt.
Szyfrowanie oznacza, że tylko osoby z odpowiednim kluczem prywatnym mogą go odczytać, ale bez podpisania nie ma gwarancji, że jesteś za zaszyfrowanym obiektem.
źródło
Szyfrowanie zachowuje poufność wiadomości („niektóre dane”), a podpisywanie zapewnia niezaprzeczalność: tzn. Tylko podmiot, który ją podpisał, mógł ją podpisać. Istnieją również różnice funkcjonalne; Czytaj.
Absolutnie nie. Używanie tych samych kluczy prywatnych do podpisywania i deszyfrowania (lub, podobnie, tych samych kluczy publicznych do weryfikacji i szyfrowania ) jest lekceważone, ponieważ nie należy mieszać celów. Nie jest to tak bardzo kwestia matematyczna (RSA powinien być nadal bezpieczny), ale problem z zarządzaniem kluczami , w którym np. Klucz do podpisu powinien mieć krótszą żywotność i zawierać większą ochronę przed jego użyciem.
W przypadku tej samej wiadomości należy użyć klucza prywatnego nadawcy do podpisania, a odbiorników zaufanego klucza publicznego do szyfrowania. Zwykle używa się podpisywania, a następnie szyfrowania, w przeciwnym razie przeciwnik mógłby zastąpić podpis swoim. Podobnie należy użyć klucza prywatnego odbiorcy do odszyfrowania i zaufanego klucza publicznego nadawcy do weryfikacji.
Ponadto należy zrozumieć, że przy generowaniu podpisów nie stosuje się „szyfrowania kluczem prywatnym”. Chociaż wszystkie operacje RSA opierają się na potęgowaniu modułowym, schemat wypełniania jest zupełnie inny w przypadku generowania sygnatur. Ponadto klucz publiczny ma zupełnie inne właściwości niż klucz prywatny RSA we wszystkich praktycznych zastosowaniach RSA.
Jest to właściwość niezaprzeczalności, którą można uzyskać poprzez podpisanie.
Klucz publiczny powinien być uważany przez wszystkich za znany. Jeśli chcesz, aby wszyscy czytali wiadomości, po prostu ich nie szyfruj.
Podpisywanie zasadniczo nie wpływa na treść wiadomości. Wiadomość jest uważana za oddzielną od podpisów. Oficjalnie takie podpisy są znane jako „podpisy z dodatkiem”, gdzie załącznik stanowi komunikat. To trochę dziwne imię, ponieważ wiadomość jest uważana za ważniejszą niż podpis nad nią, ale tak. Tylko kilka podpisów oferuje (częściowe) odzyskiwanie wiadomości; nie są już często używane i są ogólnie uważane za przestarzałe.
Należy pamiętać, że protokoły podpisu, takie jak CMS, mogą wdrożyć format kontenera, który zawiera zarówno wiadomość, jak i podpis. W takim przypadku musisz najpierw wyciągnąć - nadal niezaszyfrowaną - wiadomość z kontenera, podobnie jak rozpakowanie pliku z zwykłego archiwum .zip. Tak więc wiadomość może być ukryta i nie może być bezpośrednio użyta w takim przypadku.
Szyfrowanie służy do zachowania poufności. W przeszłości generowanie podpisu RSA było często uważane za „szyfrowanie kluczem prywatnym”. Jednak operacje są zupełnie inne, jak wyjaśniono powyżej, a późniejsze standardy desperacko próbują oddzielić szyfrowanie i generowanie podpisów.
Tak, nazywa się to ustanowieniem zaufania do klucza publicznego. Jednak ochrona kodu programu różni się bardzo od ochrony wiadomości. Możesz wykonać podpisywanie kodu, ale wtedy potrzebujesz czegoś, aby sprawdzić podpis poza swoim kodem . Istnieją systemy operacyjne, które to oferują.
Na przykład istnieje Microsoft Authenticode. Sklepy z aplikacjami, takie jak sklep z aplikacjami iStore i Android, mogą, ale nie muszą, korzystać z podpisywania kodu, ale zapewniają pewne zapewnienie, że aplikacja nie jest klonowana lub przynajmniej nie jest klonowana w sklepie. W końcu kryptografia nie zawsze jest rozwiązaniem.
Utrzymując swój kod przed sklonowany / zmienione w ogóle jest o wiele trudniejsze, a chcesz być solidnie na terytorium DRM jeśli go w ten sposób.
Tak, absolutnie. Z pewnością może pomóc upewnić się, że wiadomości zostały podpisane tylko przez Ciebie, jeśli istnieje zaufanie do klucza publicznego. To, czy może być przydatne do uwierzytelnienia kodu aplikacji / zintegrowanego klucza publicznego, zależy całkowicie od środowiska, w którym spodziewasz się uruchomić kod.
źródło
W twoim scenariuszu nie szyfrujesz w rozumieniu szyfrowania asymetrycznego; Wolę nazwać to „kodowaniem”.
Tak więc kodujesz swoje dane w postaci binarnej, a następnie podpisujesz kluczem prywatnym. Jeśli nie możesz zweryfikować podpisu za pomocą klucza publicznego, wiesz, że podpisane dane nie są generowane za pomocą klucza prywatnego. („weryfikacja” oznacza, że niepodpisane dane nie mają znaczenia)
źródło
Funkcjonalnie używasz szyfrowania klucza publicznego / prywatnego, aby mieć pewność, że tylko odbiorca może odczytać twoją wiadomość. Wiadomość jest szyfrowana przy użyciu klucza publicznego odbiornika i odszyfrowywana przy użyciu klucza prywatnego odbiornika.
Podpisanie umożliwia powiadomienie odbiorcy o utworzeniu wiadomości i nie zmieniła się podczas przesyłania. Podpisywanie wiadomości odbywa się za pomocą własnego klucza prywatnego. Odbiorca może użyć klucza publicznego, aby sprawdzić, czy wiadomość nie została naruszona.
Jeśli chodzi o zastosowany algorytm: dotyczy to funkcji jednokierunkowej, patrz na przykład wikipedia . Jeden z pierwszych takich algorytmów używa dużych liczb pierwszych, ale od tego czasu wymyślono więcej funkcji jednokierunkowych.
Wyszukaj „Bob”, „Alice” i „Mallory”, aby znaleźć artykuły wprowadzające w Internecie.
źródło
Odpowiadając na to pytanie w treści, w której pytający zamierzali zastosować rozwiązanie do licencjonowania oprogramowania, wymagania są następujące:
Podpis cyfrowy rozwiąże ten problem, ponieważ nieprzetworzone dane, które powodują, że klucz może być podpisany kluczem prywatnym, co sprawia, że nie jest on czytelny dla człowieka, ale może zostać zdekodowany, jeśli zostanie poddany inżynierii odwrotnej. Ale klucz prywatny jest bezpieczny, co oznacza, że nikt nie będzie mógł tworzyć licencji na twoje oprogramowanie (o to chodzi).
Pamiętaj, że nie możesz uniemożliwić wykwalifikowanej osobie usunięcia blokady oprogramowania w twoim produkcie. Więc jeśli będą musieli włamać się do każdej wydanej wersji. Ale tak naprawdę nie chcesz, aby były one w stanie wygenerować nowe klucze dla Twojego produktu, które można udostępniać dla wszystkich wersji.
Python Dokumentacja PyNaCl zawiera przykład „podpisu cyfrowego”, który będzie odpowiadał temu celowi. http://pynacl.readthedocs.org/en/latest/signing/
i przyczyna projektu NaCl do przykładów C.
źródło