کلیدها با crypto.getRandomValues و روی دستگاه خودتان ساخته میشوند. هیچ درخواستی به سرور نمیرود، هیچ کلیدی ذخیره یا لاگ نمیشود و با بستن صفحه از حافظه پاک میشود — فقط تنظیمات (نه خود کلید) برای دفعهٔ بعد نگه داشته میشود.
الگوریتم، حداقل طول مجاز کلید را تعیین میکند (RFC 7518).
«بایت تصادفی» کلید را از خروجی خام crypto.getRandomValues میسازد و بیشترین آنتروپی را در هر بایت دارد — گزینهٔ توصیهشده. «رشتهٔ ASCII» کلیدی خوانا و قابل تایپ میسازد که در فایلهای پیکربندی دردسر انکدینگ ایجاد نمیکند.
برای چرخش کلید (key rotation) دو کلید بسازید: فعال و بعدی.
امنیت و رمزنگاری
ساخت کلید امن JWT برای HS256/HS384/HS512 با طول ۳۲ تا ۵۱۲ بیت، جفتکلید RSA/ECDSA، JWKS، آزمایشگاه امضای توکن، بازرسی کلید و کد آماده برای فریمورکها
کلید مخفی JWT همان چیزی است که امضای توکنهای احراز هویت شما را معتبر نگه میدارد؛ اگر این کلید ضعیف یا قابل حدس باشد، مهاجم میتواند توکن دلخواه خودش را بسازد و بهجای هر کاربری وارد سامانه شود. ابزار تولید کلید مخفی JWT در BaseTools این کلید را با Web Crypto API و مولد اعداد تصادفی امن مرورگر (crypto.getRandomValues) میسازد — بدون هیچ درخواستی به سرور، بدون ذخیرهسازی و بدون لاگ. میتوانید الگوریتم HS256، HS384 یا HS512 را انتخاب کنید و ابزار بهطور خودکار بررسی میکند که طول کلید، حداقل الزام RFC 7518 (کلید دستکم به اندازهٔ خروجی هش) را برآورده کند. طول کلید از ۳۲ تا ۵۱۲ بیت قابل تنظیم است و خروجی را میتوانید در قالبهای Base64، Base64URL، Hex، JWK یا آرایهٔ بایت بگیرید. فراتر از یک تولیدکنندهٔ ساده، این ابزار جفتکلید نامتقارن RSA و ECDSA با خروجی PEM و سند JWKS میسازد، یک آزمایشگاه دارد که با کلید شما یک توکن واقعی امضا و اعتبارسنجی میکند، کلیدهای فعلی پروژهتان را از نظر آنتروپی و حضور در فهرست کلیدهای لورفته بازرسی میکند و کد آمادهٔ پیکربندی را برای Node.js، NestJS، jose، Python، Go، Laravel، Spring Boot، Docker و Kubernetes در اختیارتان میگذارد.
طبق RFC 7518، کلید HMAC باید دستکم به اندازهٔ خروجی تابع هش باشد: ۲۵۶ بیت (۳۲ بایت) برای HS256، ۳۸۴ بیت برای HS384 و ۵۱۲ بیت برای HS512. کلید کوتاهتر از این مقدار را کتابخانههای استاندارد مانند jose رد میکنند و امنیت امضا را تضعیف میکند. توصیهٔ ما ۲۵۶ بیت یا بیشتر است؛ این ابزار هر وقت کلید زیر حد مجاز باشد به شما هشدار میدهد.
بله. کلیدها با crypto.getRandomValues ساخته میشوند که مولد اعداد تصادفی امن رمزنگاری (CSPRNG) خود مرورگر است — نه Math.random که برای رمزنگاری کاملاً نامناسب است. در حالت رشتهٔ ASCII هم برای جلوگیری از سوگیری آماری از روش rejection sampling استفاده میشود تا همهٔ کاراکترها شانس یکسان داشته باشند.
خیر. تمام پردازش صد درصد در مرورگر شما انجام میشود؛ هیچ درخواست شبکهای برای تولید کلید فرستاده نمیشود. کلیدها حتی در حافظهٔ محلی (localStorage) هم ذخیره نمیشوند و با بستن یا نوسازی صفحه از بین میروند — فقط تنظیمات ابزار (مثل الگوریتم و طول انتخابی) نگه داشته میشود. میتوانید صفحه را باز کنید، اینترنت را قطع کنید و همچنان کلید بسازید.
در HS256 یک کلید متقارن هم برای امضا و هم برای بررسی امضا استفاده میشود؛ ساده و سریع است و برای وقتی که همان سرویسی که توکن را میسازد آن را بررسی هم میکند، انتخاب درستی است. در RS256 (و ES256) یک جفتکلید دارید: کلید خصوصی فقط نزد صادرکنندهٔ توکن میماند و کلید عمومی را میتوانید آزادانه بین سرویسها پخش کنید. اگر معماری میکروسرویسی دارید یا شخص ثالثی باید توکنهای شما را اعتبارسنجی کند، RS256 یا ES256 امنتر است — از تب «جفتکلید» همین ابزار بسازیدشان.
هرگز کلید را داخل کد یا مخزن گیت قرار ندهید. آن را در متغیر محیطی (فایل .env که در .gitignore است)، یا بهتر از آن در یک سرویس مدیریت راز مانند Kubernetes Secret، AWS Secrets Manager، HashiCorp Vault یا Doppler نگه دارید. همچنین کلید محیط توسعه و پروداکشن باید متفاوت باشند و کلید را بهصورت دورهای (مثلاً هر چند ماه) بچرخانید.
تعداد کلید را روی ۲ بگذارید تا یک کلید «فعال» و یک کلید «بعدی» بسازید. هر کلید یک شناسهٔ kid یکتا دارد که در header توکن قرار میگیرد. در بازهٔ چرخش، سرویس اعتبارسنجی هر دو کلید را میپذیرد (بر اساس kid توکن) ولی امضای توکنهای جدید فقط با کلید فعال انجام میشود؛ پس از انقضای همهٔ توکنهای قدیمی، کلید قبلی را حذف میکنید. سند JWKS دوکلیدی آمادهٔ همین کار در تب «کد فریمورک» موجود است.
اگر سرور شما الگوریتم را از خودِ header توکن بخواند، مهاجم میتواند alg را روی none یا یک الگوریتم ضعیفتر بگذارد و امضا را دور بزند. راهحل ساده است: هنگام اعتبارسنجی همیشه فهرست الگوریتمهای مجاز را صریح بدهید (مثلاً algorithms: ['HS256']). تمام نمونهکدهای این ابزار از قبل با همین تنظیم امن نوشته شدهاند.