DNSSEC-KEYGEN(1) BIND 9 DNSSEC-KEYGEN(1)

dnssec-keygen - ابزار تولید کلید احراز هویت امن DNSSEC

dnssec-keygen [-3] [-A date/offset] [-a algorithm] [-b keysize] [-C] [-c class] [-D date/offset] [-d bits] [-D sync date/offset] [-E engine] [-f flag] [-F] [-G] [-h] [-I date/offset] [-i interval] [-K directory] [-k policy] [-L ttl] [-l file] [-n nametype] [-M tag_min:tag_max] [-P date/offset] [-P sync date/offset] [-p protocol] [-q] [-R date/offset] [-S key] [-s strength] [-T rrtype] [-t type] [-V] [-v level] {name}

دستور dnssec-keygen کلیدهایی را برای DNSSEC (سامانه نام دامنه امن یا Secure DNS)، همان‌طور که در RFC 2535 https://datatracker.ietf.org/doc/html/rfc2535.html و RFC 4034 https://datatracker.ietf.org/doc/html/rfc4034.html تعریف شده است، تولید می‌کند.

نام (name) کلید در خط فرمان مشخص می‌شود. برای کلیدهای DNSSEC، این نام باید با نام ناحیه‌ای (zone) که کلید برای آن تولید می‌شود، مطابقت داشته باشد.

-3
این گزینه از یک الگوریتم با قابلیت پشتیبانی از NSEC3 برای تولید یک کلید DNSSEC استفاده می‌کند. اگر این گزینه همراه با الگوریتمی استفاده شود که هر دو نسخه NSEC و NSEC3 را دارد، نسخه NSEC3 انتخاب می‌شود؛ به عنوان مثال، dnssec-keygen -3 -a RSASHA1 الگوریتم (منسوخ‌شده) NSEC3RSASHA1 را مشخص می‌کند.
این گزینه الگوریتم رمزنگاری را انتخاب می‌کند. برای کلیدهای DNSSEC، مقدار algorithm باید یکی از مقادیر RSASHA1 (منسوخ‌شده)، NSEC3RSASHA1 (منسوخ‌شده)، RSASHA256، RSASHA512، ECDSAP256SHA256، ECDSAP384SHA384، ED25519 یا ED448 باشد.

این مقادیر نسبت به بزرگی و کوچکی حروف حساس نیستند. در برخی موارد، اختصارات نیز پشتیبانی می‌شوند، مانند ECDSA256 برای ECDSAP256SHA256 و ECDSA384 برای ECDSAP384SHA384. اگر RSASHA1 (منسوخ‌شده) همراه با گزینه -3 مشخص شود، به جای آن از NSEC3RSASHA1 (منسوخ‌شده) استفاده می‌شود.

این پارامتر باید مشخص شود، مگر هنگام استفاده از گزینه -S که الگوریتم را از کلید پیشین (predecessor key) کپی می‌کند.

در نسخه‌های پیشین، الگوریتم‌های HMAC می‌توانستند برای استفاده به عنوان کلیدهای TSIG تولید شوند، اما این ویژگی در BIND 9.13.0 حذف شد. برای تولید کلیدهای TSIG از tsig-keygen <#std-iscman-tsig-keygen> استفاده کنید.

این گزینه تعداد بیت‌های کلید را مشخص می‌کند. انتخاب اندازه کلید به الگوریتم مورد استفاده بستگی دارد: کلیدهای RSA باید بین ۱۰۲۴ تا ۴۰۹۶ بیت باشند؛ کلیدهای دیفی-هلمن (Diffie-Hellman) باید بین ۱۲۸ تا ۴۰۹۶ بیت باشند. الگوریتم‌های منحنی بیضوی (Elliptic curve) نیازی به این پارامتر ندارند.

اگر اندازه کلید مشخص نشده باشد، برخی الگوریتم‌ها دارای مقادیر پیش‌فرض از پیش تعریف‌شده هستند. به عنوان مثال، کلیدهای RSA برای استفاده به عنوان کلیدهای امضای ناحیه DNSSEC (موسوم به ZSK) دارای اندازه پیش‌فرض ۱۰۲۴ بیت هستند؛ کلیدهای RSA برای استفاده به عنوان کلیدهای امضای کلید (KSK، تولیدشده با -f KSK) به طور پیش‌فرض ۲۰۴۸ بیت هستند.

این گزینه حالت سازگاری را فعال می‌کند که یک کلید به سبک قدیمی، بدون هیچ‌گونه فراداده زمان‌بندی تولید می‌کند. به طور پیش‌فرض، dnssec-keygen تاریخ ایجاد کلید را در فراداده‌های ذخیره‌شده همراه با کلید خصوصی قرار می‌دهد؛ تاریخ‌های دیگر نیز ممکن است در آنجا تنظیم شوند، از جمله تاریخ انتشار، تاریخ فعال‌سازی و غیره. کلیدهایی که شامل این داده‌ها هستند ممکن است با نسخه‌های قدیمی‌تر BIND ناسازگار باشند؛ گزینه -C از درج آن‌ها جلوگیری می‌کند.
این گزینه مشخص می‌کند که رکورد DNS حاوی کلید باید دارای کلاس تعیین‌شده باشد. در صورت عدم تعیین، از کلاس IN استفاده می‌شود.
این گزینه اندازه کلید را بر حسب بیت مشخص می‌کند. برای الگوریتم‌های RSASHA1، NSEC3RSASA1، RSASHA256 و RSASHA512 اندازه کلید باید بین ۱۰۲۴ تا ۴۰۹۶ بیت باشد؛ اندازه DH بین ۱۲۸ تا ۴۰۹۶ بیت است. این گزینه برای الگوریتم‌های ECDSAP256SHA256، ECDSAP384SHA384، ED25519 و ED448 نادیده گرفته می‌شود.
این گزینه سخت‌افزار رمزنگاری مورد استفاده را در صورت امکان مشخص می‌کند.

هنگامی که BIND 9 با OpenSSL ساخته شده باشد، این مقدار باید روی شناسه موتور OpenSSL تنظیم شود که شتاب‌دهنده رمزنگاری یا ماژول خدمات سخت‌افزاری (معمولاً pkcs11) را هدایت می‌کند.

این گزینه پرچم (flag) مشخص‌شده را در فیلد پرچم رکورد KEY/DNSKEY تنظیم می‌کند. تنها پرچم‌های شناخته‌شده عبارتند از ZSK (کلید امضای ناحیه یا Zone-Signing Key)، KSK (کلید امضای کلید یا Key-Signing Key) و REVOKE (ابطال).

توجه داشته باشید که ZSK یک پرچم فیزیکی در رکورد DNSKEY نیست، بلکه صرفاً برای این استفاده می‌شود که صریحاً مشخص کنید می‌خواهید یک ZSK ایجاد کنید. تنظیم -f همراه با -k منجر به تولید کلیدهایی می‌شود که فقط با نقش مشخص‌شده با این گزینه مطابقت دارند.

اگر کتابخانه رمزنگاری زیربنایی از اجرای در حالت FIPS پشتیبانی کند، این گزینه حالت استانداردهای فدرال پردازش اطلاعات ایالات متحده (FIPS) را فعال می‌کند.
این گزینه یک کلید تولید می‌کند، اما آن را منتشر نکرده و با آن امضا نمی‌کند. این گزینه با -P و -A ناسازگار است.
این گزینه خلاصه‌ای کوتاه از گزینه‌ها و آرگومان‌های dnssec-keygen را چاپ می‌کند.
این گزینه دایرکتوری مورد نظری را که پرونده‌های کلید باید در آن نوشته شوند تنظیم می‌کند.
این گزینه کلیدها را برای یک dnssec-policy خاص ایجاد می‌کند. اگر یک خط‌مشی از چندین کلید استفاده کند، dnssec-keygen چندین کلید تولید می‌کند. این گزینه همچنین یک پرونده ".state" برای پیگیری وضعیت کلید ایجاد می‌کند.

این گزینه کلیدها را مطابق با پیکربندی dnssec-policy ایجاد می‌کند، بنابراین نمی‌توان آن را هم‌زمان با بسیاری از گزینه‌های دیگر که dnssec-keygen ارائه می‌دهد استفاده کرد.

این گزینه TTL پیش‌فرض را برای استفاده در این کلید هنگام تبدیل شدن به یک رکورد منبع (RR) از نوع DNSKEY تنظیم می‌کند. این همان TTL است که هنگام وارد شدن کلید به یک ناحیه استفاده می‌شود، مگر اینکه از قبل یک مجموعه‌رکورد (RRset) از نوع DNSKEY در آنجا وجود داشته باشد، که در این صورت TTL موجود اولویت دارد. اگر این مقدار تنظیم نشود و هیچ DNSKEY RRset موجود نباشد، مقدار TTL به طور پیش‌فرض روی TTL مربوط به SOA قرار می‌گیرد. تنظیم TTL پیش‌فرض روی 0 یا none همانند تنظیم‌نشده رها کردن آن است.
این گزینه یک پرونده پیکربندی حاوی عبارت dnssec-policy (مطابق با خط‌مشی تنظیم‌شده با -k) را ارائه می‌دهد.
این گزینه محدوده مقادیر تگ کلید (key tag) قابل قبول را که dnssec-keygen تولید خواهد کرد تنظیم می‌کند. اگر تگ کلید جدید یا تگ کلید نسخه باطل‌شده کلید جدید خارج از این محدوده باشد، کلید جدید رد شده و کلید جدید دیگری تولید می‌شود. این گزینه برای استفاده هنگام تولید کلید در سناریوی چندامضاکننده (multi-signer) طراحی شده است، که در آن به هر اپراتور محدوده‌ای از تگ‌های کلید اختصاص داده می‌شود تا از تداخل بین اپراتورهای مختلف جلوگیری شود. مقادیر معتبر برای tag_min و tag_max در بازه [0..65535] هستند. حالت پیش‌فرض اجازه می‌دهد تمام مقادیر تگ کلید تولید شوند. این گزینه در صورت تعیین -k policy نادیده گرفته می‌شود.
این گزینه نوع مالک کلید را مشخص می‌کند. مقدار nametype باید یکی از مقادیر ZONE (برای یک کلید ناحیه DNSSEC از نوع KEY/DNSKEY)، HOST یا ENTITY (برای یک کلید مرتبط با میزبان از نوع KEY)، USER (برای یک کلید مرتبط با کاربر از نوع KEY) یا OTHER (برای DNSKEY) باشد. این مقادیر نسبت به بزرگی و کوچکی حروف حساس نیستند. پیش‌فرض برای تولید DNSKEY برابر با ZONE است.
این گزینه مقدار پروتکل را برای کلید تولیدشده، جهت استفاده با -T KEY تنظیم می‌کند. پروتکل عددی بین ۰ و ۲۵۵ است. مقدار پیش‌فرض ۳ (DNSSEC) است. سایر مقادیر ممکن برای این آرگومان در RFC 2535 https://datatracker.ietf.org/doc/html/rfc2535.html و جانشین‌های آن فهرست شده‌اند.
این گزینه حالت بی‌صدا (quiet mode) را فعال می‌کند که خروجی‌های غیرضروری، از جمله نشانگر پیشرفت را سرکوب می‌نماید. بدون این گزینه، هنگامی که dnssec-keygen به صورت تعاملی برای تولید یک جفت‌کلید RSA یا DSA اجرا می‌شود، رشته‌ای از نمادها را در stderr چاپ می‌کند که پیشرفت تولید کلید را نشان می‌دهد. یک . نشان می‌دهد که یک عدد تصادفی پیدا شده که از آزمایش غربال اولیه عبور کرده است؛ + به این معنی است که یک عدد از یک دور آزمایش اول بودن میلر-رابین (Miller-Rabin) عبور کرده است؛ و یک فاصله ( ) به این معنی است که عدد از تمام آزمایش‌ها عبور کرده و یک کلید رضایت‌بخش است.
این گزینه یک کلید جدید ایجاد می‌کند که جانشین صریح یک کلید موجود است. نام، الگوریتم، اندازه و نوع کلید مطابق با کلید موجود تنظیم می‌شوند. تاریخ فعال‌سازی کلید جدید روی تاریخ غیرفعال‌سازی کلید موجود تنظیم می‌شود. تاریخ انتشار روی تاریخ فعال‌سازی منهای فاصله پیش‌انتشار تنظیم می‌شود که پیش‌فرض آن ۳۰ روز است.
این گزینه مقدار استحکام (strength) کلید را مشخص می‌کند. استحکام عددی بین ۰ و ۱۵ است و در حال حاضر هیچ کاربرد تعریف‌شده‌ای در DNSSEC ندارد.
این گزینه نوع رکورد منبع (RR type) مورد استفاده برای کلید را مشخص می‌کند. مقدار rrtype باید DNSKEY یا KEY باشد. هنگام استفاده از یک الگوریتم DNSSEC، مقدار پیش‌فرض DNSKEY است، اما می‌توان آن را برای استفاده با SIG(0) به KEY تغییر داد.
این گزینه نوع کلید را جهت استفاده با -T KEY مشخص می‌کند. مقدار type باید یکی از مقادیر AUTHCONF، NOAUTHCONF، NOAUTH یا NOCONF باشد. مقدار پیش‌فرض AUTHCONF است. عبارت AUTH به توانایی احراز هویت داده‌ها و CONF به توانایی رمزگذاری داده‌ها اشاره دارد.
این گزینه اطلاعات نسخه را چاپ می‌کند.
این گزینه سطح اشکال‌زدایی (debugging level) را تنظیم می‌کند.

تاریخ‌ها را می‌توان در قالب YYYYMMDD یا YYYYMMDDHHMMSS (که قالب مورد استفاده در داخل پرونده‌های کلید است)، یا 'Day Mon DD HH:MM:SS YYYY' (همان‌طور که توسط dnssec-settime -p چاپ می‌شود)، یا زمان مبدأ یونیکس (UNIX epoch time همان‌طور که توسط dnssec-settime -up چاپ می‌شود)، یا به صورت عبارت متنی now بیان کرد.

آرگومان می‌تواند با + یا - و یک مقدار انحراف زمانی (آفست) نسبت به زمان داده‌شده همراه باشد. عبارت متنی now را می‌توان قبل از آفست حذف کرد. آفست می‌تواند با یکی از پسوندهای y، mo، w، d، h یا mi همراه باشد تا به ترتیب بر حسب سال (تعریف‌شده به عنوان ۳۶۵ روز ۲۴ ساعته، بدون در نظر گرفتن سال‌های کبیسه)، ماه (تعریف‌شده به عنوان ۳۰ روز ۲۴ ساعته)، هفته، روز، ساعت یا دقیقه محاسبه شود. بدون پسوند، آفست بر حسب ثانیه محاسبه می‌شود.

برای لغو تنظیم یک تاریخ، از none، never یا unset استفاده کنید.

این گزینه تاریخی را تعیین می‌کند که کلید باید در آن تاریخ در ناحیه منتشر شود. پس از آن تاریخ، کلید در ناحیه قرار می‌گیرد اما برای امضای آن استفاده نمی‌شود. در صورت عدم تنظیم، و اگر از گزینه -G استفاده نشده باشد، پیش‌فرض تاریخ فعلی است.
این گزینه تاریخی را تعیین می‌کند که رکوردهای CDS و CDNSKEY مطابق با این کلید باید در ناحیه منتشر شوند.
این گزینه تاریخی را مشخص می‌کند که کلید باید فعال شود. پس از آن تاریخ، کلید در ناحیه قرار گرفته و برای امضای آن استفاده می‌شود. در صورت عدم تنظیم، و اگر از گزینه -G استفاده نشده باشد، پیش‌فرض تاریخ فعلی است. در صورت تنظیم و عدم تنظیم -P، تاریخ انتشار روی تاریخ فعال‌سازی منهای فاصله پیش‌انتشار تنظیم می‌شود.
این گزینه تاریخی را مشخص می‌کند که کلید باید باطل (revoked) شود. پس از آن تاریخ، پرچم باطل‌شده برای کلید تنظیم می‌گردد. کلید همچنان در ناحیه قرار دارد و برای امضای آن استفاده می‌شود.
این گزینه تاریخی را مشخص می‌کند که کلید باید بازنشسته (غیرفعال) شود. پس از آن تاریخ، کلید همچنان در ناحیه گنجانده می‌شود، اما برای امضای آن استفاده نمی‌گردد.
این گزینه تاریخی را مشخص می‌کند که کلید باید حذف شود. پس از آن تاریخ، کلید دیگر در ناحیه گنجانده نمی‌شود (با این حال، ممکن است در مخزن کلیدها باقی بماند).
این گزینه تاریخی را تعیین می‌کند که رکوردهای CDS و CDNSKEY مطابق با این کلید باید حذف شوند.
این گزینه فاصله پیش‌انتشار (prepublication interval) را برای یک کلید تعیین می‌کند. در صورت تنظیم، تاریخ‌های انتشار و فعال‌سازی باید حداقل به این میزان با هم فاصله داشته باشند. اگر تاریخ فعال‌سازی مشخص شده باشد اما تاریخ انتشار تعیین نشده باشد، تاریخ انتشار به طور پیش‌فرض به این میزان قبل از تاریخ فعال‌سازی تنظیم می‌شود؛ برعکس، اگر تاریخ انتشار مشخص شده باشد اما تاریخ فعال‌سازی تعیین نشده باشد، فعال‌سازی به این میزان پس از انتشار تنظیم می‌گردد.

اگر کلید به عنوان جانشین صریح کلید دیگری ساخته شود، فاصله پیش‌انتشار پیش‌فرض ۳۰ روز است؛ در غیر این صورت صفر است.

مشابه با آفست‌های تاریخ، اگر آرگومان با یکی از پسوندهای y، mo، w، d، h یا mi همراه باشد، فاصله زمانی به ترتیب بر حسب سال، ماه، هفته، روز، ساعت یا دقیقه محاسبه می‌شود. بدون پسوند، فاصله زمانی بر حسب ثانیه اندازه‌گیری می‌گردد.

هنگامی که dnssec-keygen با موفقیت به پایان می‌رسد، رشته‌ای به شکل Knnnn.+aaa+iiiii را در خروجی استاندارد چاپ می‌کند. این یک رشته شناسایی برای کلیدی است که تولید کرده است.

  • nnnn نام کلید است.
  • aaa نمایش عددی الگوریتم است.
  • iiiii شناسه کلید (یا ردپا / footprint) است.

دستور dnssec-keygen دو پرونده بر اساس رشته چاپ‌شده ایجاد می‌کند. پرونده Knnnn.+aaa+iiiii.key حاوی کلید عمومی است، و Knnnn.+aaa+iiiii.private حاوی کلید خصوصی است.

پرونده .key حاوی یک رکورد DNSKEY یا KEY است. هنگامی که یک ناحیه توسط named <#std-iscman-named> یا dnssec-signzone -S <#cmdoption-dnssec-signzone-S> امضا می‌شود، رکوردهای DNSKEY به طور خودکار اضافه می‌شوند. در سایر موارد، پرونده .key می‌تواند به صورت دستی یا با یک عبارت $INCLUDE در پرونده ناحیه درج شود.

پرونده .private شامل فیلدهای خاص الگوریتم است. به دلایل امنیتی واضح، این پرونده دسترسی خواندن عمومی ندارد.

برای تولید یک کلید امضای ناحیه (ZSK) از نوع ECDSAP256SHA256 برای ناحیه example.com، دستور زیر را صادر کنید:

dnssec-keygen -a ECDSAP256SHA256 example.com

این دستور رشته‌ای به این شکل چاپ می‌کند:

Kexample.com.+013+26160

در این مثال، dnssec-keygen پرونده‌های Kexample.com.+013+26160.key و Kexample.com.+013+26160.private را ایجاد می‌کند.

برای تولید یک کلید امضای کلید (KSK) منطبق، دستور زیر را صادر کنید:

dnssec-keygen -a ECDSAP256SHA256 -f KSK example.com

dnssec-signzone(8) <#std-iscman-dnssec-signzone>، راهنمای مرجع مدیر BIND 9 (BIND 9 Administrator Reference Manual)، RFC 2539 https://datatracker.ietf.org/doc/html/rfc2539.html، RFC 2845 https://datatracker.ietf.org/doc/html/rfc2845.html، RFC 4034 https://datatracker.ietf.org/doc/html/rfc4034.html.

Internet Systems Consortium

2026, Internet Systems Consortium

2026-08-19 9.20.27