NONCE – شماره‌ی یک‌بار مصرف

فعالیت خرابکاران اینترنتی و هکرها سبب شده تا برنامه‌نویسان وب شیوه‌های جدیدی برای حفاظت از منابع و داده‌های سرور و مشتریان ابداع کنند. یکی از این نوآوری‌ها «Number Used Once» یا به اختصار «NONCE» است

NONCE شماره‌ یا رشته‌ای از اعداد و حروف است که طولی دلخواه دارد و به طور اتفاقی تولید می‌شود. NONCE می‌تواند علاوه بر بخش‌های اتفاقی، نشان‌های معناداری مانند زمان و تاریخ و کدهای خاص را در بر داشته باشد.

این فناوری برای دو هدف مورد استفاده قرار می‌گیرد:
هدف نخست: معتبرسازی داده‌های فرم‌ها در حالت معمول خرابکاران و کاربران مبتدی می‌توانند فرم‌های موجود در صفحه را به طور مکرر ارسال کنند که این موضوع می‌تواند سبب ایجاد مشکلاتی در سمت سرور شود. NONCE می‌تواند در کنار Captcha و یا به عنوان جایگزینی برای آن مورد استفاده قرار گیرد.
هدف دوم: پیشگیری از دزدی اطلاعات در لایه‌های شبکه اطلاعاتی که در لایه‌های شبکه دریافت و ارسال می‌شوند، اگر کدگذاری نشوند، به سادگی قابل ردیابی هستند.

همان طور که گفته شد، NONCE یا «شماره‌ی یک‌بار مصرف» می‌تواند شامل داده‌های با معنی نیز باشد. برای مثال ممکن است یک برنامه نویس، Timestamp زمان فعلی را همراه فرم به عنوان Nonce به مشتری ارسال کند، مشتری با ارسال مجدد این Nonce به سرور، تعیین خواهد کرد که چه زمانی این شماره را از سرور دریافت کرده، سرور بر اساس این شماره می‌تواند از «زمان تولید فرم» و اینکه «آیا پیش‌از این کسی این فرم را ارسال کرده یا خیر» آگاه شود( با کمک پایگاه داده ) و بر اساس آن تصمیم‌های لازم را بگیرد.

نوع دوم NONCE نوع رمزنویسی شده‌ی NONCE است که کاربرد امنیتی دارد. همان طور که می‌دانید، محافظت از نام و گذرواژه‌ی کاربران در هنگام ورود به سایت از اهمیت بالایی برخوردار است. NONCE رمزنویسی‌شده یا Cryptographic NONCE به برنامه‌نویس در حفاظت این داده‌ها یاری می‌رساند.

برای مثال یک سناریوی ساده در هنگام ورود کاربر را شرح می‌دهم:

  • سرور فرم ورود را به همراه NONCE برای مشتری ارسال می‌کند
  • کاربر نام کاربری و گذرواژه‌ی خود را در فرم وارد و آن را ارسال می‌کند
  • در سمت مشتری، پیش از ارسال، یک NONCE جدید تولید می‌شود
  • NONCE اصلی، NONCE مشتری و گذرواژه‌ی کاربر با یکدیگر ترکیب و Hash می‌شوند
  • نام کاربری، گذرواژه‌ی پردازش‌شده و Hash شده و NONCE مشتری به سرور فرستاده می‌شوند.
  • سرور با دانستن NONCE خود و در اختیار داشتن NONCE مشتری، رمز را شناسایی و ارزیابی می‌کند
  • پاسخ برای مشتری ارسال می‌شود

در سناریوی بالا امکان دستیابی به هر دو هدف ایجاد NONCE فراهم است و امکان دستبرد به اطلاعات مشتری به حداقل خود کاهش می‌یابد.

خرابکاران هر روز راه‌های تازه‌ای برای سرقت اطلاعات و هک سایت‌ها پیدا می‌کنند، دانستن این راه‌ها و شیوه‌ی مقابله با آن‌ها از نیازهای هر توسعه‌دهنده‌ی وب است.

این نوشته در امنیت, فناوری ارسال شده است. افزودن پیوند یکتا به علاقه‌مندی‌ها.

۶ دیدگاه برای NONCE – شماره‌ی یک‌بار مصرف

  1. بهروز می‌گوید:

    مطلب خوبی بود
    زیاد در این مورد شنیده بودم
    تعدادی از بانک های ایرانی هم روی این مورد کار کرده اند
    موفق و پیروز باشید

  2. زهرا می‌گوید:

    سلام
    ممنون از مطلبتون خوب بود
    موفق باشین

  3. حمیدرضا می‌گوید:

    بسم الله الرحمن الرحیم
    اللهم صل علی محمد و آل محمد و عجل فرجهم

    سلام خیلی ممنون
    انشاءالله سربلند باشید
    فقط در مورد خود nonce که دقیقا چکار میکنه متوجه نشدم یعنی الان پیام با یک nonce که مثلا یک عدد تصادفی هست ارسال میشود حالا گیرنده باید چکار کند و این عدد تصادفی رو چه کسی ایجاد میکنه؟

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      این شماره توسط اسکریپت ایجاد می‌شود و در صفحه قرار می‌گیرد
      و همراه اطلاعاتی که کاربر در صفحه وارد می‌کند به اسکریپت برمی‌گردد.
      در نتیجه اسکریپت می‌تواند بررسی کند که آیا صفحه را خودش ایجاد کرده یا اینکه یک ربات به صورت پی در پی دارد اطلاعات می‌فرستد

  4. وحید می‌گوید:

    سلام. ممنون از مطلب خوبتون.

    یه سوال داشتم. Nonce سرور برای اینه که سرور بفهمه فرم رو خودش تولید کرده. Nonce ای که کاربر تولید میکنه و به سرور می فرسته کجا استفاده میشه؟

    • امیرمسعود ایرانی می‌گوید:

      با سلام و تشکر
      Nonce را کاربر تولید نمی‌کند. بلکه سرور موقع ایجاد فرم آن را می‌سازد و همراه فرم قرار می‌دهد
      کاربر همان Nonce ایجاد شده توسط سرور را مجددا به سرور می‌فرستد. سرور سپس بررسی می‌کند که آیا همراه درخواست Nonce مجاز وجود دارد یا خیر
      اگر نباشد، یا مجاز نباشد یا تکراری باشد پاسخ نمی‌دهد.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>