⚠️ Este é um site de tradução não oficial, sem relação com o DCMTK / OFFIS. Para informações oficiais, consulte a página original (https://support.dcmtk.org/docs/dcmsign.html).

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 (para um certificado) openssl crl -hash -noout -in (para uma CRL)

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 (C) 2000-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.