2012-07-18 38 views
5

Tôi muốn xác minh chữ ký RSA. Tôi có dữ liệu để xác minh, chữ ký và khóa công khai dưới dạng mô-đun và số mũ. Tôi muốn thực hiện xác minh bằng openssl. Có thể không? Tôi biết tôi có thể sử dụng openssl rsautl -verify -in sig -inkey key.pem nhưng tôi không biết làm thế nào (sử dụng openssl) để tạo ra một khóa công khai có chỉ là mô đun và số mũ.Tạo khóa công khai rsa từ mô đun và số mũ

Có thể các ý tưởng khác về cách kiểm tra chữ ký này (ngoại trừ viết một số chương trình)?

+1

" ... ngoại trừ một số văn bản chương trình ... "tốt nếu bạn đọc [FAQ] (http://stackoverflow.com/faq) bạn sẽ biết stackoverflow là gì. –

+0

GregS: Không phải như thế :) Tôi có chương trình thực hiện nó nhưng khách hàng của tôi tuyên bố rằng nó không hoạt động đúng. Vì vậy, để chứng minh anh ta rằng anh ấy sai tôi muốn cho thấy rằng ví dụ openssl (mà anh ta có thể tin tưởng) hoạt động giống như chương trình của tôi. – emstol

+0

Bạn có muốn cấu trúc RSA * từ mô đun và số mũ đã cho không? – doptimusprime

Trả lời

-1

Kiểm tra các trang người đàn ông nên cung cấp cho bạn dưới đây

# generate private key 
openssl genrsa > key.priv 

# use it to sign something 
echo "Dirk should be given $10" | openssl rsautl -inkey key.priv -sign > msg.sig 

# create a pub key (modules, exp) from the private key 
openssl rsa -pubout <key.priv> key.pub 

# use that to verify the signature. 
openssl rsautl -in msg.sig -verify -inkey key.pub -pubin 

tất cả điều này giả sử bạn muốn phím thô. Nếu tôi hiểu bình luận của bạn dưới đây đúng - có vẻ như bạn không có module/exp ở định dạng bình thường. Vì vậy, trước tiên bạn sẽ phải gói nó trong ASN.1 để sử dụng nó với các công cụ thông thường.

Bạn sẽ phải viết một số mã c/java/etc cho việc này. Một cách dễ dàng để làm điều này là sử dụng thư viện openssl; và điền vào cấu trúc RSA *.

+1

Tôi không thấy cách giải quyết vấn đề của mình. Tôi chỉ có hai con số: một mô đun và một số mũ.Và tôi muốn tạo một tệp key.pub chứa khóa công khai được tạo dựa trên những con số đó. Không có gì khác. Tôi đã hỏi câu hỏi này từ lâu rồi và vẫn không biết cách làm thế. – emstol

+0

Giả sử bạn không có các mô-đun và số mũ không có trong bao bì BER bình thường - bạn sẽ phải viết một số bao bì ASN.1 để đóng gói như vậy. –

4

Để tạo khóa đệm RSA ở định dạng PEM được sử dụng với openssl, bạn có thể làm theo các bước sau.

Tạo một file định nghĩa ASN1

Sửa đổi các mẫu sau để bao gồm mô đun của bạn và số mũ

# Start with a SEQUENCE 
asn1=SEQUENCE:pubkeyinfo 

# pubkeyinfo contains an algorithm identifier and the public key wrapped 
# in a BIT STRING 
[pubkeyinfo] 
algorithm=SEQUENCE:rsa_alg 
pubkey=BITWRAP,SEQUENCE:rsapubkey 

# algorithm ID for RSA is just an OID and a NULL 
[rsa_alg] 
algorithm=OID:rsaEncryption 
parameter=NULL 

# Actual public key: modulus and exponent 
[rsapubkey] 
n=INTEGER:0x%%MODULUS%% 

e=INTEGER:0x%%EXPONENT%% 

Thay vì chỉnh sửa, bạn cũng có thể muốn kịch bản này bằng cách sử dụng sed

sed -i "s/%%MODULUS%%/$(xxd -ps -c 256 mymodulus.bin)/" def.asn1 

Lưu ý rằng -c 256 phải là được chọn theo độ dài khóa bằng byte.

Bạn có thể sử dụng lệnh tương tự cho số mũ.

Tạo khóa RSA của bạn

Sử dụng lệnh openssl sau. Điều này sẽ cung cấp cho bạn một khóa RSA được mã hóa DER.

openssl asn1parse -genconf def.asn1 -out pubkey.der -noout 

Sau đó chuyển đổi nó thành một PEM chính

openssl rsa -in pubkey.der -inform der -pubin -out pubkey.pem 

Xác minh bằng bạn chìa khóa

Bạn có thể sử dụng một trong hai openssl dgst -verify hoặc openssl rsautl -verify

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