Posso criar uma assinatura pkcs # 7 usando pkcs11-tool?

1

Estou no Ubuntu 17.10 tentando assinar uma string com cartão inteligente. O que eu preciso é de um objeto pkcs7-signedData . Eu posso fazer alguns assinar com o comando abaixo e eu obtenho alguns arquivo binário foo.sig . O que é isso? Como posso fazer isso na assinatura do PKCS # 7?

$ echo foobar | pkcs11-tool --module ./VdsPKCS1164.so --login --pin $PIN \
   --sign --id 5378 --output-file foo.sig
Using slot 0 with a present token (0x1)
Using signature algorithm RSA-PKCS

$ openssl asn1parse -in foo.sig
Error: offset too large

$ openssl asn1parse -inform der -in foo.sig
Error in encoding
139905918145984:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:../crypto/asn1/asn1_lib.c:101:
    
por cprn 15.11.2017 / 17:05

1 resposta

0

Após extensa pesquisa:

O comando

pkcs11-tool --sign produz um resultado binário do algoritmo de hashing selecionado que pode ser usado posteriormente (ao lado de uma biblioteca que gera asn1 ) em um processo tedioso de construir manualmente uma assinatura pkcs7-signedData verificável.

O comando

openssl smime -sign pode ser usado com pkcs11 engine (depois de carregar o mesmo módulo usado por pkcs11-tool ) e construir a estrutura PKCS # 7 para você (sem libs adicionais) processando pkcs11-tool suboptimal para a tarefa .

Exemplo de arquivo de configuração do OpenSSL:

openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
dynamic_path = /usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/pkcs11.so
engine_id = pkcs11
MODULE_PATH = ./VdsPKCS1164.so
PIN = 1234
default_algorithms = ALL
init = 1

Comando para gerar o exemplo de assinatura do PKCS # 7:

$ echo foobar > input.data
$ OPENSSL_CONF=./openssl.cnf openssl smime -sign -engine pkcs11 \
    -md sha1 -binary -in input.data -out foo.sig -outform der \
    -keyform engine -inkey id_5378 -certfile extra.cert.pem -signer cert.pem

O arquivo cert.pem (e quaisquer certificados extras, se necessário) pode ser extraído do cartão de token e convertido em PEM com:

$ pkcs11-tool --module ./VdsPKCS1164.so --login --pin $PIN \
    --read-object --type cert -id 5378 --output-file cert.crt
$ openssl x509 -inform der -in cert.crt -out cert.pem
    
por 20.11.2017 / 18:01