dcmsign: assinatura e verificação de arquivos DICOM
SINOPSE
dcmsign [options] dcmfile-in [dcmfile-out]
DESCRIÇÃO
O utilitário dcmsign lê um arquivo DICOM (dcmfile-in), realiza uma operação de assinatura digital e, caso tenha ocorrido alguma modificação, grava o objeto DICOM em um arquivo de saída (dcmfile-out).
Há suporte a cinco operações de assinatura digital:
- verificação de todas as assinaturas do arquivo DICOM
- criação de uma nova assinatura digital no conjunto de dados principal,
- criação de uma nova assinatura digital em um item de uma sequência inserida no conjunto de dados,
- remoção de uma única assinatura digital do arquivo DICOM, e
- remoção de todas as assinaturas digitais do arquivo DICOM.
PARÂMETROS
dcmfile-in DICOM input filename to be processed ("-" for stdin)
dcmfile-out DICOM output filename ("-" for stdout)
OPÇÕES
opções gerais
-h --help- exibe este texto de ajuda e sai
--version- exibe as informações de versão e sai
--arguments- exibe os argumentos de linha de comando expandidos
-q --quiet- modo silencioso, não exibe avisos nem erros
-v --verbose- modo detalhado, exibe os detalhes do processamento
-d --debug- modo de depuração, exibe informações de depuração
-ll --log-level [l]evel: string constant- (fatal, error, warn, info, debug, trace) usa o nível l para o logger
-lc --log-config [f]ilename: string- usa o arquivo de configuração f para o logger
opções de entrada
+f --read-file- lê o formato de arquivo ou o conjunto de dados (padrão)
+fo --read-file-only- lê apenas o formato de arquivo
-f --read-dataset- lê o conjunto de dados sem as informações meta do arquivo. sintaxe de transferência de entrada:
-t= --read-xfer-auto- usa o reconhecimento de TS (padrão)
-td --read-xfer-detect- ignora a TS especificada no cabeçalho meta do arquivo
-te --read-xfer-little- lê com a TS explicit VR little endian
-tb --read-xfer-big- lê com a TS explicit VR big endian
-ti --read-xfer-implicit- lê com TS implicit VR little endian. tratamento de elementos UN de comprimento definido:
-uc --retain-un- mantém os elementos como UN (padrão)
+uc --convert-un- converte para a VR real, se conhecida
comandos de assinatura
--verify- verifica todas as assinaturas (padrão)
+s --sign [p]rivate key file, [c]ertificate file: string- cria uma assinatura no objeto principal
+si --sign-item [k]eyfile, [c]ertfile, [i]tem location: string- cria uma assinatura em um item de sequência
+t --insert-timestamp ts[q]file, ts[r]file [u]idfile: string- insere um carimbo do tempo certificado obtido da resposta r à consulta de carimbo do tempo q, na assinatura de UID u
+r --remove [s]ignature UID: string- remove uma assinatura
+ra --remove-all- remove todas as assinaturas do conjunto de dados
opções gerais de assinatura
-pem --pem-keys- lê chaves/certificados como arquivo PEM (padrão)
-der --der-keys- lê chaves/certificados como arquivo DER. formato de assinatura:
-fn --format-new- usa o formato de assinatura DICOM correto (padrão)
-fo --format-old- usa o formato de assinatura DCMTK antigo (anterior à 3.5.4), não compatível caso a assinatura inclua dados de pixel comprimidos. Esta opção deve ser usada apenas para verificar assinaturas no formato antigo.
opções de verificação de assinatura (somente com –verify)
+rv --verify-if-present- verifica as assinaturas se estiverem presentes; caso contrário, considera aprovado (padrão)
+rg --require-sig- falha se nenhuma assinatura estiver presente
+rc --require-creator- falha se nenhuma assinatura RSA creator estiver presente
+ru --require-auth- falha se nenhuma assinatura RSA auth estiver presente
+rs --require-sr- falha se nenhuma assinatura RSA SR estiver presente. verificação do carimbo do tempo:
+tv --verify-ts- verifica o carimbo do tempo certificado, se presente (padrão)
-tv --ignore-ts- ignora os carimbos do tempo certificados
+tr --require-ts- falha se nenhum carimbo do tempo certificado estiver presente. autoridade de certificação:
+cf --add-cert-file- [f]ilename: string adiciona um arquivo de certificado confiável à lista de certificados
+uf --add-ucert-file- [f]ilename: string adiciona um arquivo de certificado intermediário não confiável
+cd --add-cert-dir- [d]irectory: string adiciona os certificados de d à lista de certificados
+cr --add-crl-file- [f]ilename: string adiciona um arquivo de lista de revogação de certificados (implica --enable-crl-vfy)
+cl --enable-crl-vfy- ativa a verificação de lista de revogação de certificados
opções de criação de assinatura (somente com –sign ou –sign-item)
+ps --std-passwd- solicita que o usuário digite a senha na entrada padrão (padrão)
+pw --use-passwd [p]assword: string- usa a senha especificada
-pw --null-passwd- usa uma string vazia como senha. perfil de assinatura digital:
-pf --profile-none- não impõe nenhum perfil de assinatura (padrão)
+pb --profile-base- impõe o perfil de assinatura RSA base
+pc --profile-creator- impõe o perfil de assinatura RSA creator
+pa --profile-auth- impõe o perfil de assinatura authorization
+pr --profile-sr- impõe o perfil de assinatura RSA SR
+pv --profile-srv- impõe o perfil de assinatura RSA SR (verificação). algoritmo MAC:
+mr --mac-ripemd160- usa RIPEMD 160 (padrão)
+ms --mac-sha1- usa SHA-1
+mm --mac-md5- usa MD 5
+m2 --mac-sha256- usa SHA-256
+m3 --mac-sha384- usa SHA-384
+m5 --mac-sha512- usa SHA-512. finalidade da assinatura:
+lp --list-purposes- exibe a lista de códigos de finalidade de assinatura e sai
-sp --no-sig-purpose- não adiciona finalidade de assinatura (padrão)
+sp --sig-purpose- [p]urpose code: integer (1..18) adiciona o código de finalidade da assinatura digital p. seleção de tags:
-t --tag- [t]ag: "gggg,eeee" ou nome no dicionário assina somente a tag especificada (esta opção pode ser especificada várias vezes)
-tf --tag-file [f]ilename: string- lê a lista de tags de um arquivo de texto
opções de criação de carimbo do tempo (somente com –sign ou –sign-item)
-ts --timestamp-off- não cria carimbo do tempo (padrão)
+ts --timestamp-file [t]sq-filename, [u]id-filename: string- cria o arquivo de consulta de carimbo do tempo t e o arquivo de uid u. algoritmo MAC do carimbo do tempo (somente com --timestamp-file):
+tm2 --ts-mac-sha256- usa SHA-256 (padrão)
+tm3 --ts-mac-sha384- usa SHA-384
+tm5 --ts-mac-sha512- usa SHA-512
+tmr --ts-mac-ripemd160- usa RIPEMD 160
+tms --ts-mac-sha1- usa SHA-1 (não recomendado)
+tmm --ts-mac-md5- usa MD5 (não recomendado). opções de nonce da consulta de carimbo do tempo (somente com --timestamp-file):
+tn --ts-use-nonce- inclui um nonce aleatório (padrão)
-tn --ts-no-nonce- não inclui nonce. opções de inclusão de certificado no carimbo do tempo (somente com --timestamp-file):
+tc --ts-request-cert- solicita o certificado da TSA no carimbo do tempo (padrão)
-tc --ts-no-cert- não solicita o certificado da TSA no carimbo do tempo. opções de política do carimbo do tempo (somente com --timestamp-file):
-tp --ts-no-policy- não especifica política de ts (padrão)
+tp --ts-policy [p]olicy-OID: string- solicita a política de carimbo do tempo p
opções de saída
+t= --write-xfer-same- grava com a mesma TS da entrada (padrão)
+te --write-xfer-little- grava com a TS explicit VR little endian
+tb --write-xfer-big- grava com a TS explicit VR big endian
+ti --write-xfer-implicit- grava com TS implicit VR little endian. codificação de comprimento em sequências e itens:
+e --length-explicit- grava com comprimentos explícitos (padrão)
-e --length-undefined- grava com comprimentos indefinidos. outras opções de saída:
+d --dump [f]ilename: string- despeja em um arquivo o fluxo de bytes fornecido ao codec MAC (somente com --sign ou --sign-item)
NOTAS
Arquivos e parâmetros
O utilitário dcmsign lê e grava vários arquivos e formatos de arquivo descritos nesta seção.
Espera-se que os certificados de chave pública estejam no formato X.509v3, com codificação PEM ou DER. O utilitário dcmsign atualmente oferece suporte a chaves públicas RSA e DSA, embora apenas as chaves RSA estejam definidas nos perfis de segurança do padrão DICOM.
Espera-se que as chaves privadas estejam em codificação PEM ou DER. O formato PEM é recomendado (e é o padrão), pois permite manter as chaves privadas em forma criptografada. Opções de linha de comando controlam o comportamento do dcmsign ao abrir uma chave PEM criptografada (veja acima). Em geral, não é recomendável especificar a senha de criptografia na linha de comando, pois esta pode ficar visível a outros processos do sistema, por exemplo, por meio de "ps -ef".
Por padrão, o dcmsign cria uma assinatura que abrange todos os elementos de dados do conjunto de dados ou do item. Esse comportamento padrão pode ser substituído especificando explicitamente uma lista de elementos de dados (tags de atributo). Essa lista pode ser lida de um arquivo, especificada na linha de comando, ou ambos (nesse caso, as tags de atributo são combinadas).
Na linha de comando, as tags de atributo são especificadas da seguinte forma:
--tag "gggg,eeee" where gggg and eeee are the hexadecimal group- gggg e eeee são os números de grupo e elemento em hexadecimal
--tag "Name" where 'Name' is a symbolic attribute name from- 'Name' é um nome de atributo simbólico do dicionário DICOM (veja abaixo)
Quando as tags de atributo são lidas de um arquivo com a opção –tag-file, espera-se um arquivo de texto simples. As tags no arquivo são nomes simbólicos do dicionário de dados ou têm o formato (gggg,eeee) (entre parênteses). As tags são separadas por um ou mais caracteres de espaço em branco.
O perfil de assinatura digital selecionado no momento pode especificar tags de atributo adicionais que devem ser incluídas na assinatura, as quais são adicionadas silenciosamente.
A operação –sign-item requer uma string de localização que descreva em qual item de sequência uma assinatura deve ser criada. A string de localização tem o seguinte formato:
SequenceName[index].SequenceName[index].SequenceName[index](...)
em que SequenceName é um nome de atributo simbólico do dicionário de dados ou uma tag numérica no formato (gggg,eeee), e index é um número inteiro decimal sem sinal que indica o número do item, começando em zero para o primeiro item de uma sequência. Por exemplo, a seguinte string de localização
ReferencedSeriesSequence[0].ReferencedImageSequence[1]
faria com que uma assinatura digital fosse criada no segundo item da ReferencedImageSequence (0008,1140), que está localizada no primeiro item da ReferencedSeriesSequence (0008,1115), a qual está localizada no conjunto de dados DICOM principal.
Carimbos do tempo certificados
A partir da versão 3.6.6, o dcmsign oferece suporte a carimbos do tempo certificados conforme a RFC 3161. Por enquanto, a ferramenta não implementa nenhum dos protocolos de rede definidos na RFC 3161 para se comunicar com uma autoridade de carimbo do tempo (TSA), mas pode gravar uma consulta de carimbo do tempo (TSQ) durante a criação da assinatura, e o novo comando –insert-timestamp lê uma resposta de carimbo do tempo (TSR) de um arquivo e a adiciona à assinatura digital DICOM. Como um arquivo DICOM pode conter várias assinaturas, um "arquivo de UID" (que contém o UID da assinatura digital) é usado para identificar a assinatura à qual a TSR deve ser adicionada. A ferramenta dcmsign também realiza diversas verificações de consistência antes de armazenar o carimbo do tempo.
Durante a verificação da assinatura, a presença de um carimbo do tempo certificado é detectada, e o carimbo do tempo também é verificado, a menos que a opção –ignore-ts tenha sido usada. A verificação da assinatura e a verificação do carimbo do tempo usam uma lista de certificados comum para conferir os certificados da assinatura DICOM e do carimbo do tempo. Essa lista pode ser preenchida com as opções –add-cert-file e –add-cert-dir, que adicionam certificados de CA confiáveis, –add-ucert-file, que adiciona um certificado de CA intermediário não confiável, e –add-crl-file, que adiciona uma lista de revogação de certificados.
Diretórios de certificados com hash
Em vez de adicionar manualmente certificados de CA e listas de revogação de certificados (CRLs) usando –add-cert-file e –add-crl-file, o usuário pode configurar um diretório de onde o dcmsign buscará e carregará certificados e CRLs conforme necessário, usando –add-cert-dir.
O diretório deve conter um certificado ou uma CRL por arquivo, em formato PEM, com um nome de arquivo no formato hash.N para um certificado, ou hash.rN para uma CRL. O hash é o valor retornado por
openssl x509 -hash -noout -in
O sufixo .N ou .rN é um número de sequência que começa em zero e é incrementado consecutivamente para cada certificado ou CRL com o mesmo valor de hash. Não há suporte a lacunas nos números de sequência; presume-se que não existam mais objetos com o mesmo hash além do primeiro número ausente na sequência.
As CRLs só são verificadas quando a opção –enable-crl-vfy é especificada. Nesse caso, o dcmsign espera que exista uma CRL para cada CA e faz a verificação da assinatura falhar caso nenhuma CRL seja encontrada para a CA que emitiu o certificado do assinante.
REGISTRO DE LOG
O nível de detalhamento do log das diversas ferramentas de linha de comando e das bibliotecas subjacentes pode ser especificado pelo usuário. Por padrão, apenas erros e avisos são gravados no fluxo de erro padrão. Ao usar a opção –verbose, mensagens informativas, como detalhes do processamento, também são relatadas. A opção –debug pode ser usada para obter mais detalhes sobre a atividade interna, por exemplo, para fins de depuração. Outros níveis de log podem ser selecionados com a opção –log-level. No modo –quiet, apenas erros fatais são relatados. Nesses casos de erro muito graves, o aplicativo normalmente é encerrado. Para mais detalhes sobre os diferentes níveis de log, consulte a documentação do módulo "oflog".
Caso a saída do log deva ser gravada em arquivo (opcionalmente com rotação de arquivo de log), no syslog (Unix) ou no log de eventos (Windows), pode-se usar a opção –log-config. Esse arquivo de configuração também permite direcionar apenas determinadas mensagens para um fluxo de saída específico e filtrar certas mensagens com base no módulo ou aplicativo em que são geradas. Um arquivo de configuração de exemplo é fornecido em < etcdir>/logger.cfg.
LINHA DE COMANDO
Todas as ferramentas de linha de comando usam a seguinte notação para os parâmetros: colchetes delimitam valores opcionais (0-1), reticências no final indicam que múltiplos valores são permitidos (1-n), e a combinação dos dois significa de 0 a n valores.
As opções de linha de comando se distinguem dos parâmetros por um sinal '+' ou '-' à frente. Normalmente, a ordem e a posição das opções de linha de comando são arbitrárias (ou seja, podem aparecer em qualquer lugar). No entanto, se as opções forem mutuamente exclusivas, é usada a ocorrência mais à direita. Esse comportamento está em conformidade com as regras de avaliação padrão dos shells Unix comuns.
Além disso, um ou mais arquivos de comando podem ser especificados usando um sinal '@' como prefixo do nome do arquivo (por exemplo, @command.txt). Esse argumento de comando é substituído pelo conteúdo do arquivo de texto correspondente (múltiplos espaços em branco são tratados como um único separador, a menos que apareçam entre duas aspas) antes de qualquer avaliação posterior. Observe que um arquivo de comando não pode conter outro arquivo de comando. Essa abordagem simples, mas eficaz, permite agrupar combinações comuns de opções/parâmetros e evita linhas de comando longas e confusas (um exemplo é fornecido no arquivo < datadir>/dumppat.txt).
CÓDIGOS DE SAÍDA
O utilitário dcmsign usa os seguintes códigos de saída ao ser encerrado. Isso permite que o usuário verifique o motivo pelo qual o aplicativo foi encerrado.
geral
EXITCODE_NO_ERROR 0
EXITCODE_COMMANDLINE_SYNTAX_ERROR 1
EXITCODE_NOOPENSSL 5
erros de arquivo de entrada
EXITCODE_CANNOT_READ_INPUT_FILE 20
EXITCODE_NO_INPUT_FILES 21
EXITCODE_CANNOT_READ_TAG_FILE 30
EXITCODE_CANNOT_READ_TSQ_FILE 31
EXITCODE_CANNOT_READ_TSR_FILE 32
EXITCODE_CANNOT_READ_UID_FILE 33
erros de arquivo de saída
EXITCODE_CANNOT_WRITE_OUTPUT_FILE 40
EXITCODE_CANNOT_WRITE_SUPPORT_FILE 46
erros de processamento
EXITCODE_CANNOT_ACCESS_SIGNATURE 80
EXITCODE_CANNOT_ACCESS_TS 81
EXITCODE_CANNOT_INSERT_TS 82
EXITCODE_SIGNATURE_REMOVAL_FAILED 83
EXITCODE_SIGNATURE_UID_NOT_FOUND 84
EXITCODE_SIGNATURE_CREATION_FAILED 85
EXITCODE_SYNTAX_ERROR_IN_TAG_FILE 86
EXITCODE_TS_CONSISTENCY_CHECK_FAILED 87
erros específicos do aplicativo
EXITCODE_NO_SIGNATURES_PRESENT 100
EXITCODE_SIGNATURE_VERIFICATION_FAILED 101
EXITCODE_SIGNATURE_VERIFICATION_POLICY 102
AMBIENTE
O utilitário dcmsign tentará carregar os dicionários de dados DICOM especificados na variável de ambiente DCMDICTPATH. Por padrão, ou seja, se a variável de ambiente DCMDICTPATH não estiver definida, o arquivo < datadir>/dicom.dic será carregado, a menos que o dicionário esteja embutido no aplicativo (padrão para Windows).
É preferível manter o comportamento padrão e usar a variável de ambiente DCMDICTPATH apenas quando dicionários de dados alternativos forem necessários. A variável de ambiente DCMDICTPATH tem o mesmo formato da variável PATH dos shells Unix, em que dois-pontos (":") separam as entradas. Em sistemas Windows, um ponto e vírgula (";") é usado como separador. O código do dicionário de dados tenta carregar cada arquivo especificado na variável de ambiente DCMDICTPATH. Ocorre um erro se nenhum dicionário de dados puder ser carregado.
COPYRIGHT
Copyright (C) 2000-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.