Jaka jest różnica między szyfrowaniem a podpisywaniem w szyfrowaniu asymetrycznym?

Jaka jest różnica między szyfrowaniem niektórych danych a podpisywaniem niektórych danych (za pomocą RSA)?

Czy po prostu odwraca rolę kluczy publiczno-prywatnych?

Na przykład, Chcę użyć 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ę być w stanie zaszyfrować pewne informacje i używać ich jako klucza produktu dla mojego oprogramowania. I only care that I am the only taki, który może 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, obchodzi mnie tylko to, że jestem jedynym weryfikowalnym, który może je wygenerować.

Czy podpisywanie jest przydatne w tym scenariuszu?

Author: mmcdole, 2009-01-18

11 answers

Podczas szyfrowania, używasz ich klucza publicznego do napisania wiadomości, a oni używają ich klucza prywatnego do jej odczytania.

Podczas podpisywania używasz swojego klucza prywatnego do napisania podpisu wiadomości, a oni używają Twojego klucza publicznego, aby sprawdzić, czy naprawdę jest Twój.

Chcę użyć mojego klucza prywatnego do generowania wiadomości, więc tylko ja mogę być nadawcą.

Chcę, aby mój klucz publiczny był używany do odczytu wiadomości i nie obchodzi mnie, kto czyta them

To jest podpisywanie , odbywa się za pomocą klucza prywatnego.

Chcę być w stanie zaszyfrować pewne informacje i używać ich jako klucza produktu dla mojego oprogramowania.

Obchodzi mnie tylko to, że jestem jedynym, który może je wygenerować.

Jeśli chcesz to wiedzieć tylko dla siebie, nie musisz mieszać z kluczami, aby to zrobić. Możesz po prostu wygenerować losowe Dane i przechowywać je w bazie danych.

Ale jeśli chcesz, aby ludzie wiedzieli, że klucze są naprawdę twój, musisz wygenerować losowe DANE, przechowywać w nim bazę danych i podpisać ją kluczem.

Chciałbym dołączyć mój klucz publiczny do mojego oprogramowania, aby odszyfrować / odczytać podpis klucza

Prawdopodobnie będziesz musiał kupić certyfikat dla Twojego klucza publicznego od komercyjnego dostawcy, takiego jak Verisign lub Thawte, aby ludzie mogli sprawdzić, czy nikt nie podrobił Twojego oprogramowania i nie zamienił Twojego klucza publicznego na ich.

 290
Author: Quassnoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-17 14:28:12

W RSA crypto, kiedy generujesz parę kluczy, jest całkowicie dowolne, który z nich wybierzesz jako klucz publiczny, a który jest kluczem prywatnym. Jeśli szyfrujesz jednym, możesz odszyfrować drugim-działa to w obu kierunkach.

Jest więc dość proste, aby zobaczyć, jak można zaszyfrować wiadomość za pomocą publicznego klucza odbiorcy, aby odbiorca mógł ją odszyfrować za pomocą prywatnego klucza .

Podpis jest dowodem na to, że sygnatariusz posiada klucz prywatny, który pasuje do klucza publicznego. Aby to zrobić, wystarczy zaszyfrować wiadomość za pomocą klucza prywatnego nadawcy i dołączyć zaszyfrowaną wersję wraz z wersją ze zwykłym tekstem. Aby zweryfikować nadawcę, odszyfruj zaszyfrowaną wersję i sprawdź, czy jest ona taka sama jak tekst zwykły.

Oczywiście oznacza to, że Twoja wiadomość nie jest tajemnicą. Każdy może go odszyfrować, ponieważ klucz publiczny jest dobrze znany. Ale kiedy to robią, udowodnili, że twórca szyfrogramu ma odpowiedni klucz prywatny.

Oznacza to jednak podwojenie rozmiaru transmisji-tekst jawny i tekst szyfrowy 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 hash zwykłego tekstu. Ważne jest, aby nie można było tworzyć fałszywych skrótów, dlatego używane są kryptograficzne algorytmy skrótu, takie jak SHA-2.

Więc:

  • aby wygenerować podpis, wykonaj hash ze zwykłego tekstu, zaszyfruj go kluczem prywatnym, dołącz go do zwykłego tekstu.
  • aby zweryfikować podpis, zrób hash ze zwykłego tekstu, odszyfruj podpis za pomocą klucza publicznego nadawcy, sprawdź, czy oba skróty są takie same.
 73
Author: slim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-12 09:05:46

Tak pomyśl o podpisywaniu danych jako o nadaniu im własnego woskowego znaczka, którego nikt inny nie ma. Ma to na celu osiągnięcie integralności i braku odrzucenia. Szyfrowanie jest tak, że nikt inny nie może zobaczyć danych. Odbywa się to w celu osiągnięcia poufności . Zobacz Wikipedię http://en.wikipedia.org/wiki/Information_security#Key_concepts

Podpis jest skrótem wiadomości podpisanej przy użyciu klucza prywatnego.

 14
Author: Johnno Nolan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 17:34:15

Podpisywanie tworzy "hash" z kluczem prywatnym, który można zweryfikować za pomocą klucza publicznego. Tekst jest wysyłany w czytelny.

Szyfrowanie wykorzystuje klucz publiczny odbiornika 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!).

 11
Author: Doug Currie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-17 22:06:43

Podpisywanie wskazuje, że naprawdę jesteś źródłem lub ręczysz za podpisany obiekt. Każdy może jednak odczytać obiekt.

Szyfrowanie oznacza, że tylko ci z odpowiednim kluczem prywatnym mogą go odczytać, ale bez podpisywania nie ma gwarancji, że jesteś zaszyfrowanym obiektem.

 7
Author: rjamestaylor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-17 23:08:38

Dokładnie opisujesz, jak i dlaczego podpis jest używany w kryptografii klucza publicznego. Zauważ, że bardzo niebezpieczne jest podpisywanie (lub szyfrowanie) wiadomości arytmetycznych dostarczanych przez innych - Pozwala to na ataki na algorytmy, które mogą zagrozić Twoim kluczom.

 5
Author: Michael Borgwardt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-17 21:20:26

W Twoim scenariuszu nie szyfruje się w rozumieniu szyfrowania asymetrycznego; wolę to nazwać "kodowaniem".

Więc kodujesz swoje dane do jakiejś reprezentacji 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)

 3
Author: devio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-17 22:13:34

Istnieją dwa różne, ale ściśle ze sobą powiązane problemy w nawiązaniu bezpiecznej komunikacji

  1. Szyfruj dane tak, aby tylko upoważnione osoby mogły je odszyfrować i odczytać
  2. weryfikacja tożsamości / uwierzytelnienia nadawcy

Oba te problemy można elegancko rozwiązać za pomocą kryptografii klucza publicznego.

I. szyfrowanie i deszyfrowanie danych

Alicja chce wysłać Bobowi wiadomość, której nikt nie powinien odczytać.
  • Alicja szyfruje wiadomość za pomocą Bob's public key i wysyła ją przez
  • Bob odbiera wiadomość i odszyfrowuje ją za pomocą swojego Private Key

Zauważ, że jeśli A chce wysłać wiadomość do B, A musi użyć publicznego klucz B (który jest publicznie dostępny dla każdego) i ani publiczny ani klucz prywatny A nie pojawia się tutaj.

Więc jeśli chcesz wysłać wiadomość do mnie powinieneś znać i używać 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. weryfikacja tożsamości nadawcy (uwierzytelnienie)

Alice chce jeszcze raz wysłać wiadomość do Boba. Problem szyfrowania danych rozwiązuje się za pomocą powyższej metody. Ale co, jeśli siedzę między Alicją a Bobem, przedstawiając się Bobowi jako "Alicja" i wysyłając własną wiadomość do Boba, zamiast przekazywać tę wysłaną przez Alicję. Mimo, że nie mogę odszyfruj i przeczytaj oryginalną wiadomość wysłaną przez Alice(która wymaga dostępu do prywatnego klucza Boba) przejmuję całą rozmowę między nimi. Czy Jest jakiś sposób, aby Bob mógł potwierdzić, że wiadomości, które odbiera, są rzeczywiście wysyłane przez Alice?
    Alicja podpisuje wiadomość za pomocą her private key (klucz prywatny Alicji) i wysyła ją przez Bob otrzymuje go i odszyfrowuje za pomocą Alice's public key. Ponieważ klucz publiczny Alicji pomyślnie odszyfrował wiadomość, Bob może wywnioskować, że wiadomość została została podpisana za pomocą Alicji

W praktyce Obie powyższe metody są używane razem z pewną formą hashowania (SHA, MD5) w celu uzyskania szyfrowania i autentyczności.

 3
Author: Siva Prakash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-04 03:38:06

Funkcjonalnie, używasz szyfrowania klucza publicznego/prywatnego, aby upewnić się, że tylko odbiorca może odczytać Twoją wiadomość. Wiadomość jest szyfrowana, a następnie szyfrowana przy użyciu klucza publicznego odbiornika.

Podpisywanie używasz, aby poinformować odbiorcę, że utworzyłeś wiadomość i nie zmieniła się podczas transferu. Podpisywanie wiadomości odbywa się przy użyciu własnego klucza prywatnego.

Jeśli chodzi o zastosowany algorytm: dotyczy to liczb pierwszych. Poszukałbym w google lepszego wyjaśnienia.

 2
Author: Gerbrand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-17 21:16:06

Myślę, że są mieszane wiadomości powyżej. Starałem się osiągnąć to samo, co Simucal - tzn. chciałem wygenerować klucz licencyjny, który zawiera ważne informacje o tym, kto może korzystać z oprogramowania i między jakimi zakresami dat itp. Ale nie chcę, żeby ludzie mogli zmienić te informacje, aby przedłużyć okres licencji itp. Moim pierwszym podejściem było użycie szyfrowania asymetrycznego, ale pomimo niektórych komentarzy powyżej, wydaje się, że można zaszyfrować za pomocą publicznego lub prywatnego klucza, ale tylko odszyfrować go za pomocą klucza prywatnego. Dlatego w tym scenariuszu trzeba będzie przechowywać klucz prywatny w systemie, aby mógł on zdekodować i sprawdzić klucz licencyjny... sprawia, że system jest dość niepewny, ponieważ każdy może wygenerować własne zmodyfikowane informacje o licencji i zaszyfrować je za pomocą klucza publicznego lub prywatnego (z których jeden byłby przechowywany w plikach binarnych systemu). To samo ryzyko związane jest oczywiście z szyfrowaniem symetrycznym.

Jak wiele z komentarze powyżej wskazują na to, że podpisanie wydaje się być drogą naprzód dla tego scenariusza, ale jeszcze nie znalazłem dobrego przykładu. Czy ktoś zna tutorial lub demo online, które zapewnia run-through takiej metody? Dzięki, Chris

 2
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-02 09:16:40

Odpowiadając na to pytanie w treści, że pytający zamierzali wykorzystać rozwiązanie do licencjonowania oprogramowania, wymagania są następujące:

  1. żadna osoba trzecia nie może wyprodukować klucza licencyjnego z dekompilacji aplikacji
  2. zawartość klucza oprogramowania nie musi być bezpieczna
  3. Klucz oprogramowania nie jest czytelny dla człowieka

Podpis cyfrowy rozwiąże ten problem, ponieważ surowe dane, które sprawiają, że klucz może być podpisany kluczem prywatnym, który sprawia, że nie jest czytelny dla człowieka ale może być zdekodowany, jeśli odwrócona Inżynieria. 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 na Twoim produkcie. Więc jeśli będą musieli włamać się do każdej wersji, która zostanie wydana. Ale naprawdę nie chcesz, aby mogli generować nowe klucze dla Twojego produktu, które mogą być udostępniane dla wszystkich wersji.

Python Dokumentacja PyNaCl zawiera przykład "podpisu cyfrowego", który będzie odpowiadał celowi. http://pynacl.readthedocs.org/en/latest/signing/

I z powodu projektu NaCl do przykładów C

 1
Author: oden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-10 11:38:59