2012-05-02 27 views
6

Muszę wiedzieć, czy jakikolwiek fila może być podpisany cyfrowo, przy użyciu RSA, certyfikatu i tego typu rzeczy, lub jeśli tylko niektóre rodzaje plików mogą być podpisane. Wszystko to, używając PHP.Jak dodać podpis cyfrowy (RSA, certyfikat itp.) Do dowolnego pliku, używając PHP?

Na przykład: Czy plik tekstowy może być podpisany cyfrowo ?, A co z obrazami (png, jpeg, bmp)?

Nie muszę "dołączać" obrazu z podpisem graficznym.

Dziękuję za pomoc.

Odpowiedz

8

Korzystanie phpseclib, a pure PHP RSA implementation:

<?php 
include('Crypt/RSA.php'); 

$rsa = new Crypt_RSA(); 
extract($rsa->createKey()); 

$plaintext = 'terrafrost'; 

$rsa->loadKey($privatekey); 
$signature = $rsa->sign($plaintext); 

$rsa->loadKey($publickey); 
echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified'; 
?> 

Analog do tego z OpenSSL CLI jest następujący:

openssl dgst -sha1 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -out signature.txt -sign privatekey.txt plaintext.txt 
openssl dgst -sha1 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -prverify privatekey.txt -signature signature.txt plaintext.txt 
+0

Dziękuję za odpowiedź. Przetestowałem cyfrowy podpis pod kątem zwykłego pliku tekstowego i działa dobrze. Nie testowałem jeszcze w plikach binarnych, ponieważ nie jestem pewien, czy podpis cyfrowy złamie plik. Spróbuję użyć phpseclib. –

+0

Czy mogę użyć tego do plików w jakikolwiek sposób? Powiedz jak przesłany obraz? Z góry dziękuję –

+0

Oczywiście - po prostu wykonaj '$ plaintext = file_get_contents (" filename.ext ")' – neubert

1

Dlaczego chcesz cyfrowo podpisać te różne pliki?

Nie ma standardu dla rzeczywistej zmiany plików tekstowych lub obrazów, tak aby same pliki zawierały jakiś cyfrowy podpis.

Jeśli chcesz zapewnić użytkowników, że pliki nie zostały zmienione, możesz podać im skrót MD5 pliku. Mogą korzystać z bezpłatnych narzędzi do sprawdzania skrótu MD5 pobranego pliku i porównać go z tym, który dałeś, aby upewnić się, że ich plik nie został zmieniony. Będzie to zwykle używane w przypadku oprogramowania/pakietów binarnych, do których strony trzecie mogłyby wprowadzić złośliwy kod.

Inną możliwością jest to, że chcesz, aby użytkownicy mogli zweryfikować autentyczność niektórych plików. W tym przypadku użytkownik może chcieć upewnić się, że plik tekstowy lub obraz pochodzi od YOU specjalnie. Działa to prawie tak samo, jak uzyskanie skrótu MD5 pliku z kluczem prywatnym znanym tylko użytkownikowi, aby użytkownik końcowy mógł porównać podpis pliku z kluczem publicznym, aby upewnić się, że plik nie został zmieniony i pochodzi z określonego źródła. PGP (całkiem dobra prywatność) zapewnia do tego ramy.

Proponuję zapoznać się z dokumentami wstępnymi PGP, aby uzyskać więcej informacji na ten temat. http://www.pgpi.org/doc/pgpintro/

8

Re: może każdy rodzaj pliku być podpisane cyfrowo, używając RSA, A certyfikat i takie rzeczy, lub czy tylko niektóre rodzaje plików mogą być podpisane?

O: Tak i nie. Z jednej strony standardowy cyfrowy podpis można obliczyć dla dowolnego pakietu bitów, w tym zwykłego pliku tekstowego, plików obrazów, plików binarnych, wszystkiego, co można sobie wyobrazić.

Ale wtedy pytania stają się:

  1. Jak powiązać podpis cyfrowy (który sam w sobie jest binarny run bitów) z pliku danych? Czy format pliku danych pozwala na dołączenie podpisu cyfrowego do danych? A może potrzebujesz samodzielnie zarządzać cyfrowym podpisem, może jako oddzielny plik, być może używając własnego wymyślonego formatu danych?

  2. Po uzyskaniu podpisanych cyfrowo danych i podpisu, w jaki sposób odbiorca weryfikuje dane i ich podpis, aby zapewnić odbiorcę, kto podpisał dane (tożsamość) i czy dane nie zostały zmienione od czasu podpisania (integralność)?

Formaty plików, które obsługują podpisów cyfrowych

Dużą zaletą formatów plików, które samoistnie obsługują podpisów cyfrowych jest to, że odbiorcy mogą zweryfikować podpis cyfrowy i integralność pliku po prostu o otrzymaniu podpisanego pliku a następnie za pomocą własnego oprogramowania do weryfikacji. Odbiorca nie musi niczego instalować od nadawcy.

Istnieje wiele formatów plików obsługujących podpisy cyfrowe. Np. Pdf, Word .doc, .docx. Excel .xls, .xlsx. Istnieje standard for signing xml files. Jego zaletą jest to, że xml może być używany jako koperta dla dowolnego typu danych. Na przykład plik PDF można cyfrowo podpisać i wysłać do kogoś. Odbiorca może następnie użyć standardowego/darmowego programu Adobe Reader, aby otworzyć plik PDF i zweryfikować jego cyfrowe podpisy.

"Format" dla plików tekstowych (plik wypełniony znakami) nie obsługuje podpisów cyfrowych. Potrzebujesz więc koperty dla tekstu i cyfrowego podpisu lub osobno podpisujesz się cyfrowym podpisem. W każdym razie odbiorca potrzebuje Twojego oprogramowania do weryfikacji danych. (Lub musiałby napisać własny po podaniu specyfikacji dla zwykłego tekstu i podpisu.)

S/MIME oferuje standardowy sposób cyfrowego podpisywania tekstu lub innych uporządkowanych danych e-mail/MIME. Zobacz rfc 5751. Ale nie jest szeroko stosowany poza agentami poczty e-mail, które mogą generować lub odbierać/weryfikować podpisane wiadomości e-mail. Outlook wspiera to.

Powiązane problemy