⚠️ Ceci est un site de traduction non officiel, sans lien avec DCMTK / OFFIS. Pour des informations faisant autorité, consultez la page originale (https://support.dcmtk.org/docs/dcmsign.html).

dcmsign: signature et vérification de fichiers DICOM

SYNOPSIS

dcmsign [options] dcmfile-in [dcmfile-out]

DESCRIPTION

L'utilitaire dcmsign lit un fichier DICOM (dcmfile-in), effectue une opération de signature numérique et, si une modification a eu lieu, écrit l'objet DICOM dans un fichier de sortie (dcmfile-out).

Cinq opérations de signature numérique sont prises en charge :

  • vérification de toutes les signatures du fichier DICOM
  • création d'une nouvelle signature numérique dans le jeu de données principal,
  • création d'une nouvelle signature numérique dans un item d'une séquence intégrée au jeu de données,
  • suppression d'une seule signature numérique du fichier DICOM, et
  • suppression de toutes les signatures numériques du fichier DICOM.

PARAMÈTRES

dcmfile-in   DICOM input filename to be processed ("-" for stdin)

dcmfile-out  DICOM output filename ("-" for stdout)

OPTIONS

options générales

-h --help
affiche cette aide et quitte
--version
affiche les informations de version et quitte
--arguments
affiche les arguments de ligne de commande développés
-q --quiet
mode silencieux, n'affiche ni avertissements ni erreurs
-v --verbose
mode détaillé, affiche les détails du traitement
-d --debug
mode débogage, affiche les informations de débogage
-ll --log-level [l]evel: string constant
(fatal, error, warn, info, debug, trace) utilise le niveau l pour la journalisation
-lc --log-config [f]ilename: string
utilise le fichier de configuration f pour la journalisation

options d'entrée

+f --read-file
lit le format de fichier ou le jeu de données (par défaut)
+fo --read-file-only
lit uniquement le format de fichier
-f --read-dataset
lit le jeu de données sans les informations méta du fichier. syntaxe de transfert d'entrée :
-t= --read-xfer-auto
utilise la reconnaissance de la TS (par défaut)
-td --read-xfer-detect
ignore la TS spécifiée dans l'en-tête méta du fichier
-te --read-xfer-little
lit avec la TS explicit VR little endian
-tb --read-xfer-big
lit avec la TS explicit VR big endian
-ti --read-xfer-implicit
lit avec la TS implicit VR little endian. traitement des éléments UN de longueur définie :
-uc --retain-un
conserve les éléments en tant qu'UN (par défaut)
+uc --convert-un
convertit vers la VR réelle si elle est connue

commandes de signature

--verify
vérifie toutes les signatures (par défaut)
+s --sign [p]rivate key file, [c]ertificate file: string
crée une signature dans l'objet principal
+si --sign-item [k]eyfile, [c]ertfile, [i]tem location: string
crée une signature dans un item de séquence
+t --insert-timestamp ts[q]file, ts[r]file [u]idfile: string
insère un horodatage certifié tiré de la réponse d'horodatage r à la requête d'horodatage q à la signature d'UID u
+r --remove [s]ignature UID: string
supprime une signature
+ra --remove-all
supprime toutes les signatures du jeu de données

options générales de signature

-pem --pem-keys
lit les clés/certificats comme fichier PEM (par défaut)
-der --der-keys
lit les clés/certificats comme fichier DER. format de signature :
-fn --format-new
utilise le format de signature DICOM correct (par défaut)
-fo --format-old
utilise l'ancien format de signature DCMTK (antérieur à 3.5.4), non conforme si la signature inclut des données de pixels compressées. Cette option ne devrait être utilisée que pour vérifier des signatures dans l'ancien format.

options de vérification de signature (uniquement avec –verify)

+rv --verify-if-present
vérifie les signatures si elles sont présentes, sinon passe (par défaut)
+rg --require-sig
échoue si aucune signature n'est présente
+rc --require-creator
échoue si aucune signature RSA creator n'est présente
+ru --require-auth
échoue si aucune signature RSA auth n'est présente
+rs --require-sr
échoue si aucune signature RSA SR n'est présente. vérification de l'horodatage :
+tv --verify-ts
vérifie l'horodatage certifié s'il est présent (par défaut)
-tv --ignore-ts
ignore les horodatages certifiés
+tr --require-ts
échoue si aucun horodatage certifié n'est présent. autorité de certification :
+cf --add-cert-file
[f]ilename: string ajoute un fichier de certificat de confiance au magasin de certificats
+uf --add-ucert-file
[f]ilename: string ajoute un fichier de certificat intermédiaire non fiable
+cd --add-cert-dir
[d]irectory: string ajoute les certificats de d au magasin de certificats
+cr --add-crl-file
[f]ilename: string ajoute un fichier de liste de révocation de certificats (implique --enable-crl-vfy)
+cl --enable-crl-vfy
active la vérification de liste de révocation de certificats

options de création de signature (uniquement avec –sign ou –sign-item)

+ps --std-passwd
invite l'utilisateur à saisir le mot de passe sur l'entrée standard (par défaut)
+pw --use-passwd [p]assword: string
utilise le mot de passe spécifié
-pw --null-passwd
utilise une chaîne vide comme mot de passe. profil de signature numérique :
-pf --profile-none
n'impose aucun profil de signature (par défaut)
+pb --profile-base
impose le profil de signature RSA base
+pc --profile-creator
impose le profil de signature RSA creator
+pa --profile-auth
impose le profil de signature authorization
+pr --profile-sr
impose le profil de signature RSA SR
+pv --profile-srv
impose le profil de signature RSA SR (vérification). algorithme MAC :
+mr --mac-ripemd160
utilise RIPEMD 160 (par défaut)
+ms --mac-sha1
utilise SHA-1
+mm --mac-md5
utilise MD 5
+m2 --mac-sha256
utilise SHA-256
+m3 --mac-sha384
utilise SHA-384
+m5 --mac-sha512
utilise SHA-512. objectif de la signature :
+lp --list-purposes
affiche la liste des codes d'objectif de signature et quitte
-sp --no-sig-purpose
n'ajoute pas d'objectif de signature (par défaut)
+sp --sig-purpose
[p]urpose code: integer (1..18) ajoute le code d'objectif de signature numérique p. sélection de tags :
-t --tag
[t]ag: "gggg,eeee" or dictionary name signe uniquement le tag spécifié (cette option peut être indiquée plusieurs fois)
-tf --tag-file [f]ilename: string
lit la liste des tags depuis un fichier texte

options de création d'horodatage (uniquement avec –sign ou –sign-item)

-ts --timestamp-off
ne crée pas d'horodatage (par défaut)
+ts --timestamp-file [t]sq-filename, [u]id-filename: string
crée le fichier de requête d'horodatage t et le fichier d'uid u. algorithme MAC de l'horodatage (uniquement avec --timestamp-file) :
+tm2 --ts-mac-sha256
utilise SHA-256 (par défaut)
+tm3 --ts-mac-sha384
utilise SHA-384
+tm5 --ts-mac-sha512
utilise SHA-512
+tmr --ts-mac-ripemd160
utilise RIPEMD 160
+tms --ts-mac-sha1
utilise SHA-1 (non recommandé)
+tmm --ts-mac-md5
utilise MD5 (non recommandé). options de nonce de la requête d'horodatage (uniquement avec --timestamp-file) :
+tn --ts-use-nonce
inclut un nonce aléatoire (par défaut)
-tn --ts-no-nonce
n'inclut pas de nonce. options d'inclusion du certificat dans l'horodatage (uniquement avec --timestamp-file) :
+tc --ts-request-cert
demande le certificat TSA dans l'horodatage (par défaut)
-tc --ts-no-cert
ne demande pas le certificat TSA dans l'horodatage. options de politique d'horodatage (uniquement avec --timestamp-file) :
-tp --ts-no-policy
ne spécifie pas de politique ts (par défaut)
+tp --ts-policy [p]olicy-OID: string
demande la politique d'horodatage p

options de sortie

+t= --write-xfer-same
écrit avec la même TS que l'entrée (par défaut)
+te --write-xfer-little
écrit avec la TS explicit VR little endian
+tb --write-xfer-big
écrit avec la TS explicit VR big endian
+ti --write-xfer-implicit
écrit avec la TS implicit VR little endian. encodage de la longueur dans les séquences et les items :
+e --length-explicit
écrit avec des longueurs explicites (par défaut)
-e --length-undefined
écrit avec des longueurs non définies. autres options de sortie :
+d --dump [f]ilename: string
vide le flux d'octets transmis au codec MAC dans un fichier (uniquement avec --sign ou --sign-item)

NOTES

Fichiers et paramètres

L'utilitaire dcmsign lit et écrit un certain nombre de fichiers et de formats de fichiers décrits dans cette section.

Les certificats à clé publique sont attendus au format X.509v3, avec un encodage PEM ou DER. L'utilitaire dcmsign prend actuellement en charge les clés publiques RSA et DSA, bien que seules les clés RSA soient définies dans les profils de sécurité de la norme DICOM.

Les clés privées sont attendues au format PEM ou DER. PEM est recommandé (et par défaut) car il permet de conserver les clés privées sous forme chiffrée. Des options de ligne de commande contrôlent le comportement de dcmsign lors de l'ouverture d'une clé PEM chiffrée (voir ci-dessus). En général, il n'est pas recommandé de spécifier le mot de passe de chiffrement sur la ligne de commande, car celle-ci peut être visible depuis d'autres processus du système, par exemple via "ps -ef".

Par défaut, dcmsign crée une signature couvrant tous les éléments de données du jeu de données ou de l'item. Ce comportement par défaut peut être remplacé en spécifiant explicitement une liste d'éléments de données (tags d'attribut). Cette liste peut être lue depuis un fichier, spécifiée sur la ligne de commande, ou les deux (auquel cas les tags d'attribut sont combinés).

Sur la ligne de commande, les tags d'attribut sont spécifiés ainsi :

--tag "gggg,eeee" where gggg and eeee are the hexadecimal group
gggg et eeee sont les numéros de groupe et d'élément en hexadécimal
--tag "Name" where 'Name' is a symbolic attribute name from
'Name' est un nom d'attribut symbolique du dictionnaire DICOM (voir ci-dessous)

Lorsque les tags d'attribut sont lus depuis un fichier avec l'option –tag-file, un fichier texte brut est attendu. Les tags qu'il contient sont soit des noms symboliques du dictionnaire de données, soit au format (gggg,eeee) (entre parenthèses). Les tags sont séparés par un ou plusieurs caractères d'espacement.

Le profil de signature numérique actuellement sélectionné peut spécifier des tags d'attribut supplémentaires devant être inclus dans la signature, qui seront ajoutés silencieusement.

L'opération –sign-item requiert une chaîne de localisation décrivant dans quel item de séquence une signature doit être créée. Le format de la chaîne de localisation est le suivant :

SequenceName[index].SequenceName[index].SequenceName[index](...)

où SequenceName est soit un nom d'attribut symbolique du dictionnaire de données, soit un tag numérique au format (gggg,eeee), et index est un entier décimal non signé représentant le numéro de l'item, en commençant à zéro pour le premier item d'une séquence. Par exemple, la chaîne de localisation suivante

ReferencedSeriesSequence[0].ReferencedImageSequence[1]

provoquerait la création d'une signature numérique dans le deuxième item de la ReferencedImageSequence (0008,1140), qui se trouve dans le premier item de la ReferencedSeriesSequence (0008,1115), elle-même située dans le jeu de données DICOM principal.

Horodatages certifiés

Depuis la version 3.6.6, dcmsign prend en charge les horodatages certifiés conformément à la RFC 3161. Pour l'instant, l'outil n'implémente aucun des protocoles réseau définis dans la RFC 3161 pour communiquer avec une autorité d'horodatage (TSA), mais il peut écrire une requête d'horodatage (TSQ) lors de la création de la signature, et la nouvelle commande –insert-timestamp lit une réponse d'horodatage (TSR) depuis un fichier et l'ajoute à la signature numérique DICOM. Comme un fichier DICOM peut contenir plusieurs signatures, un "fichier UID" (qui contient l'UID de la signature numérique) est utilisé pour identifier la signature à laquelle la TSR doit être ajoutée. dcmsign effectue également divers contrôles de cohérence avant d'enregistrer l'horodatage.

Lors de la vérification de signature, la présence d'un horodatage certifié est détectée et l'horodatage est également vérifié, sauf si l'option –ignore-ts a été utilisée. La vérification de signature et la vérification d'horodatage utilisent un magasin de certificats commun pour contrôler les certificats de la signature DICOM et de l'horodatage. Ce magasin peut être alimenté avec les options –add-cert-file et –add-cert-dir, qui ajoutent toutes deux des certificats CA de confiance, –add-ucert-file, qui ajoute un certificat CA intermédiaire non fiable, et –add-crl-file, qui ajoute une liste de révocation de certificats.

Répertoires de certificats hachés

Plutôt que d'ajouter manuellement des certificats CA et des listes de révocation de certificats (CRL) avec –add-cert-file et –add-crl-file, l'utilisateur peut mettre en place un répertoire dans lequel dcmsign recherchera et chargera les certificats et CRL au besoin, via –add-cert-dir.

Ce répertoire doit contenir un certificat ou une CRL par fichier au format PEM, avec un nom de fichier de la forme hash.N pour un certificat, ou hash.rN pour une CRL. Le hash est la valeur renvoyée par

openssl x509 -hash -noout -in (pour un certificat) openssl crl -hash -noout -in (pour une CRL)

Le suffixe .N ou .rN est un numéro de séquence qui commence à zéro et s'incrémente consécutivement pour chaque certificat ou CRL ayant la même valeur de hash. Les discontinuités dans la numérotation ne sont pas prises en charge ; il est supposé qu'il n'existe plus d'objets avec le même hash au-delà du premier numéro manquant de la séquence.

Les CRL ne sont vérifiées que si l'option –enable-crl-vfy est spécifiée. Dans ce cas, dcmsign s'attend à trouver une CRL pour chaque CA et fait échouer la vérification de signature si aucune CRL n'est trouvée pour la CA ayant délivré le certificat du signataire.

JOURNALISATION

Le niveau de détail de la journalisation des différents outils en ligne de commande et des bibliothèques sous-jacentes peut être spécifié par l'utilisateur. Par défaut, seules les erreurs et les avertissements sont écrits dans le flux d'erreur standard. L'option –verbose permet également de signaler des messages d'information tels que les détails du traitement. L'option –debug permet d'obtenir plus de détails sur l'activité interne, par exemple à des fins de débogage. L'option –log-level permet de sélectionner d'autres niveaux de journalisation. En mode –quiet, seules les erreurs fatales sont signalées. Dans de tels cas d'erreur très graves, l'application se termine généralement. Pour plus de détails sur les différents niveaux de journalisation, consultez la documentation du module "oflog".

Si la sortie de la journalisation doit être écrite dans un fichier (éventuellement avec rotation des fichiers journaux), vers syslog (Unix) ou le journal des événements (Windows), l'option –log-config peut être utilisée. Ce fichier de configuration permet également de diriger uniquement certains messages vers un flux de sortie particulier et de filtrer certains messages en fonction du module ou de l'application qui les génère. Un exemple de fichier de configuration est fourni dans < etcdir>/logger.cfg.

LIGNE DE COMMANDE

Tous les outils en ligne de commande utilisent la notation suivante pour les paramètres : les crochets entourent les valeurs facultatives (0-1), trois points de suspension à la fin indiquent que plusieurs valeurs sont autorisées (1-n), et la combinaison des deux signifie de 0 à n valeurs.

Les options de la ligne de commande se distinguent des paramètres par un signe '+' ou '-' en tête. En général, l'ordre et la position des options de la ligne de commande sont arbitraires (c'est-à-dire qu'elles peuvent apparaître n'importe où). Toutefois, si des options s'excluent mutuellement, c'est la dernière occurrence, la plus à droite, qui est utilisée. Ce comportement est conforme aux règles d'évaluation standard des shells Unix courants.

De plus, un ou plusieurs fichiers de commandes peuvent être spécifiés en utilisant un signe '@' comme préfixe du nom de fichier (par exemple @command.txt). Un tel argument de commande est remplacé par le contenu du fichier texte correspondant (les espaces multiples sont traités comme un séparateur unique, sauf s'ils apparaissent entre deux guillemets) avant toute évaluation ultérieure. Notez qu'un fichier de commandes ne peut pas contenir un autre fichier de commandes. Cette approche simple mais efficace permet de regrouper des combinaisons courantes d'options/paramètres et évite des lignes de commande longues et peu lisibles (un exemple est fourni dans le fichier < datadir>/dumppat.txt).

CODES DE SORTIE

L'utilitaire dcmsign utilise les codes de sortie suivants lors de sa terminaison. Cela permet à l'utilisateur de vérifier la raison pour laquelle l'application s'est terminée.

général

EXITCODE_NO_ERROR                         0
EXITCODE_COMMANDLINE_SYNTAX_ERROR         1
EXITCODE_NOOPENSSL                        5

erreurs de fichier d'entrée

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

erreurs de fichier de sortie

EXITCODE_CANNOT_WRITE_OUTPUT_FILE        40
EXITCODE_CANNOT_WRITE_SUPPORT_FILE       46

erreurs de traitement

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

erreurs spécifiques à l'application

EXITCODE_NO_SIGNATURES_PRESENT           100
EXITCODE_SIGNATURE_VERIFICATION_FAILED   101
EXITCODE_SIGNATURE_VERIFICATION_POLICY   102

ENVIRONNEMENT

L'utilitaire dcmsign tente de charger les dictionnaires de données DICOM spécifiés dans la variable d'environnement DCMDICTPATH. Par défaut, c'est-à-dire si la variable d'environnement DCMDICTPATH n'est pas définie, le fichier < datadir>/dicom.dic est chargé, sauf si le dictionnaire est intégré à l'application (par défaut sous Windows).

Il est préférable de conserver le comportement par défaut et de n'utiliser la variable d'environnement DCMDICTPATH que lorsque des dictionnaires de données alternatifs sont nécessaires. La variable d'environnement DCMDICTPATH a le même format que la variable PATH des shells Unix, en ce sens que les deux-points (":") séparent les entrées. Sur les systèmes Windows, le point-virgule (";") est utilisé comme séparateur. Le code du dictionnaire de données tente de charger chaque fichier spécifié dans la variable d'environnement DCMDICTPATH. C'est une erreur si aucun dictionnaire de données ne peut être chargé.

Copyright (C) 2000-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.