dcmsign(1) OFFIS DCMTK dcmsign(1)

dcmsign - امضا و اعتبارسنجی فایل‌های دایکام (DICOM)

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

ابزار dcmsign یک فایل دایکام (dcmfile-in) را می‌خواند، عملیات امضای دیجیتال را روی آن انجام می‌دهد و در صورت اعمال هرگونه تغییر، شیء دایکام را در یک فایل خروجی (dcmfile-out) می‌نویسد.

پنج عملیات امضای دیجیتال پشتیبانی می‌شوند:

  • اعتبارسنجی تمام امضاهای موجود در فایل دایکام
  • ایجاد یک امضای دیجیتال جدید در مجموعه داده اصلی
  • ایجاد یک امضای دیجیتال جدید در یک آیتم از توالی تعبیه‌شده در مجموعه داده
  • حذف یک امضای دیجیتال منفرد از فایل دایکام
  • حذف تمام امضاهای دیجیتال از فایل دایکام.

dcmfile-in   نام فایل ورودی دایکام برای پردازش ("-" برای ورودی استاندارد)
dcmfile-out  نام فایل خروجی دایکام ("-" برای خروجی استاندارد)

-h    --help
        چاپ این راهنما و خروج
      --version
        چاپ اطلاعات نسخه و خروج
      --arguments
        چاپ آرگومان‌های بسط‌یافته خط فرمان
-q    --quiet
        حالت بی‌صدا، عدم چاپ هشدارها و خطاها
-v    --verbose
        حالت پرگو، چاپ جزئیات پردازش
-d    --debug
        حالت اشکال‌زدایی، چاپ اطلاعات دیباگ
-ll   --log-level  [l]evel: string constant
        (fatal, error, warn, info, debug, trace)
        استفاده از سطح l برای ثبت‌کننده وقایع
-lc   --log-config  [f]ilename: string
        استفاده از فایل پیکربندی f برای ثبت‌کننده وقایع

قالب فایل ورودی:
  +f    --read-file
          خواندن قالب فایل یا مجموعه داده (پیش‌فرض)
  +fo   --read-file-only
          فقط خواندن قالب فایل
  -f    --read-dataset
          خواندن مجموعه داده بدون اطلاعات متای فایل
نحو انتقال ورودی:
  -t=   --read-xfer-auto
          تشخیص خودکار نحو انتقال (پیش‌فرض)
  -td   --read-xfer-detect
          نادیده گرفتن نحو انتقال تعیین‌شده در هدر متای فایل
  -te   --read-xfer-little
          خواندن با نحو انتقال صریح VR و little endian
  -tb   --read-xfer-big
          خواندن با نحو انتقال صریح VR و big endian
  -ti   --read-xfer-implicit
          خواندن با نحو انتقال ضمنی VR و little endian
مدیریت عناصر UN با طول مشخص:
  -uc   --retain-un
          نگه‌داشتن عناصر به عنوان UN (پیش‌فرض)
  +uc   --convert-un
          تبدیل به VR واقعی در صورت شناخته‌شده بودن

      --verify
        اعتبارسنجی تمام امضاها (پیش‌فرض)
+s    --sign  [p]rivate key file, [c]ertificate file: string
        ایجاد امضا در شیء اصلی
+si   --sign-item  [k]eyfile, [c]ertfile, [i]tem location: string
        ایجاد امضا در آیتم توالی
+t    --insert-timestamp  ts[q]file, ts[r]file [u]idfile: string
        درج برچسب زمانی تأییدشده از پاسخ r
        به پرس‌وجوی برچسب زمانی q با UID امضای u
+r    --remove  [s]ignature UID: string
        حذف امضا
+ra   --remove-all
        حذف تمام امضاها از مجموعه داده

قالب فایل کلید و گواهی:
  -pem  --pem-keys
          خواندن کلیدها/گواهی‌ها با قالب PEM (پیش‌فرض)
  -der  --der-keys
          خواندن کلیدها/گواهی‌ها با قالب DER
قالب امضا:
  -fn   --format-new
          استفاده از قالب صحیح امضای دایکام (پیش‌فرض)
  -fo   --format-old
          استفاده از قالب قدیمی امضای DCMTK (قبل از 3.5.4)؛ در صورتی که امضا
          شامل داده‌های پیکسل فشرده‌شده باشد، غیراستاندارد است. این گزینه
          تنها باید برای اعتبارسنجی امضاهای قالب قدیمی استفاده شود.

اعتبارسنجی امضا:
  +rv   --verify-if-present
          اعتبارسنجی امضاها در صورت وجود، و قبولی در غیر این صورت
          (پیش‌فرض)
  +rg   --require-sig
          شکست عملیات در صورت عدم وجود هیچ‌گونه امضا
  +rc   --require-creator
          شکست عملیات در صورت عدم وجود امضای RSA ایجادکننده
  +ru   --require-auth
          شکست عملیات در صورت عدم وجود امضای RSA احراز هویت
  +rs   --require-sr
          شکست عملیات در صورت عدم وجود امضای RSA گزارش ساختاریافته (SR)
اعتبارسنجی برچسب زمانی:
  +tv   --verify-ts
          اعتبارسنجی برچسب زمانی تأییدشده در صورت وجود (پیش‌فرض)
  -tv   --ignore-ts
          نادیده گرفتن برچسب‌های زمانی تأییدشده
  +tr   --require-ts
          شکست عملیات در صورت عدم وجود برچسب زمانی تأییدشده
مرجع صدور گواهی (CA):
  +cf   --add-cert-file  [f]ilename: string
          افزودن فایل گواهی معتبر به مخزن گواهی‌ها
  +uf   --add-ucert-file  [f]ilename: string
          افزودن فایل گواهی میانی نامعتبر
  +cd   --add-cert-dir  [d]irectory: string
          افزودن گواهی‌های موجود در d به مخزن گواهی‌ها
  +cr   --add-crl-file  [f]ilename: string
          افزودن فایل فهرست ابطال گواهی (مستلزم --enable-crl-vfy)
  +cl   --enable-crl-vfy
          فعال‌سازی بررسی فهرست ابطال گواهی (CRL)

رمز عبور کلید خصوصی:
  +ps   --std-passwd
          درخواست رمز عبور از کاربر در ورودی استاندارد (پیش‌فرض)
  +pw   --use-passwd  [p]assword: string
          استفاده از رمز عبور مشخص‌شده
  -pw   --null-passwd
          استفاده از رشته خالی به عنوان رمز عبور
پروفایل امضای دیجیتال:
  -pf   --profile-none
          عدم اعمال هیچ‌گونه پروفایل امضا (پیش‌فرض)
  +pb   --profile-base
          اعمال پروفایل پایه امضای RSA
  +pc   --profile-creator
          اعمال پروفایل امضای RSA ایجادکننده
  +pa   --profile-auth
          اعمال پروفایل امضای احراز هویت
  +pr   --profile-sr
          اعمال پروفایل امضای RSA گزارش ساختاریافته (SR)
  +pv   --profile-srv
          اعمال پروفایل امضای RSA گزارش ساختاریافته (اعتبارسنجی)
الگوریتم MAC:
  +mr   --mac-ripemd160
          استفاده از RIPEMD 160 (پیش‌فرض)
  +ms   --mac-sha1
          استفاده از SHA-1
  +mm   --mac-md5
          استفاده از MD5
  +m2   --mac-sha256
          استفاده از SHA-256
  +m3   --mac-sha384
          استفاده از SHA-384
  +m5   --mac-sha512
          استفاده از SHA-512
هدف امضا:
  +lp   --list-purposes
          نمایش لیست کدهای هدف امضا و خروج
  -sp   --no-sig-purpose
          عدم افزودن هدف امضا (پیش‌فرض)
  +sp   --sig-purpose  [p]urpose code: integer (1..18)
          افزودن کد هدف امضای دیجیتال p
انتخاب تگ:
  -t    --tag  [t]ag: "gggg,eeee" یا نام دیکشنری
          امضای تنها تگ تعیین‌شده
          (این گزینه می‌تواند چندین بار تکرار شود)
  -tf   --tag-file  [f]ilename: string
          خواندن لیست تگ‌ها از فایل متنی

ایجاد برچسب زمانی:
  -ts   --timestamp-off
          عدم ایجاد برچسب زمانی (پیش‌فرض)
  +ts   --timestamp-file  [t]sq-filename, [u]id-filename: string
          ایجاد فایل پرس‌وجوی برچسب زمانی t و فایل uid با نام u
الگوریتم MAC برچسب زمانی (فقط همراه با --timestamp-file):
  +tm2  --ts-mac-sha256
          استفاده از SHA-256 (پیش‌فرض)
  +tm3  --ts-mac-sha384
          استفاده از SHA-384
  +tm5  --ts-mac-sha512
          استفاده از SHA-512
  +tmr  --ts-mac-ripemd160
          استفاده از RIPEMD 160
  +tms  --ts-mac-sha1
          استفاده از SHA-1 (توصیه نمی‌شود)
  +tmm  --ts-mac-md5
          استفاده از MD5 (توصیه نمی‌شود)
گزینه‌های مقدار تصادفی (Nonce) برچسب زمانی (فقط همراه با --timestamp-file):
  +tn   --ts-use-nonce
          گنجاندن مقدار تصادفی یکبارمصرف (پیش‌فرض)
  -tn   --ts-no-nonce
          عدم گنجاندن مقدار تصادفی
گزینه‌های گنجاندن گواهی برچسب زمانی (فقط همراه با --timestamp-file):
  +tc   --ts-request-cert
          درخواست گواهی TSA در برچسب زمانی (پیش‌فرض)
  -tc   --ts-no-cert
          عدم درخواست گواهی TSA در برچسب زمانی
گزینه‌های خط‌مشی برچسب زمانی (فقط همراه با --timestamp-file):
  -tp   --ts-no-policy
          عدم تعیین خط‌مشی برچسب زمانی (پیش‌فرض)
  +tp   --ts-policy  [p]olicy-OID: string
          درخواست خط‌مشی برچسب زمانی p

نحو انتقال خروجی:
  +t=   --write-xfer-same
          نوشتن با همان نحو انتقال ورودی (پیش‌فرض)
  +te   --write-xfer-little
          نوشتن با نحو انتقال صریح VR و little endian
  +tb   --write-xfer-big
          نوشتن با نحو انتقال صریح VR و big endian
  +ti   --write-xfer-implicit
          نوشتن با نحو انتقال ضمنی VR و little endian
کدگذاری طول در توالی‌ها و آیتم‌ها:
  +e    --length-explicit
          نوشتن با طول‌های صریح (پیش‌فرض)
  -e    --length-undefined
          نوشتن با طول‌های نامشخص
سایر گزینه‌های خروجی:
  +d    --dump  [f]ilename: string
          تخلیه جریان بایتی ارسال‌شده به کدک MAC در فایل
          (تنها با --sign یا --sign-item)

ابزار dcmsign تعدادی فایل و فرمت فایل را می‌خواند و می‌نویسد که در این بخش شرح داده شده‌اند.

گواهی‌های کلید عمومی با قالب X.509v3 با کدگذاری PEM یا DER مورد انتظار هستند. ابزار dcmsign در حال حاضر از کلیدهای عمومی RSA و DSA پشتیبانی می‌کند، هرچند تنها کلیدهای RSA در پروفایل‌های امنیتی استاندارد دایکام تعریف شده‌اند.

کلیدهای خصوصی با کدگذاری PEM یا DER مورد انتظارند. PEM توصیه می‌شود (و پیش‌فرض است) زیرا امکان نگه‌داری کلیدها به صورت رمزگذاری‌شده را فراهم می‌کند. به طور کلی توصیه نمی‌شود رمز عبور رمزگذاری در خط فرمان مشخص شود، زیرا خط فرمان ممکن است برای سایر فرآیندهای سیستم (مانند با دستور "ps -ef") قابل مشاهده باشد.

به طور پیش‌فرض، dcmsign امضایی ایجاد می‌کند که تمام عناصر داده در مجموعه داده یا آیتم را پوشش می‌دهد. این حالت پیش‌فرض را می‌توان با تعیین صریح فهرستی از عناصر داده (تگ‌های ویژگی) بازنویسی کرد. این لیست می‌تواند از یک فایل خوانده شود یا در خط فرمان مشخص شود یا هر دو.

در خط فرمان، تگ‌های ویژگی به این صورت مشخص می‌شوند:

--tag "gggg,eeee"  که در آن gggg و eeee شماره‌های هگزادسیمال گروه
                   و عنصر هستند
--tag "Name"       که در آن 'Name' یک نام ویژگی نمادین از دیکشنری
                   دایکام است.

هنگامی که تگ‌های ویژگی از طریق گزینه --tag-file از فایل خوانده می‌شوند، یک فایل متنی ساده مورد انتظار است. تگ‌های درون فایل یا نام‌های نمادین از فرهنگ داده هستند یا قالب (gggg,eeee) (همراه با پرانتز) دارند. تگ‌ها با یک یا چند نویسه فاصله سفید از هم جدا می‌شوند.

پروفایل امضای دیجیتال انتخاب‌شده ممکن است تگ‌های ویژگی اضافی را که باید در امضا لحاظ شوند مشخص کند، که به طور خودکار اضافه خواهند شد.

عملیات --sign-item نیاز به یک رشته موقعیت مکانی دارد که مشخص می‌کند امضا در کدام آیتم توالی ایجاد شود. رشته موقعیت مکانی دارای قالب زیر است:

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

که در آن SequenceName یا نام نمادین ویژگی از فرهنگ داده است یا یک تگ عددی در قالب (gggg,eeee)، و index یک عدد صحیح ده‌دهی بدون علامت برای شماره آیتم است که از صفر برای اولین آیتم آغاز می‌شود. برای نمونه، رشته موقعیت زیر:

ReferencedSeriesSequence[0].ReferencedImageSequence[1]

موجب ایجاد امضای دیجیتال در دومین آیتم از ReferencedImageSequence (0008,1140) می‌شود که در نخستین آیتم ReferencedSeriesSequence (0008,1115) در مجموعه داده اصلی دایکام قرار دارد.

از نسخه 3.6.6، ابزار dcmsign پشتیبانی از برچسب‌های زمانی معتبر بر اساس RFC 3161 را ارائه می‌دهد. این ابزار می‌تواند یک درخواست برچسب زمانی (TSQ) را هنگام ایجاد امضا بنویسد، و دستور جدید --insert-timestamp پاسخ برچسب زمانی (TSR) را از فایل خوانده و به امضای دیجیتال دایکام اضافه می‌کند.

در زمان اعتبارسنجی امضا، وجود برچسب زمانی تشخیص داده شده و اعتبارسنجی می‌شود مگر اینکه گزینه --ignore-ts استفاده شده باشد. اعتبارسنجی امضا و برچسب زمانی از یک مخزن گواهی مشترک استفاده می‌کنند. این مخزن می‌تواند با گزینه‌های --add-cert-file، --add-cert-dir، --add-ucert-file و --add-crl-file پر شود.

به جای افزودن دستی گواهی‌های CA و فهرست‌های ابطال گواهی (CRL)، کاربر می‌تواند با استفاده از --add-cert-dir دایرکتوری ایجاد کند که dcmsign در صورت نیاز گواهی‌ها را از آنجا جستجو و بارگذاری کند.

این پوشه باید به ازای هر گواهی یا CRL یک فایل با فرمت PEM و با نامی به صورت hash.N برای گواهی یا hash.rN برای CRL داشته باشد. هش مقداری است که توسط دستورات زیر برگردانده می‌شود:

openssl x509 -hash -noout -in <filename.pem> (برای گواهی) openssl crl -hash -noout -in <filename.pem> (برای CRL)

پسوند .N یا .rN یک شماره ترتیبی است که از صفر شروع می‌شود و به ازای هر گواهی یا CRL با مقدار هش یکسان یکی اضافه می‌شود. وجود فاصله در شماره‌ها پشتیبانی نمی‌شود.

فهرست‌های CRL تنها زمانی بررسی می‌شوند که گزینه --enable-crl-vfy مشخص شده باشد.

سطح خروجی ثبت وقایع ابزارهای خط فرمان و کتابخانه‌های زیربنایی می‌تواند توسط کاربر مشخص شود. به طور پیش‌فرض، تنها خطاها و هشدارها در خروجی استاندارد خطا نوشته می‌شوند. با استفاده از گزینه --verbose پیام‌های اطلاع‌رسانی مانند جزئیات پردازش نیز گزارش می‌شوند. گزینه --debug برای دریافت جزئیات بیشتر درباره فعالیت‌های داخلی استفاده می‌شود. در حالت --quiet تنها خطاهای مهلک گزارش می‌شوند.

در صورتی که خروجی ثبت وقایع باید در فایل نوشته شود، گزینه --log-config می‌تواند استفاده شود. یک نمونه فایل پیکربندی در <etcdir>/logger.cfg ارائه شده است.

تمام ابزارهای خط فرمان از نشانه‌گذاری زیر برای پارامترها استفاده می‌کنند: براکت‌های مربعی مقادیر اختیاری را احاطه می‌کنند (0-1)، سه نقطه پایانی نشان می‌دهد که مقادیر متعدد مجاز است (1-n)، و ترکیبی از هر دو به معنی 0 تا n مقدار است.

گزینه‌های خط فرمان با علامت پیشوند '+' یا '-' از پارامترها متمایز می‌شوند. معمولاً ترتیب و موقعیت گزینه‌ها اختیاری است. در صورت ناسازگاری گزینه‌ها، آخرین گزینه در سمت راست اعمال می‌شود.

علاوه بر این، می‌توان فایل‌های دستور را با پیشوند '@' تعیین کرد (مانند @command.txt). چنین آرگومانی با محتوای فایل متنی مربوطه جایگزین می‌شود.

ابزار dcmsign هنگام خروج از کدهای زیر استفاده می‌کند:

EXITCODE_NO_ERROR                         0
EXITCODE_COMMANDLINE_SYNTAX_ERROR         1
EXITCODE_NOOPENSSL                        5

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

EXITCODE_CANNOT_WRITE_OUTPUT_FILE        40
EXITCODE_CANNOT_WRITE_SUPPORT_FILE       46

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

EXITCODE_NO_SIGNATURES_PRESENT           100
EXITCODE_SIGNATURE_VERIFICATION_FAILED   101
EXITCODE_SIGNATURE_VERIFICATION_POLICY   102

ابزار dcmsign تلاش خواهد کرد فرهنگ‌های داده دایکام را که در متغیر محیطی DCMDICTPATH مشخص شده‌اند، بارگذاری کند. به طور پیش‌فرض، یعنی اگر متغیر محیطی DCMDICTPATH تنظیم نشده باشد، فایل <datadir>/dicom.dic بارگذاری خواهد شد مگر اینکه فرهنگ داده درون برنامه ساخته شده باشد.

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

Thu Jul 9 2026 18:43:40 Version 3.7.0