2013-07-23 10 views
5

Posiadam certyfikat X.509 i powiązany klucz prywatny. Próbuję zaszyfrować dokument PDF za pomocą Java BouncyCastle z CMSEnvelopedData.Jak zmienić asymetryczną parę kluczy bez zmiany klucza symetrycznego i zaszyfrowanej treści w systemie CMS z dmuchanym zamkiem

Potrafię zaszyfrować i zwraca bezpiecznie zaszyfrowany plik. Mogę odszyfrować i wszystko. Ale teraz chcę zmienić parę kluczy, ale nie klucz symetryczny, a tym samym szyfrowany dokument.

Dlaczego to robię? Ponieważ istnieją sytuacje, w których aplikacja może zmienić jakiś asymetryczny algorytm i nie jest konieczne ponowne szyfrowanie wszystkich dokumentów, ale tylko klucze symetryczne.

wiem, że mogę otrzymać zaszyfrowaną treść z:

CMSEnvelopedData encryptedData = new CMSEnvelopedData(new FileInputStream("FILE")); 
ContentInfo dataInfo= encryptedData .toASN1Structure(); 

Potem nie dokładnie to, co mam zrobić, aby uzyskać zaszyfrowany klucz symetryczny znać. Następnie chcę odszyfrować, zaszyfrować inną parę kluczy, a następnie utworzyć kolejny CMS z tymi samymi zaszyfrowanymi danymi, z tym samym kluczem symetrycznym i nową parą kluczy.

Każda pomoc zostanie doceniona. Dzięki.

+2

Możesz odnieść więcej sukcesów na listach dyskusyjnych poświęconych rozwojowi gry Bouncy Castle, w których opiekunowie odpowiadają na konkretne pytania dotyczące BC. Modyfikacje, to wydaje się być słuszne pytanie, czasami z Crypto API trudno jest wiedzieć, od czego zacząć. –

Odpowiedz

0

W ciągu ostatnich kilku lat standardowe biblioteki kryptograficzne Javy w rzeczywistości dotarły do ​​Bouncy Castle IMHO. Użyłem BC w kilku projektach, gdy nie było kryptografii Java, ale od tego czasu zaimplementowałem cały produkt bezpieczeństwa, używając tylko uwzględnionych klas.

Powiedziawszy to (pierwsza rekomendacja - skorzystaj ze standardowej kryptografii Java - dobre przykłady, rzetelna dokumentacja), moją drugą propozycją byłoby przełamanie dwóch składników (moje przeprosiny, ale nie ma tutaj konkretnych informacji o Zamku w Bouncy, „t stosować te konkretne bibliotek w latach):

  1. Korzystanie tajny klucz, symetrycznie szyfrować tekstowe i przechowywać BLOB szyfr tekstu osobno.

  2. Korzystanie z szyfrowania asymetrycznego (klucz prywatny źródłowy i klucz publiczny celu), szyfrowanie klucza tajnego i przechowywanie go osobno, odniesienie do pary kluczy, algorytmu itp., Która była używana, oraz odniesienie do skojarzonego szyfrowania. tekst BLOB/s.

Aby wykonać kluczową-pair lub inny asymetryczny aktualizację (algorytm itp), przejść przez zapisy w # 2 powyżej, wyszukiwanie (bezpiecznie) PKI prywatnego klucza do celu i odszyfrować tajny klucz . Następnie asymetrycznie ponownie zaszyfruj tajny klucz przy użyciu nowej pary lub innych parametrów (algorytmu itp.). Zastąp zaszyfrowany tajny klucz w rekordzie nr 2.

+0

Naprawdę nie jest to odpowiedź na pytanie. OP już powiedział, że nie chce ponownie szyfrować dokumentów. – Syon

+0

Istnieją dwie rzeczy, które mogą nie być możliwe do oddzielenia w bibliotece: 1. Szyfrowanie symetryczne używa klucza tajnego. Prosty tekst jest zaszyfrowany tym kluczem. 2. Szyfrowanie asymetryczne szyfruje ten tajny klucz przy użyciu danej pary kluczy PKI. Posiadanie docelowego prywatnego klucza PKI umożliwia odszyfrowanie tajnego klucza, a następnie (symetrycznie) dokumentu źródłowego. Jednak biblioteka musi to wspierać, aby wiedzieć, gdzie znajduje się blok bajtów, który zawiera sekret wewnątrz BLOBa. Tajemnica musiałaby zostać ponownie zaszyfrowana przy użyciu nowej pary kluczy, ale tak, koncepcyjnie tekst szyfrowania mógłby pozostać. –

Powiązane problemy