Jaka jest różnica między szyfrowaniem niektórych danych a podpisywaniem niektórych danych (przy użyciu RSA)?
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.
Czy po prostu odwraca rolę kluczy publiczno-prywatnych?
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.
Na przykład chcę używać mojego klucza prywatnego do generowania wiadomości, więc tylko ja mogę być nadawcą.
Jest to właściwość niezaprzeczalności, którą można uzyskać poprzez podpisanie.
Chcę, aby mój klucz publiczny był używany do czytania wiadomości i nie obchodzi mnie, kto je czyta.
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.
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ć.
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.
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ć.
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.
Czy podpisywanie jest przydatne w tym scenariuszu?
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.