2012-05-02 36 views
6

Tôi cần biết liệu có thể ký bất kỳ loại fila nào bằng kỹ thuật số hay không, sử dụng RSA, chứng chỉ và nội dung đó, hoặc chỉ có thể ký một số loại tệp nhất định. Tất cả điều này, bằng cách sử dụng PHP.Làm cách nào để thêm chữ ký số (RSA, Chứng chỉ, vv) vào bất kỳ tệp nào, sử dụng PHP?

Ví dụ: Tệp văn bản thuần túy có thể được ký bằng kỹ thuật số không ?, Điều gì về hình ảnh (png, jpeg, bmp)?

Tôi không cần phải "đính kèm" hình ảnh có chữ ký đồ họa.

Cảm ơn sự giúp đỡ của bạn.

Trả lời

8

Sử dụng 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'; 
?> 

Các analog vào đó với openssl CLI là như sau:

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

Cảm ơn câu trả lời của bạn. Tôi đã thử nghiệm chữ ký số cho một tệp văn bản thuần túy và nó hoạt động tốt. Tôi chưa thử nghiệm trong các tập tin nhị phân, bởi vì tôi không chắc chắn nếu chữ ký kỹ thuật số sẽ phá vỡ các tập tin. Tôi sẽ thử phpseclib. –

+0

Tôi có thể sử dụng tệp này cho bất kỳ cách nào không? Nói như một hình ảnh được tải lên? Cảm ơn trước –

+0

Chắc chắn - chỉ cần '$ plaintext = file_get_contents ('filename.ext')' – neubert

1

Tại sao bạn muốn ký kỹ thuật số các tệp khác nhau này?

Không có tiêu chuẩn để thực sự thay đổi tệp văn bản hoặc hình ảnh sao cho các tệp tự chứa một số loại chữ ký số.

Nếu bạn muốn đảm bảo với người dùng rằng tệp không bị giả mạo, bạn có thể cung cấp cho họ một băm MD5 của tệp. Họ có thể sử dụng các công cụ miễn phí để kiểm tra MD5 băm của một tệp mà họ đã tải xuống và so sánh nó với tệp bạn đã cung cấp để đảm bảo tệp của họ không bị thay đổi. Điều này thường được sử dụng cho các gói phần mềm/nhị phân mà bên thứ ba có thể chèn mã độc vào.

Một khả năng khác là bạn muốn người dùng có thể xác minh tính xác thực của một số tệp nhất định. Trong trường hợp này, người dùng có thể muốn chắc chắn rằng một tệp văn bản hoặc hình ảnh đến từ BẠN cụ thể. Chức năng này gần giống như nhận một mã băm MD5 của một tệp với khóa riêng chỉ được biết đến để người dùng cuối có thể so sánh chữ ký tệp với khóa công khai của bạn để đảm bảo tệp không bị giả mạo và đến từ một nguồn cụ thể. PGP (bảo mật khá tốt) cung cấp một khung cho việc này.

Tôi khuyên bạn nên xem các tài liệu giới thiệu PGP để biết thêm thông tin về điều này. http://www.pgpi.org/doc/pgpintro/

8

Re: có thể bất kỳ loại tập tin có chữ ký kỹ thuật số, sử dụng RSA, một giấy chứng nhận, và những thứ đó, hoặc nếu chỉ một số loại tệp nhất định có thể được ký?

A: Có và không. Một mặt, chữ ký số tiêu chuẩn có thể được tính cho bất kỳ gói bit nào, bao gồm tệp văn bản thuần túy, tệp hình ảnh, tệp nhị phân, mọi thứ bạn có thể tưởng tượng.

Nhưng sau đó những câu hỏi trở thành:

  1. Làm thế nào để bạn kết hợp chữ ký số (mà là chính nó chạy nhị phân của bit) với các tập tin dữ liệu? Định dạng tệp dữ liệu có cho phép chắp thêm chữ ký số vào dữ liệu không? Hay bạn cần tự quản lý chữ ký số, có lẽ là một tệp riêng biệt, có thể sử dụng định dạng dữ liệu được phát minh của riêng bạn?

  2. Khi bạn có dữ liệu được ký điện tử và chữ ký, người nhận xác minh dữ liệu và chữ ký của người nhận để đảm bảo người nhận đã ký dữ liệu (nhận dạng) và dữ liệu chưa bị thay đổi kể từ khi được ký (chính trực)?

các định dạng tập tin hỗ trợ chữ ký kỹ thuật số

Ưu điểm lớn của các định dạng tập tin mà bản chất hỗ trợ chữ ký kỹ thuật số là người nhận có thể xác minh chữ ký kỹ thuật số và tính toàn vẹn của tập tin đơn giản bằng cách nhận được hồ sơ có chữ ký và sau đó sử dụng phần mềm xác minh của riêng họ. Người nhận không cần phải cài đặt bất cứ thứ gì từ người gửi.

Có nhiều định dạng tệp có khả năng hỗ trợ chữ ký số. Ví dụ: pdf, Word .doc, .docx. Excel .xls, .xlsx. Có một số standard for signing xml files. Lợi ích của nó là xml có thể được sử dụng như một phong bì cho bất kỳ loại dữ liệu nào. Ví dụ, một tập tin pdf có thể được ký điện tử và gửi cho ai đó. Sau đó, người nhận có thể sử dụng Adobe Reader chuẩn/miễn phí để mở pdf và xác minh (các) chữ ký số của nó.

"Định dạng" cho tệp văn bản thuần túy (tệp chứa ký tự) không hỗ trợ chữ ký số. Vì vậy, bạn cần một phong bì cho văn bản và chữ ký số của nó hoặc đối phó với chữ ký số riêng biệt. Trong mọi trường hợp, người nhận sẽ cần phần mềm của bạn để xác minh dữ liệu. (Hoặc sẽ cần phải viết riêng của mình sau khi bạn cung cấp đặc điểm kỹ thuật cho văn bản thuần tuý và chữ ký.)

S/MIME cung cấp cách tiêu chuẩn ký văn bản kỹ thuật số hoặc dữ liệu được sắp xếp email/mime khác. Xem rfc 5751. Nhưng nó không được sử dụng rộng rãi ngoài các tác nhân email có thể tạo hoặc nhận/xác minh thư email đã ký. Outlook hỗ trợ điều này.

Các vấn đề liên quan